![](/img/trans.png)
[英]Flutter error: type '_Smi' is not a subtype of type 'double' as cast
[英]Flutter error: type '_Smi' is not a subtype of type 'double'
沒有相關的代碼很難說,但在我的例子中,這發生在嘗試從 Map 分配雙精度值時。 解決方案是簡單地調用 .toDouble 的值:
// myMap is a Map<String, dynamic>
double myDouble = myMap['mykey'].toDouble();
它曾經在沒有 .toDouble() 的情況下工作,但 _Smi 錯誤一天開始發生。
我認為運行flutter clean
應該可以解決這個問題。 我總是在換手機時運行它。
_Smi 代表小機器整數,根據Dart Cookbook
所以基本上你得到一個 int 並錯誤地解析它。
這幫助我從另一個 api 讀取 json。
double temp = weatherData['main']['temp'].toDouble();
dynamic
更改,而不是double
當您使用 firestore(來自 google firebase)並且文檔中的字段存儲為number
(只有數字可用,因此數字用於 int、double、float 等)時 - 確保使用.toDouble()
在將文檔的字段值分配給 dart 中模型類中的雙字段之前。
例子:
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']))));
}
我有同樣的問題並解決了這個問題。
嘗試替換這個:
double myDouble = myMap['mykey'].toDouble();
對此:
double myDouble = double.parse(myMap['mykey'].toString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.