颤振提供程序 - 未订阅更新的小部件



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

最新更新