记录工作中遇到的几个Dart语言的坑和bug

List.map函数没有用一个值去接收它的返回值时,这个函数甚至不会执行。

个人推测是被编译器把代码优化掉了,断点甚至不会执行map这段代码。这种写法本身就是很奇怪的(同事的骚操作),仅记录问题本身

dart 复制代码
void test() {
  int i = 0;
  List<int> list = [1, 1, 1];
  list.map((e)=> i++);
  print(i);//这里还是0
}

在Future中返回Future.error()在某些情况下因为dart类型推导错误,导致不会中断流,后续的then()函数会被错误的执行

推荐尽量指明泛型类型,做好类型约束。

  • Flutter: 3.22.0
  • Dart: 3.4.0
  • OS: macOS 15.6.1 (Apple M1 Pro)
scss 复制代码
void main() {
  test2().then((value) {
    int i = value["value"];
    print(i);
  }).catchError((e) {
    print(e);
  });
}

///正确的实例,返回Future.error后,then函数不会被执行。
Future test1() {
  return Future<int>((){
    return 1;
  }).then((value){
    if(value == 0) {
      return Future.value(value);//使用Future进行包裹,使用[async]关键字,或者使用then(int),都可以保证返回Future.error后,then函数不会被执行。
    } else {
      return Future.error("error");
    }
  }).then((value){//这里还未编译时,已经被推断为dynamic类型,所以不用强转
    int i = value;
    return i;
  });
}

///类型推导错误的实例
Future test2() {
  return Future<int>((){
    return 1;
  }).then((value){
    if(value == 0) {
      return value; //这里直接返回value,而不是使用Future进行包装
    } else {
      return Future.error("error");
    }
  }).then((value){//这里还未编译,就被推断为Object,必须强转
    //当上面返回Future.error时,这里不会被跳过,而是会执行。所以会出现类型错误:
    //type 'Future<dynamic>' is not a subtype of type 'int' in type cast
    int i = value as int;
    return i;
  });
}
相关推荐
浩辉_3 天前
Dart - 内存管理与垃圾回收(GC)深度解析
flutter·dart
浩辉_5 天前
Dart - 认识Sealed
flutter·dart
JMchen1235 天前
跨平台相机方案深度对比:CameraX vs. Flutter Camera vs. React Native
java·经验分享·数码相机·flutter·react native·kotlin·dart
雨季6666 天前
Flutter 三端应用实战:OpenHarmony “微光笔记”——在灵感消逝前,为思想点一盏灯
开发语言·javascript·flutter·ui·dart
雨季6667 天前
Flutter 三端应用实战:OpenHarmony “极简文本字符计数器”——量化表达的尺度
开发语言·flutter·ui·交互·dart
雨季6668 天前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
爱吃大芒果8 天前
Flutter for OpenHarmony 实战: mango_shop 购物车模块的状态同步与本地缓存处理
flutter·缓存·dart
雨季6668 天前
Flutter 三端应用实战:OpenHarmony 简易“动态字体大小调节器”交互模式深度解析
开发语言·flutter·ui·交互·dart
爱吃大芒果8 天前
Flutter for OpenHarmony 实战:mango_shop 项目初始化与目录架构搭建
flutter·架构·dart
爱吃大芒果8 天前
Flutter for OpenHarmony 实战: mango_shop 通用组件库的封装与跨端复用
开发语言·flutter·dart