[コラム]return Scaffold / body: に設定したWidgetクラス(画面)にConsumer設定する手順

画面で、リスト表示用のウィジェットを読んでいる場合に、その部分にConsumer設定する手順

目次 index【閲覧時間3分】 click !!>>

1.修正前

(修正前)TaskListView部分をTaskScreenPage画面で呼んでいる状況:
class TaskScreenPage extends StatelessWidget {
  const TaskScreenPage({super.key});

  @override
  Widget build(BuildContext context) {
    // ManageDbProcess インスタンス作成
    final manageDbProcess = ManageDbProcess();

    return Scaffold(
      appBar: AppBar(
        title: const Text('タスクリスト'),
      ),
      body: TaskListView(manageDbProcess: manageDbProcess), // TaskListView を使用してタスクを表示

    );
  }

}

class TaskListView extends StatelessWidget {
  final ManageDbProcess manageDbProcess;

  const TaskListView({super.key, required this.manageDbProcess});

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: manageDbProcess.manageFetchAllTasks(),
      builder: (context, snapshot) {

2.修正後

(修正後)画面側で処理をprovider登録/リスト側でConsumer設定:
class TaskScreenPage extends StatelessWidget {
  const TaskScreenPage({super.key});

  @override
  Widget build(BuildContext context) {
    // ManageDbProcess インスタンス作成
    final manageDbProcess = ManageDbProcess();

    return Scaffold(
      appBar: AppBar(
        title: const Text('タスクリスト'),
      ),
      //  ManageDbProcess をプロバイダとして提供
      body: ChangeNotifierProvider(
        create: (context) => manageDbProcess,
        child: TaskListView(manageDbProcess: manageDbProcess), // TaskListView を使用してタスクを表示

    );
  }

}

class TaskListView extends StatelessWidget {
  final ManageDbProcess manageDbProcess;

  const TaskListView({super.key, required this.manageDbProcess});

  @override
  Widget build(BuildContext context) {
    return Consumer<ManageDbProcess>(
      builder: (context, manageDbProcess,child) {
        return FutureBuilder(
          future: manageDbProcess.manageFetchAllTasks(),
          builder: (context, snapshot) {

コメントを残す