微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 API 实现块模式会导致异常“类型'Future<dynamic>' 不是类型'Widget?' 的子类型”

如何解决使用 API 实现块模式会导致异常“类型'Future<dynamic>' 不是类型'Widget?' 的子类型”

我正在尝试实现 bloc 模式,其中我使用了一个存储库类,该类包含使用 API 进行调用的所有方法。另一方面,我正在实现 BlocBuilder 以根据 bloc 状态呈现视图,但是我收到此错误 BlocBuilder(dirty,dependencies: [_LocalizationsScope-[GlobalKey#df8d0]],state: _BlocBuilderBaseState#dba40): 'Future' 类型不是 'Widget?' 类型的子类型

我真的不确定问题来自哪里。这是代码的一些片段。

这是导致错误的块类

*.firebaseapp.com

}

这是实现 Bloc Builder 的 Statefull 小部件

  class VehiclesBloc extends Bloc<VehiclesEvent,Vehiclesstate>{
  VehiclesBloc(Vehiclesstate initialState) : super(initialState);

  @override
 Stream<Vehiclesstate> mapEventToState(VehiclesEvent event) async* {
 // Todo: implement mapEventToState
 if(event is LoadVehiclesList){
  yield* mapLoadEventToState(event);
 }
}

Stream<Vehiclesstate> mapLoadEventToState(LoadVehiclesList event) async* {
if(event is LoadVehiclesList){
  var response = await VehiclesService().getAll();
  if(response.IsSuccess){
   yield  VehiclesLoaded(response.Data);
  }else{
   yield VehiclesLoadingFailed(response.ErrorList.toString());
   }
  }else{
 yield VehiclesLoading();
 }
}

解决方法

我认为这个代码部分导致了问题:

return Center(
  child: LoadingDialog.showLoadingDialog(context,text: ""),);

可能,LoadingDialog.showLoadingDialog 不返回 Widget 而只是一个返回 Future 的函数。

对于副作用(例如,您想显示对话框),您应该使用侦听器而不是在构建方法中执行此类代码。而不是 BlocBuilder,只需使用 BlocConsumer 并添加侦听器:

BlocBuilder<VehiclesBloc,VehiclesState>(
  listener: (context,state) {
    if (state is {your loading state}) {
      LoadingDialog.showLoadingDialog(context,text: "");
    }
  },builder: ...,),

关于您的代码的更多见解:

  1. 不要在有状态小部件中创建 BLoC 作为变量,而是使用 BlocProvider 来处理 BLoC 的一部分。
  2. 在加载数据之前产生 VehiclesLoading 状态,而不仅仅是作为“其他”情况。这样您就可以在您的 UI 中轻松处理加载行为。 要解决上述问题,只需按照文档操作:https://bloclibrary.dev/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?