[英]Flutter Provider - Widget not subscribing to updates
我希望我的小部件監聽提供的FormViewModel
更新,一個ChangNotifier
。 在小部件中,使用以下方法訪問和訂閱通知程序:
FormViewModel model = Provider.of<FormViewModel>(context);
FormViewModel
是使用以下方法創建的:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final appTitle = 'Nothing New';
return MultiProvider(
providers: [
Provider<FormViewModel>(
create: (_) => FormViewModel(Loading(), FirebaseService(), ImageUploadService()),
)
],
child: MaterialApp(
title: "XX",
home: Scaffold(
appBar: AppBar(
title: Text(appTitle),
),
body: MyCustomForm(),
),
),
);
}
}
FormViewModel
擴展了BaseViewModel
。 我已經驗證狀態設置正確,但下面的打印語句中沒有偵聽器:
class BaseViewModel<T> with ChangeNotifier {
T _state;
T get state => _state;
BaseViewModel(T viewState) {
setState(viewState);
}
void setState(T viewState) {
print("state change: $viewState");
_state = viewState;
print('has listeners: $hasListeners');
notifyListeners();
handleSideEffects(state);
}
@protected
void handleSideEffects(T _state) {
print("handle side effects for: $_state");
}
@protected
void handleError(Object e) {
print(e);
}
}
您使用了錯誤的提供商。
如果您的對象是ChangeNotifier
並且希望提供程序在發生更改時重建依賴項,則您應該使用ChangeNotifierProvider
。
ChangeNotifierProvider<FormViewModel>(
create: (_) => FormViewModel(Loading(), FirebaseService(), ImageUploadService()),
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.