![](/img/trans.png)
[英]Flutter/Riverpod: Call method within StateNotifier from another StateNotifier
[英]Flutter Riverpod: StateNotifier not rerendering widget
我有一個簡單的 StateNotifier class ,如下所示:
class MyClass extends StateNotifier<Map<String, dynamic>> {
Map<String, dynamic> data;
MyClass({this.data}) : super(null) {
data = data ?? {};
}
setData(Map<String, dynamic> newData) {
data = {...data, ...newData};
}
}
我在 providers.dart 文件中定義了我的提供程序:
final myClassProvider = StateNotifierProvider((ref) => _myClass);
...我正在導入並嘗試在我的小部件的內部“讀取”並在 MyClass 的build
更改時更新小部件:
MyClass _myClass = ref.watch(myClassProvider.notifier);
我有幾個按鈕調用setData
方法,我可以看到它獲取的是新數據,但我的小部件永遠不會重新呈現。 如果我導航回一個屏幕,然后再次前進到同一個視圖,我可以看到它已使用新數據進行了更新,但我的小部件永遠不會在它發生時重新呈現。 我在這里做一些根本錯誤的事情嗎?
StateNotifier
有自己的state
。
class MyClass extends StateNotifier<Map<String, dynamic>> {
MyClass(Map<String, dynamic> data) : super(data);
setData(Map<String, dynamic> newData) {
state = {...state, ...newData};
}
}
我們可以使用 Riverpod 從 Map 獲取數據,如下所示:-
final dataValue = ref.watch(counterProvider);
String name = dataValue['name'].toString();
String email = dataValue['email'].toString();
String address = dataValue['address'].toString();
並在不同的文本上設置這些值。
我們應該像這樣傳遞和設置 Map<String,dynamic> 中的值:-
final counterProvider =
StateNotifierProvider<Counter, Map<String, dynamic>>((_) => Counter());
class Counter extends StateNotifier<Map<String, dynamic>> {
// Counter(Map<String, dynamic> data): super(data);
Counter() : super({});
void displayFile(String name, String email, String address) {
Map<String, dynamic> cartMap = {"name": name, "email": email, "address": address};
state = {...state, ...cartMap};
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.