flutter - 颤振重建对话框元素与提供者
问题描述
我正在使用提供程序,并且我想重建对话框中包含的消息。对话似乎是个问题。
当我冲刺这些值时,我观察到它们已被修改,但这并未在对话框中应用
在构建方法下的屏幕页面中,我有这个:
var _loaderProvider = Provider.of<LoaderNotifier>(context, listen:false);
在我的屏幕页面中调用对话框的按钮:
onPressed: () async {
await _formProvider.submitForm(context);
print(_formProvider.state);
print(_loaderProvider.state);
if(_formProvider.state == FormProviderState.isSuccess){
void myShowDialog() async{
await showDialog(
context: context,
builder: (_) {
return ChangeNotifierProvider.value(
value: _loaderProvider,
child: DialogComponent.loadingPopUp(description: _loaderProvider.message));
},
);
}
myShowDialog();
// Here I change the state of the dialog
_loaderProvider.state = LoaderState.isLoadingJsons;
print(_loaderProvider.state);
await TimerService.wait(2);
// Here I change the message dialog
await _loaderProvider.updateMessage();
print(_loaderProvider.state);
print(_loaderProvider.message);
}
},
在打印中,我看到所有变量都在 2 秒后更新,但我没有在对话框中看到修改。
定时器服务:
class TimerService{
static Future wait(int seconds) async {
return Future.delayed(Duration(seconds: seconds));
}
}
loaderNotifier:
class LoaderNotifier with ChangeNotifier {
LoaderState state = LoaderState.isReady;
String _message = "Start...";
String get message => _message;
Future updateMessage() async {
print('update message');
if(state == LoaderState.isLoadingJsons){
_message = "Loading files...";
}
else if(state == LoaderState.isLoadingElements){
_message = "Loading...";
}
notifyListeners();
}
}
编辑:我发现,我改变了我的 showDialog 功能:
void myShowDialog(){
final myModel = Provider.of<LoaderNotifier>(context, listen: false);
showDialog(
context: context,
barrierDismissible: false,
builder: (_) {
return ChangeNotifierProvider.value(
value: myModel,
child: Consumer<LoaderNotifier>(
builder: (context, model, child) => DialogComponent.loadingPopUp(description: model.message)
)
);
},
);
}
解决方案
推荐阅读
- object - 整数作为 Logtalk 中的 object_identifier
- django - 尝试使用 django 中的套接字创建聊天应用程序
- java - 在 Saxon-HE 下,对 Java 方法的反身调用不可用
- node.js - 如何在 ExpressJS 中使用 axios?
- corda - 将 Postgresq 添加为 Enterprise Cordapp 中一个节点的数据库时出现问题
- c# - 在 C# [AttributeUsage(AttributeTargets.Parameter)] 中不起作用
- reactjs - this.handleChange = this.handleChange.bind(this);
- docker - 作曲家网络启动命令失败
- android - Android - 当屏幕在前台服务时,处理程序重复任务停止执行
- c# - 控制一个表单多次打开