【问题标题】:Flutter : want to excecute code in try-catch but asyncFlutter:想在try-catch中执行代码但异步
【发布时间】:2022-01-19 07:54:16
【问题描述】:

大家好,我想在 try-catch 中执行一些代码。 如果try中的所有条件都满足,那么我想换屏。 但是因为条件有await,所以在条件检查之前画面就变了。

那么有没有办法解决这个问题? 反正有没有等别人结束再做Navigator.push?

我尝试了 Future.dowhile() 但没有工作..

try {
        await savePhoneNum(_phoneNumberController.text);

        await postAppToken(
            tokenValue,
            _packageInfo.appName,
            _packageInfo.version,
            Theme.of(context).platform.toString().substring(15),
        _phoneNumberController.text);

        final PhoneAuthCredential credential = PhoneAuthProvider.credential(
        verificationId: _verificationId,
        smsCode: _smsController.text,
        );

        Navigator.push(
        context, MaterialPageRoute(builder: (context) => BottomBarScreen()));
        
    } catch (e) {
      
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('${e.toString()}')),
      );
    }

【问题讨论】:

  • 嗨,请检查PhoneAuthProvider.credential 是否是未来功能。如果是,则在其前面添加await。喜欢这个await PhoneAuthProvider.credential
  • @AloysiusSamuel 我试过了,它给了我这个消息:'await' 应用于'PhoneAuthCredential',这不是'未来'
  • 你可以进入savePhoneNumpostAppToken函数里面看看是否可以在某些字段中添加await关键字。

标签: flutter dart async-await try-catch


【解决方案1】:
final PhoneAuthCredential credential = PhoneAuthProvider.credential(
        verificationId: _verificationId,
        smsCode: _smsController.text,
        );

在函数调用后使用then语句

final PhoneAuthCredential credential = PhoneAuthProvider.credential(
        verificationId: _verificationId,
        smsCode: _smsController.text,
        )..then();

【讨论】:

    【解决方案2】:

    您可以在异步调用中使用链函数。例如await myFun1().then((result) => async callbackFunction).then((nextResult) => nextCallback) 等等。这样可以确保所有逻辑都以正确的方式执行。

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多