Flutter RiverpodでSQLiteの更新を監視したい

dart

1class testHomeWidgetEditBase extends ConsumerWidget {2 3 Widget build(BuildContext context, WidgetRef ref) {4 5 // ---------------------------------------//6 // 当日日付の勤怠データを取得する7 // 更新された場合、リアルタイムで画面に反映するため8 // @Riverpodで監視する9 // ---------------------------------------//10 final attendanceData = ref.watch(testAttendanceDataNotifierProvider);11 12 13 // ---------------------------------------//14 // Widgetの編集15 // ---------------------------------------//16 // 取得した勤怠データを判定17 return attendanceData.when(18 // エラー時の処理19 error: (error, stacktrace) => Text(error.toString()),20 // 読み込み中21 loading: CircularProgressIndicator.new,22 // 取得処理終了後の処理23 data: (todayData) {24 print(todayData);25 // 当日日付の勤怠データが存在した場合26 if (todayData.isNotEmpty) {27 // インスタンス化されたDataHomeオブジェクトを取得する28 DataHome service = DataHome();29 30 // ---------------------------------------//31 // 取得した当日の勤怠データから各項目を取得する32 // ---------------------------------------//33 // 日月を取得34 date = todayData[0].date == null ? '未設定' : todayData[0].date!;35 // 勤務開始時間を取得36 startTime =37 (todayData[0].startTime == null || todayData[0].startTime == '')38 ? '未設定'39 : todayData[0].startTime!;40 // 勤務終了時間を取得41 endTime =42 (todayData[0].endTime == null || todayData[0].startTime == '')43 ? '未設定'44 : todayData[0].endTime!;45 // ---------------------------------------//46 // 画面を返却する47 // ---------------------------------------//48 return Column(children: <Widget>[49 ExpansionTile(50 title: Row(51 children: <Widget>[52 Icon(Icons.work),53 Text(' 勤怠入力'),54 ],55 ),56 initiallyExpanded: true,57 children: <Widget>[58 // ---------------------------------------//59 // 当日の勤怠表示エリア60 // ---------------------------------------//61 Container(62 padding: EdgeInsets.all(1.0),63 child: Row(64 mainAxisAlignment: MainAxisAlignment.spaceEvenly,65 children: [66 Expanded(67 flex: 1, // 割合.68 child: Container(69 alignment: Alignment.center,70 child: Text(71 '勤務開始',72 style: TextStyle(73 fontWeight: FontWeight.bold,74 color: Colors.black54,75 ),76 )),77 ),78 Expanded(79 flex: 1, // 割合.80 child: Container(81 alignment: Alignment.center,82 child: Text(startTime)),83 ),84 Expanded(85 flex: 1, // 割合.86 child: Container(87 alignment: Alignment.center,88 child: Text(89 '勤務終了',90 style: TextStyle(91 fontWeight: FontWeight.bold,92 color: Colors.black54,93 ),94 )),95 ),96 Expanded(97 flex: 1, // 割合.98 child: Container(99 alignment: Alignment.center,100 child: Text(endTime)),101 ),102 ],103 ),104 ),105 106 // ---------------------------------------//107 // 当日の勤怠入力エリア108 // ---------------------------------------//109 Container(110 padding: EdgeInsets.all(1.0),111 child: Row(112 mainAxisAlignment: MainAxisAlignment.spaceEvenly,113 children: [114 Container(115 child: Column(116 children: [117 // ---------------------------------------//118 // 出勤時間ボタンを定義119 // 設定済みの場合は、ボタン非活性120 // ---------------------------------------//121 ElevatedButton(122 onPressed:123 (startTime == '未設定') && (date != null)124 ? () async {125 final notifier = ref.read(126 testAttendanceDataNotifierProvider 127 .notifier);128 await notifier.updateStartTime(129 date!,130 moveUpTime(131 isSelectedMoveUpValue));132 }133 : null,134 child: Text('出勤'),135 style: ElevatedButton.styleFrom(136 fixedSize: Size(150, 45)),137 ),138 139 Text('繰上げ設定:' + moveUpText),140 ],141 ),142 ),143 ]),144 ),145 ],146 ),147 ]);148 } else {149 150 //ref.watch(addAttendanceDataProvider);151 152 153 return Center(154 child: Column(155 children: [156 CircularProgressIndicator(),157 Text('Loading data...'),158 ],159 ));160 }161 });162 }163}

コメントを投稿

0 コメント