【问题标题】:Flutter error: type '_Smi' is not a subtype of type 'double'颤振错误:类型“_Smi”不是“双”类型的子类型
【发布时间】:2021-12-10 19:50:03
【问题描述】:

我使用 Flutter 1.0 开发了一个应用程序。该应用程序适用于大多数 android 和 ios 手机。但我发现有一部 android 手机和一部 iphone 无法打开该应用程序,只显示错误消息“type '_Smi' is not a subtype of type 'double'”。有没有人可以告诉我我的应用发生了什么。

打开flutter应用报错图片:

【问题讨论】:

    标签: flutter


    【解决方案1】:

    如果没有相关的代码,很难判断,但就我而言,这发生在尝试从 Map 分配双精度值时。解决方案是简单地调用 .toDouble 的值:

    // myMap is a Map<String, dynamic>
    double myDouble = myMap['mykey'].toDouble();
    

    它过去可以在没有 .toDouble() 的情况下工作,但 _Smi 错误从一天开始发生。

    【讨论】:

      【解决方案2】:

      _Smi 代表 Small machine integers,根据Dart Cookbook

      所以基本上你得到一个 int 并错误地解析它。

      【讨论】:

        【解决方案3】:

        这帮助我从另一个 api 读取 json。

        double temp = weatherData['main']['temp'].toDouble();
        

        【讨论】:

          【解决方案4】:

          当您使用 firestore(来自 google firebase)并且文档中的字段存储为 number(只有数字可用,因此数字用于 int、double、float 等)时 - 使确保在将文档的字段值分配给 dart 模型类中的双字段之前使用 .toDouble()

          例子:

          final collectionReference =
                  FirebaseFirestore.instance.collection("Products");
          
          final products = await collectionReference.get();
          
          List productsDocuments = products.docs
                  .map((doc) => doc.data())
                  .toList();
          
          items = Items.fromList(productsDocuments);
          
          List<Item> items;
            factory Items.fromList(docsFirebase) => Items(
                items: List<Item>.from(docsFirebase.map((docFirebase) => Item(
                    itemName: docFirebase['item_name'],
                    variantId: docFirebase['variant_id'],
                    imageUrl: docFirebase['image_url'],
                    barcode: docFirebase['barcode'],
                    defaultPrice: docFirebase['default_price'].toDouble(),
                    lowStock: docFirebase['low_stock'],
                    optimalStock: docFirebase['optimal_stock']))));
          }
          

          【讨论】:

            猜你喜欢
            • 2022-08-23
            • 2021-10-21
            • 2020-01-01
            • 2021-10-08
            • 2021-08-09
            • 2019-08-14
            • 1970-01-01
            • 2020-08-11
            • 2021-08-12
            相关资源
            最近更新 更多