Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 读取从stateNotifier继承的类中的状态_Flutter_Dart_Riverpod - Fatal编程技术网

Flutter 读取从stateNotifier继承的类中的状态

Flutter 读取从stateNotifier继承的类中的状态,flutter,dart,riverpod,Flutter,Dart,Riverpod,我正在尝试使用Flatter_riverpod的stateNotifierProvider检索和删除TodoList。 在下面的代码中,fetchTodoList方法工作正常,但deleteTodoList方法不工作 用户界面 提供者和类 final todoNotifierProvider = StateNotifierProvider<TodoListStateNotifier, List<Todo>>((ref) { return TodoListState

我正在尝试使用Flatter_riverpod的stateNotifierProvider检索和删除TodoList。 在下面的代码中,fetchTodoList方法工作正常,但deleteTodoList方法不工作

用户界面

提供者和类

final todoNotifierProvider = StateNotifierProvider<TodoListStateNotifier, List<Todo>>((ref) {
    return TodoListStateNotifier();
});

final todoFutureProvider = FutureProvider<List<Todo>>((ref) async {
    final todo= ref.read(todoNotifierProvider.notifier);
    await todo.fetchTodoList();
    return ref.watch(todoNotifierProvider);
});


class TodoListStateNotifier extends StateNotifier<List<Todo>>{
  TodoListStateNotifier(): super([]);

  Future<void> fetchTodoList() async {
    final todoClient = TodoClient();
    state = await todoClient.fetchTodoList(); 
  }

  void deleteTodoList() {
    var list = <Todo>[];
    list = state.removeLast();
    state = list;
  }
}
我假设下面代码中定义的类型就是状态的类型,我错了吗

class TodoListStateNotifier extends StateNotifier<List<Todo>>{
类TodoListStateNotifier扩展StateNotifier{
无法读取代码中的状态吗

如果您知道更好的方法,请告诉我。

这里的
removeLast()
方法返回一个
Todo
正是列表中最后一个
Todo
,这就是错误的原因

“Todo”类型的值无法分配给“List”类型的变量

因为您确实在尝试将Todo分配给列表

 void deleteTodoList() {
    var list = <Todo>[];
    list = state.removeLast();
    state = list;
  }
备选方案:

  • 筛选并删除所需的特定todo
  • 不要将删除的值赋给变量

  • 每次重建UI时,都会调用该函数。 错误在这里:

    onPressed: context.read(todoNotifierProvider.notifier).deleteTodoList(),
    
    您可以删除
    ()
    ,也可以编写:

    onPressed: () => context.read(todoNotifierProvider.notifier).deleteTodoList(),
    

    我能够成功地完成我想做的事情。非常感谢。每次状态更改时,都会调用ref.read(couponNotifierProvider.notifier)。fetchCouponList(),因此状态会返回到原始状态,并且显示不会更改。是否可以只调用一次fetchCouponList()?
    void deleteTodoList() {
        state.removeLast();
      }
    
        state = state.where((todo) => todo.id != target.id).toList()
    
      void deleteTodoList() {
        var list = <Todo>[];
    state.removeLast();
        list=state;
        state = list;
      }
    
      void deleteTodoList() {
        state=[...state..removeLast()];
      }  
    
    onPressed: context.read(todoNotifierProvider.notifier).deleteTodoList(),
    
    onPressed: () => context.read(todoNotifierProvider.notifier).deleteTodoList(),