Files
flutter-learn/lib/meeting/meeting_model.dart
T

94 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class Meeting {
final int uniqueNo; // uniqueno (Primary Key)
final String meetingTitle; // meeting_title (會議標題)
final String? meetingPlace; // meeting_place (會議地點)
final String? meetingDesc; // meeting_desc (會議說明)
final String? bossPersonId; // boss_personid (主持人 ID)
final String? recPersonId; // rec_personid (記錄人 ID)
final DateTime? startDate; // startdate (開始日期)
final String? startTime; // starttime (開始時間, e.g., '14:00')
final DateTime? endDate; // end_date (結束日期)
final String? endTime; // end_time (結束時間, e.g., '16:00')
final String? resolution; // meeting_resolution (會議決議)
final String? meetingUsers; // meeting_users (參與者名單)
final String? flowFlag; // flowflag (狀態/流程旗標)
Meeting({
required this.uniqueNo,
required this.meetingTitle,
this.meetingPlace,
this.meetingDesc,
this.bossPersonId,
this.recPersonId,
this.startDate,
this.startTime,
this.endDate,
this.endTime,
this.resolution,
this.meetingUsers,
this.flowFlag,
});
// Factory 構造函數:從 API 返回的 JSON (Map) 創建 Meeting 物件
factory Meeting.fromJson(Map<String, dynamic> json) {
DateTime? parseDate(dynamic date) {
if (date is String && date.isNotEmpty) {
// 假設日期格式為 YYYY-MM-DD HH:mm:ss.sss 或 YYYY-MM-DD
return DateTime.tryParse(date);
}
return null;
}
return Meeting(
uniqueNo: json['uniqueno'] as int? ?? 0,
meetingTitle: json['meeting_title'] as String? ?? '無標題會議',
meetingPlace: json['meeting_place'] as String?,
meetingDesc: json['meeting_desc'] as String?,
bossPersonId: json['boss_personid'] as String?,
recPersonId: json['rec_personid'] as String?,
startDate: parseDate(json['startdate']),
startTime: json['starttime'] as String?,
endDate: parseDate(json['end_date']),
endTime: json['end_time'] as String?,
resolution: json['meeting_resolution'] as String?,
meetingUsers: json['meeting_users'] as String?,
flowFlag: json['flowflag'] as String?,
);
}
// Helper: 格式化開始日期和時間
String get formattedStartDateTime {
if (startDate == null) return 'N/A';
final datePart = DateFormat('MM/dd').format(startDate!);
final timePart = startTime ?? '';
return '$datePart ${timePart.isNotEmpty ? timePart : ''}'.trim();
}
// Helper: 獲取會議狀態顏色
Color get statusColor {
// 假設 '1' 表示已定案/已批准, '0' 表示審核中, 其他表示草稿/待開始
switch (flowFlag) {
case '1':
return Colors.green; // 已定案
case '0':
return Colors.orange; // 審核中
default:
return Colors.blue; // 待開始
}
}
// Helper: 獲取會議狀態文字
String get statusText {
switch (flowFlag) {
case '1':
return '已定案';
case '0':
return '審核中';
default:
return '待開始';
}
}
}