如何从另一个 StateNotifier
调用一个 StateNotifier
的方法?我想从 addNewHabit
(下层)调用 submitData
(上层)。
这里是类的主体:
class HabitStateNotifier extends StateNotifier<List<Habit>> {
HabitStateNotifier(state) : super(state ?? []);
void startAddNewHabit(BuildContext context) {
showModalBottomSheet(
context: context,
builder: (_) {
return NewHabit();
});
}
//this one right here
void addNewHabit(String title) {
final newHabit = Habit(title: title);
state.add(newHabit);
}
void deleteHabit(String id) {
state.removeWhere((habit) => habit.id == id);
}
}
和
class TitleControllerStateNotifier
extends StateNotifier<TextEditingController> {
TitleControllerStateNotifier(state) : super(state);
void submitData() {
if (state.text.isEmpty) {
return;
} else {
//call 'addNewHabit' from above class
}
}
}
这样做的正确方法是什么?
答案 0 :(得分:0)
设置一个 StateNotifierProvider(来自 Riverpod),它会在运行 create 回调后返回一个 StateNotifier。此回调有一个 (ref)
参数,您可以在该参数上调用 ref.read
和 ref.watch
以在非依赖或依赖模式下获取其他提供程序。
答案 1 :(得分:0)
从技术上讲,不推荐用作 StateNotifier 的模式是控制器,您不应该真正在控制器内部调用控制器。
但这很容易实现,因为您可以读取提供程序中的其他提供程序。
final habitProvider = StateNotifierProvider((ref) => HabitStateNotifier());
final userControllerProvider = StateNotifierProvider((ref) {
return UserController(
habitProvider : ref.read(habitProvider),
);
});
然后使用引用和调用
class TitleControllerStateNotifier
extends StateNotifier<TextEditingController> {
TitleControllerStateNotifier(state, HabitStateNotifier habitProvider) :
habit = habitProvider,
super(state);
final HabitStateNotifier habit;
void submitData() {
if (state.text.isEmpty) {
return;
} else {
habit.addNewHabit(state.text);
}
}
}