【问题标题】:Why can't I use BuildContext after await in an async function?为什么我不能在异步函数中等待之后使用 BuildContext?
【发布时间】:2022-08-24 22:01:29
【问题描述】:

我今天更新了我的 Dart linter,并被告知 VSCode 中的问题选项卡中的更改。原来我在工作中做了很多不推荐的操作。

这是我在许多具有相同操作顺序的代码中的一个 sn-p:

class Body extends StatelessWidget {
  const Body({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Consumer<CheckoutScreenState>(
      builder: (context, state, _) {
        return CustomFooter(
          total: \'Php ${state.totalAmount}\',
          inAsync: state.inAsync,
          onPressed: state.isReady()
              ? () async {
                  await state.postCheckout();
                  String? storeName = await SecureStorage.instance.read(
                    key: \'storeName\',
                  );

                  if (state.orderDetails != null) {
                    Navigator.pushNamed(
                      context,
                      OrderReceipt.id,
                      arguments: {
                        \'state\': state,
                        \'storeName\': storeName,
                      },
                    );
                  } else {
                    showDialog(
                      context: context,
                      builder: (_) {
                        return CustomAlert(
                          headingText: \'Error\',
                          subText:
                              \'An error occurred while processing your order. Please try again.\',
                          onPressed: () {
                            Navigator.pop(context);
                          },
                        );
                      },
                    );
                  }
                }
              : () {},
          buttonColor: state.isReady() ? kPrimaryColor : kFieldHintTextColor,
          buttonText: \'Place Order\',
        );
      },
    );
  }
}

我只是想知道我违反了什么规则,以及更改代码对我来说是否如此重要。到目前为止,我还没有遇到任何问题,但 linter 建议不这样做。在异步间隙之后访问上下文有什么问题。

    标签: flutter dart


    【解决方案1】:

    Flutter 团队发布了一个有用的视频,显然是在我发布我的问题一个月后发布的。总而言之,小部件的相应元素具有不可预知的刷新时刻,从而导致 BuildContext 发生变化。

    https://youtu.be/bzWaMpD1LHY

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2019-05-25
      • 2023-03-13
      相关资源
      最近更新 更多