【问题标题】:Flutter: Execute next steps after the on before finishedFlutter:在完成之前执行后续步骤
【发布时间】:2021-05-02 18:18:07
【问题描述】:

我在我的应用程序中使用了 BLOC 架构。我的集团内部的一种方法从 listView 解析选择的地址 ID 并返回城市名称。在此之后,我希望我的 Text-Editing-Controller 拥有这个选择的值并将其显示在 texteditingfield 上:

BlocA 使用简单的 ID 并使用 Google-Places API 进行查找。 BlocA 然后返回一个新状态,并将解析的地址作为状态属性。点击 listView-item 后,运行下面的代码没有显示正确的城市。

不幸的是,Await 不起作用。

// ListView.builder code
onTap: () {
context
       .read<BlocA>()
       .add(PickAddress(id: state.searchResults[index].placeId));
FocusScope.of(context).unfocus(); //hide Keyboard
_textController.value = TextEditingValue(text: state.address.city);

【问题讨论】:

    标签: flutter dart bloc


    【解决方案1】:

    代码不够清晰 记得使用“等待”,你必须像这样在 onTap 上设置异步

    onTap: () async { ....
    

    如果你这样做了,但仍然无法正常工作,请发送整个代码

    【讨论】:

    • 这里不需要使用 async/await。 onTap 函数没有理由等待 Bloc 处理事件完成。
    【解决方案2】:

    您知道您的集团实际返回的是什么吗?使用调试器并单步调试代码以查看代码中实际发生的情况。

    在使用 Bloc 构建您的状态时,您通常不会通过调用 .state 来访问该状态。

    _textController.value = TextEditingValue(text: state.address.city); 行不是您访问状态的方式。当 Bloc 发送新状态时,小部件将根据新状态重建和渲染。

    【讨论】:

      猜你喜欢
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2021-07-23
      • 2021-11-09
      相关资源
      最近更新 更多