Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 供应商中的颤振使用延迟_Flutter_Dart - Fatal编程技术网

Flutter 供应商中的颤振使用延迟

Flutter 供应商中的颤振使用延迟,flutter,dart,Flutter,Dart,我有一个表单,显示一个弹出窗口,里面有一条消息。 显示弹出窗口时,我执行计算,并根据计算状态更改弹出窗口中的消息 我的系统工作,但如果我想在更改消息之前应用延迟,则弹出窗口中的消息更改将不再执行。。。为什么? 呼叫我的屏幕: return MultiProvider( providers: [ ChangeNotifierProvider<FormCalculatorNotifier>( create: (BuildContext context) =&g

我有一个表单,显示一个弹出窗口,里面有一条消息。 显示弹出窗口时,我执行计算,并根据计算状态更改弹出窗口中的消息

我的系统工作,但如果我想在更改消息之前应用延迟,则弹出窗口中的消息更改将不再执行。。。为什么?

呼叫我的屏幕:

return MultiProvider(
  providers: [
    ChangeNotifierProvider<FormCalculatorNotifier>(
        create: (BuildContext context) => FormCalculatorNotifier()
    ),
    ChangeNotifierProvider<LoaderNotifier>(
        create: (BuildContext context) => LoaderNotifier()
    ),
  ],
  child: CalculatorScreen(),
);
返回多提供程序(
供应商:[
变更通知提供者(
create:(BuildContext上下文)=>FormCalculatorNotifier()
),
变更通知提供者(
create:(BuildContext上下文)=>LoaderNotifier()
),
],
子项:计算器屏幕(),
);
ma屏幕中调用弹出窗口的按钮

Expanded(
  child:  ButtonComponent.primary(
    context: context,
    text: AppTextButton.CALCUL,
    onPressed: () async {
      await _formProvider.submitForm(context);
      if(_formProvider.state == FormProviderState.isSuccess){

          // Here I load my popup
          final _loaderProvider = Provider.of<LoaderNotifier>(context, listen: false);
          showDialog(
            context: context,
            builder: (context) {
              return DialogComponent.loadingPopUp(description: _loaderProvider.message);
            },
          );

        //------------------------------------------
        // Here I simulate calculations and change state and message for the popup
        //------------------------------------------
        _loaderProvider.state = LoaderState.isLoadingJsons;
        await _loaderProvider.updateMessage();
      }
    },
  ),
),
扩展(
子项:ButtonComponent.primary(
上下文:上下文,
text:AppTextButton.CALCUL,
onPressed:()异步{
wait_formProvider.submitForm(上下文);
if(_formProvider.state==FormProviderState.isSuccess){
//在这里我加载我的弹出窗口
final _loaderProvider=Provider.of(上下文,侦听:false);
显示对话框(
上下文:上下文,
生成器:(上下文){
返回DialogComponent.loadingPopUp(说明:_loaderProvider.message);
},
);
//------------------------------------------
//在这里,我模拟计算并更改弹出窗口的状态和消息
//------------------------------------------
_loaderProvider.state=LoaderState.isLoadingJsons;
等待_loaderProvider.updateMessage();
}
},
),
),
弹出通知程序:

class LoaderNotifier with ChangeNotifier {

  LoaderState state = LoaderState.isReady;
  TimerService timerService = locator<TimerService>();
  String message = "Start...";

  LoaderNotifier();

  Future<void> updateMessage() async{
    
    //------------------------------------------
    // Here I want a delay
    // If I remove this my system works
    await timerService.wait(2);
    //------------------------------------------

    print('update message');
    if(state == LoaderState.isLoadingJsons){
      message = "Loading files...";
    }

    notifyListeners();
  }
}
class LoaderNotifier和ChangeNotifier{
LoaderState状态=LoaderState.isReady;
TimerService TimerService=locator();
字符串消息=“开始…”;
LoaderNotifier();
Future updateMessage()异步{
//------------------------------------------
//我想耽搁一下
//如果我删除这个,我的系统就会工作
等待时间服务。等待(2);
//------------------------------------------
打印(“更新消息”);
if(state==LoaderState.isLoadingJsons){
message=“正在加载文件…”;
}
notifyListeners();
}
}
这是我的等待服务:

class TimerService{

  Future<void> wait(int seconds) async {
    return Future.delayed(Duration(seconds: seconds), () => {});
  }

}
类时间服务{
未来等待(整数秒)异步{
返回Future.delayed(持续时间(秒:秒),()=>{});
}
}