import 'package:flutter/material.dart'; import 'package:flutter_habit/common/I18N.dart'; import 'package:flutter_habit/common/components/PopMenus.dart'; import 'package:flutter_habit/provider/ConfigProvider.dart'; import 'package:flutter_habit/provider/DataProvider.dart'; import 'package:flutter_habit/provider/NotificationProvider.dart'; import 'package:flutter_habit/common/utils/ConvertUtils.dart'; import 'package:provider/provider.dart'; class SignTimeSetPage extends StatefulWidget { @override _SignTimeSetPageState createState() => _SignTimeSetPageState(); } class _SignTimeSetPageState extends State { @override Widget build(BuildContext context) { ConfigProvider configProvider = Provider.of(context, listen: true); ConfigProvider configProviderUnListen = Provider.of(context, listen: false); DataProvider dataProvider = Provider.of(context, listen: false); return Scaffold( appBar: AppBar( title: Text(I18N.of("打卡时段")), ), body: Padding( padding: EdgeInsets.all(16), child: ListView( children: [ ListTile( leading: Icon(Icons.wb_sunny), title: Text(I18N.of("起床打卡")), subtitle: Text( "${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.getUpTimeStart)} - ${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.getUpTimeEnd!)}"), trailing: Icon(Icons.chevron_right), onTap: () async { await PopMenus.baseMenu( context: context, title: Text(I18N.of("起床打卡时间")), contentPadding: EdgeInsets.all(16), children: [ TextButton( child: Text(I18N.of("起始时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.getUpTimeStart)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.getUpTimeStart = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), TextButton( child: Text(I18N.of("结束时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.getUpTimeEnd!)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.getUpTimeEnd = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), ], ); }, ), ListTile( leading: Icon(Icons.free_breakfast), title: Text(I18N.of("早饭打卡")), subtitle: Text( "${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.breakfastTimeStart)} - ${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.breakfastTimeEnd!)}"), trailing: Icon(Icons.chevron_right), onTap: () async { await PopMenus.baseMenu( context: context, title: Text(I18N.of("早饭打卡时间")), contentPadding: EdgeInsets.all(16), children: [ TextButton( child: Text(I18N.of("起始时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.breakfastTimeStart)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.breakfastTimeStart = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), TextButton( child: Text(I18N.of("结束时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.breakfastTimeEnd!)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.breakfastTimeEnd = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), ], ); }, ), ListTile( leading: Icon(Icons.local_dining), title: Text(I18N.of("午饭打卡")), subtitle: Text( "${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.lunchTimeStart)} - ${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.lunchTimeEnd!)}"), trailing: Icon(Icons.chevron_right), onTap: () async { await PopMenus.baseMenu( context: context, title: Text(I18N.of("午饭打卡时间")), contentPadding: EdgeInsets.all(16), children: [ TextButton( child: Text(I18N.of("起始时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.lunchTimeStart)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.lunchTimeStart = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), TextButton( child: Text(I18N.of("结束时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.lunchTimeEnd!)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.lunchTimeEnd = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), ], ); }, ), ListTile( leading: Icon(Icons.local_hotel), title: Text(I18N.of("午休打卡")), subtitle: Text( "${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.midRestTimeStart)} - ${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.midRestTimeEnd!)}"), trailing: Icon(Icons.chevron_right), onTap: () async { await PopMenus.baseMenu( context: context, title: Text(I18N.of("午休打卡时间")), contentPadding: EdgeInsets.all(16), children: [ TextButton( child: Text(I18N.of("起始时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.midRestTimeStart)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.midRestTimeStart = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), TextButton( child: Text(I18N.of("结束时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.midRestTimeEnd!)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.midRestTimeEnd = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), ], ); }, ), ListTile( leading: Icon(Icons.restaurant), title: Text(I18N.of("晚饭打卡")), subtitle: Text( "${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.dinnerTimeStart)} - ${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.dinnerTimeEnd!)}"), trailing: Icon(Icons.chevron_right), onTap: () async { await PopMenus.baseMenu( context: context, title: Text(I18N.of("起床打卡时间")), contentPadding: EdgeInsets.all(16), children: [ TextButton( child: Text(I18N.of("起始时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.dinnerTimeStart)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.dinnerTimeStart = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), TextButton( child: Text(I18N.of("结束时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.dinnerTimeEnd!)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.dinnerTimeEnd = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), ], ); }, ), ListTile( leading: Icon(Icons.brightness_4), title: Text(I18N.of("晚安打卡")), subtitle: Text( "${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.restTimeStart)} - ${ConvertUtils.timeFormMillisecondsSinceEpoch(configProvider.restTimeEnd!)}"), trailing: Icon(Icons.chevron_right), onTap: () async { await PopMenus.baseMenu( context: context, title: Text(I18N.of("起床打卡时间")), contentPadding: EdgeInsets.all(16), children: [ TextButton( child: Text(I18N.of("起始时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.restTimeStart)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.restTimeStart = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), TextButton( child: Text(I18N.of("结束时间")), onPressed: () async { TimeOfDay? res = await showTimePicker( context: context, initialTime: TimeOfDay.fromDateTime( DateTime.fromMillisecondsSinceEpoch( configProvider.restTimeEnd!)), ); if (res != null) { Navigator.of(context).pop(); configProviderUnListen.restTimeEnd = DateTime(1, 1, 1, res.hour, res.minute) .millisecondsSinceEpoch; configProviderUnListen.store(); configProviderUnListen.refresh(); await dataProvider.loadLifeInfoData(); await dataProvider.evaluateToday(); await Provider.of(context, listen: false).refresh(); } }, ), ], ); }, ), ], ), ), ); } }