Обновление состояния Riverpod при горячей перезагрузке

#flutter #dart #flutter-provider #riverpod

Вопрос:

У меня есть некоторые проблемы, когда я пробую Riverpod, где мое приложение просто обновляет состояние при горячей перезагрузке плагина, который я использовал

flutter_hooks: ^0.18.0 крючки для подключения: ^0.14.0 5

Вот мой код виджета пользовательского интерфейса

 import 'package:circle_creative/provider/item_list_provider.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'model/item.dart';

void main() {
  runApp(const ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const Home(),
    );
  }
}

class Home extends HookWidget {
  const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final controller = useTextEditingController();
    return Scaffold(
      appBar: AppBar(
        title: Text("TodoList"),
      ),
      body: Column(
        children: [
          TextField(
            decoration: const InputDecoration(
              labelText: "Todo",
            ),
            controller: controller,
            onSubmitted: (value){
              context.read(itemListProvider.notifier).addItem(Item(name: value));
              // context.read(itemListProvider).addItem(Item(name: value));
              controller.clear();
            },
          ),
          Expanded(
            child: Consumer(builder: (context, watch, child) {
              final itemList = watch(itemListProvider);
              return ListView.builder(
                itemCount: itemList.length,
                itemBuilder: (context, index) {
                  final Item item =itemList[index];
                  return Dismissible(
                    key: ValueKey(item.id),
                    onDismissed: (direction){
                      context.read(itemListProvider.notifier).deleteItem(item);
                    },
                    child: CheckboxListTile(
                        value: item.isDone,
                        title: Text(item.name),
                        onChanged: (value){
                          context.read(itemListProvider.notifier).updateItem(item..isDone=value??false);
                        }),
                  );
              },);
            },),
          )
        ],
      ),
    );
  }
}
 

Вот состояние метода класса when для списка ,
я не знаю, правильно ли это, но я понял это.

 import 'package:circle_creative/model/item.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

final itemListProvider = StateNotifierProvider<ItemListNotifier, List<Item>>(
      (_) => ItemListNotifier(),
);

class ItemListNotifier extends StateNotifier<List<Item>>{
  ItemListNotifier() : super([]);
  // ItemListNotifier(List<Item> state) : super(state);
  void addItem(Item item){
    state = state..add(item);
  }

  void updateItem(Item item){
    state = [
      for (var i in state)
        if (i.id==item.id) item else i,
    ];
  }

  void deleteItem(Item item) {
    state = state..removeWhere((element) => element.id == item.id);
  }
}
 

и модель, которую я использую

 import 'dart:math';

class Item {
  int id;
  String name;
  bool isDone;

  Item({
    required this.name,
    this.isDone = false,
  }): id = Random().nextInt(1000);
}
 

When I do a hot reload, it as expected. What am I doing wrong here? anybody can help me please 🙂