【发布时间】:2021-12-10 19:50:03
【问题描述】:
我使用 Flutter 1.0 开发了一个应用程序。该应用程序适用于大多数 android 和 ios 手机。但我发现有一部 android 手机和一部 iphone 无法打开该应用程序,只显示错误消息“type '_Smi' is not a subtype of type 'double'”。有没有人可以告诉我我的应用发生了什么。
打开flutter应用报错图片:
【问题讨论】:
标签: flutter
我使用 Flutter 1.0 开发了一个应用程序。该应用程序适用于大多数 android 和 ios 手机。但我发现有一部 android 手机和一部 iphone 无法打开该应用程序,只显示错误消息“type '_Smi' is not a subtype of type 'double'”。有没有人可以告诉我我的应用发生了什么。
打开flutter应用报错图片:
【问题讨论】:
标签: flutter
如果没有相关的代码,很难判断,但就我而言,这发生在尝试从 Map 分配双精度值时。解决方案是简单地调用 .toDouble 的值:
// myMap is a Map<String, dynamic>
double myDouble = myMap['mykey'].toDouble();
它过去可以在没有 .toDouble() 的情况下工作,但 _Smi 错误从一天开始发生。
【讨论】:
_Smi 代表 Small machine integers,根据Dart Cookbook
所以基本上你得到一个 int 并错误地解析它。
【讨论】:
这帮助我从另一个 api 读取 json。
double temp = weatherData['main']['temp'].toDouble();
【讨论】:
当您使用 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']))));
}
【讨论】: