【发布时间】:2020-07-10 04:38:15
【问题描述】:
问题
我正在使用riverpod 和state_notifier。 StateNotifier 有的 initState() 和 update() 被调用,没有。其他成员函数都可以调用成功。但是其他成员函数可以调用成功。
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:riverpod_todo_list/todo_list_notifier.dart';
import 'package:riverpod_todo_list/todo_list_state.dart';
void main() {
print('start~~');
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends HookWidget {
// ...
}
final todoListProvider = StateNotifierProvider((_) => TodoListNotifier());
class MyHomePage extends HookWidget {
final _controller = TextEditingController();
final todoListNotifier = useProvider(todoListProvider);
final TodoListState _todoListState =
useProvider(todoListProvider.state.select((value) => value));
//...
import 'package:riverpod_todo_list/todo.dart';
import 'package:riverpod_todo_list/todo_list_state.dart';
import 'package:state_notifier/state_notifier.dart';
import 'package:uuid/uuid.dart';
class TodoListNotifier extends StateNotifier<TodoListState> with LocatorMixin {
TodoListNotifier() : super(const TodoListState());
Uuid _uuid = Uuid();
// could not run.
@override
void initState() {
super.initState();
print('init state~~~');
}
// could not run.
@override
void update(Locator watch) {
super.update(watch);
print('update');
}
// could run.
void add(String title) {
Todo todo = Todo(id: _uuid.v4(), title: title);
List<Todo> todoList = []..addAll(state.todoList);
todoList.add(todo);
state = state.copyWith(todoList: todoList);
}
// could run.
void toggleStatus(int index) {
List<Todo> todoList = []..addAll(state.todoList);
todoList[index] = state.todoList[index]
.copyWith(completed: !state.todoList[index].completed);
state = state.copyWith(todoList: todoList);
print('changed toggle~~');
}
}
重启日志 不放 initState() 和 update() 日志。
Performing hot restart...
Restarted application in 464ms.
flutter: start~~
【问题讨论】:
-
Riverpod 是全新的,还不会广泛使用。你最好在包的github上询问
-
谢谢。我会在 Github 上提问。
-
StateNotifier 内置于
Riverpod和LocatorMixin不再支持因此您可以在构造函数中初始化或在定义提供程序时进行初始化