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