fromis_9/app/lib/models/schedule.dart
caadiq 488e4094c8 Flutter 앱: 멤버 화면 카드 스와이프 UI 및 홈 애니메이션 추가
- 홈 화면에 웹과 동일한 framer-motion 스타일 애니메이션 적용
- 멤버 화면 카드 스와이프 디자인으로 재구현
- 인스타그램 딥링크 지원 (url_launcher, AndroidManifest queries)
- flutter_svg 추가로 SVG 아이콘 동적 strokeWidth 지원
- 바텀 네비게이션 아이콘 strokeWidth 웹과 동일하게 조정
- 멤버 화면 툴바 그림자 제거 및 인디케이터 그림자 최적화
- 탭 전환 시 애니메이션 재생 기능 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 00:07:59 +09:00

61 lines
1.6 KiB
Dart

/// 일정 모델
library;
class Schedule {
final int id;
final String title;
final String date;
final String? time;
final String? endDate;
final String? endTime;
final String? description;
final String? categoryName;
final String? categoryColor;
final String? memberNames;
final String? sourceUrl;
final String? sourceName;
Schedule({
required this.id,
required this.title,
required this.date,
this.time,
this.endDate,
this.endTime,
this.description,
this.categoryName,
this.categoryColor,
this.memberNames,
this.sourceUrl,
this.sourceName,
});
factory Schedule.fromJson(Map<String, dynamic> json) {
return Schedule(
id: json['id'] as int,
title: json['title'] as String,
date: json['date'] as String,
time: json['time'] as String?,
endDate: json['end_date'] as String?,
endTime: json['end_time'] as String?,
description: json['description'] as String?,
categoryName: json['category_name'] as String?,
categoryColor: json['category_color'] as String?,
memberNames: json['member_names'] as String?,
sourceUrl: json['source_url'] as String?,
sourceName: json['source_name'] as String?,
);
}
/// 멤버 리스트 반환
List<String> get memberList {
if (memberNames == null || memberNames!.isEmpty) return [];
return memberNames!.split(',').map((n) => n.trim()).where((n) => n.isNotEmpty).toList();
}
/// 시간 포맷 (HH:mm)
String? get formattedTime {
if (time == null) return null;
return time!.length >= 5 ? time!.substring(0, 5) : time;
}
}