我希望我的小部件监听对提供的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()),
)