我希望我的小部件侦听对提供的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);
}
}
答案 0 :(得分:1)
您使用了错误的提供程序。
如果您的对象是ChangeNotifierProvider
,则您应该使用ChangeNotifier
,并且希望提供者在发生更改时重建依赖关系。
ChangeNotifierProvider<FormViewModel>(
create: (_) => FormViewModel(Loading(), FirebaseService(), ImageUploadService()),
)