Chapter 11

11. StetaNotifierでプロバイダを構築しよう(timeline編)

antman
antman
2021.12.04に更新

timeline_provider.dartを記述しよう。

import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:(アプリ名)/model/db/todo_db.dart';

class TimelineDataNotifier extends StateNotifier<List<TodoItemData>> {
  TimelineDataNotifier() : super([]);

  Future<List<TodoItemData>> read() async {
    final db = MyDatabase();
    List<TodoItemData> datas = await db.readAllTodoData();
    return datas;
  }

  void makeLimitList(DateTime now) async {
    List<TodoItemData> list = [];
    List<TodoItemData> datas = await read();
    for (TodoItemData data in datas) {
      if (data.limitDate == null) {
        continue;
      }
      if (data.limitDate!.difference(now).inDays == 0) {
        list.add(data);
      }
      list.sort((a, b) => a.limitDate!.compareTo(b.limitDate!));
      state = list;
    }
  }
}

final timelineDataProvider =
    StateNotifierProvider((ref) => TimelineDataNotifier());

timeline画面では値の操作がないのでList<TodoItemData>で状態を保持しようと思います。
このProviderでは、DBからすべてのデータを読み込み、締め切りが今日のTodoItemDataを締切の昇順で保持します。

まとめ

今回はこれで終わりです。
次の章では今まで作ったproviderをviewに反映させます。