簡體   English   中英

顫振錯誤:類型“_Smi”不是“雙”類型的子類型

[英]Flutter error: type '_Smi' is not a subtype of type 'double'

我使用顫振 1.0 開發了一個應用程序。 該應用程序適用於大多數 android 和 ios 手機。 但我發現有一部 android 手機和一部 iphone 無法打開該應用程序,只顯示錯誤消息“type '_Smi' is not a subtype of type 'double'”。 有沒有人可以告訴我我的應用程序發生了什么。

打開flutter應用時的錯誤圖片:

在此處輸入圖像描述

沒有相關的代碼很難說,但在我的例子中,這發生在嘗試從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM