Flutter 带提供程序的颤振重建对话框元素

Flutter 带提供程序的颤振重建对话框元素,flutter,dart,Flutter,Dart,我正在使用提供程序,我想重建对话框中包含的消息。对话似乎是个问题 当我冲刺这些值时​​我注意到它们已被修改,但这不适用于对话框 在我的屏幕页面的构建方法下,我有以下内容: var _loaderProvider = Provider.of<LoaderNotifier>(context, listen:false); 在打印中,我看到所有变量在2秒后更新,但在对话框中没有看到修改 TImerService: class TimerService{ static Future

我正在使用提供程序,我想重建对话框中包含的消息。对话似乎是个问题

当我冲刺这些值时​​我注意到它们已被修改,但这不适用于对话框

在我的屏幕页面的构建方法下,我有以下内容:

var _loaderProvider = Provider.of<LoaderNotifier>(context, listen:false);
在打印中,我看到所有变量在2秒后更新,但在对话框中没有看到修改

TImerService:

class TimerService{

  static Future wait(int seconds) async {
    return Future.delayed(Duration(seconds: seconds));
  }

}
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();
  }

}
装载机通知者:

class TimerService{

  static Future wait(int seconds) async {
    return Future.delayed(Duration(seconds: seconds));
  }

}
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)
           )
       );
     },
   );
  }
void myShowDialog(){
final myModel=Provider.of(上下文,listen:false);
显示对话框(
上下文:上下文,
禁止:错误,
建筑商:(){
返回ChangeNotifierProvider.value(
价值:myModel,
儿童:消费者(
生成器:(上下文、模型、子项)=>DialogComponent.loadingPopUp(描述:model.message)
)
);
},
);
}

是的,您需要通知侦听器,从而侦听提供程序中的更改。消费者小部件将监听它们并相应地更新用户界面。我对提供者是新手,但我觉得这很奇怪,因为在文档中,它似乎说使用消费者,然后使用provider.of。在这里,我必须使用2。但是,当您将Provider.of与“listen:false”一起使用时,它会禁用侦听器,以便侦听器不会侦听您的更改。如果我在我的Provide.of中删除“listen:false”,并删除DialogComponent周围的消费者小部件,它将不起作用。。。你有没有一个例子,我的代码有一个更干净的方式做?