這個問題與這里回答的問題幾乎相同,不同之處在于我的資料是json,來自 API 呼叫。這導致了下面代碼底部顯示的錯誤。我嘗試了各種型別轉換和變數型別的組合,但都沒有成功。
import 'dart:convert';
import "package:collection/collection.dart";
void main(List<String> args) {
var data1 = [
{"title": 'Avengers', "release_date": '10/01/2019'},
{"title": 'Creed', "release_date": '10/01/2019'},
{"title": 'Jumanji', "release_date": '30/10/2019'},
];
//without these two lines, the code executes with no problems
var data2 = jsonEncode(data1);
var data3 = jsonDecode(data2);
try {
var newMap = groupBy(data3, (Map obj) => obj['release_date']);
print(newMap);
} catch (err) {
print(err);
}
**type 'List<dynamic>' is not a subtype of type 'Iterable<Map<dynamic, dynamic>>'**
[1]: https://stackoverflow.com/a/54036449/3185563
uj5u.com熱心網友回復:
的靜態和運行時型別data1是List<Map<String, String>>,這是從字面量的內容推斷出來的。
的運行時型別data3是List<dynamic>,因為這就是jsonDecode創建的內容。靜態型別只是dynamic.
您不能將 a 傳遞List<dynamic>給期望 an 的東西Iterable<Map>,這是您的groupBy期望(僅從(Map obj) => ...函式推斷,因為另一個引數具有 type dynamic),以及為什么會出現錯誤。
您可以鍵入data3為List data3 = jsonDecode(...);. 這可能會強制型別推斷猜測dynamic為 的型別引數groupBy。然后你會得到一個(Map obj) => ...不接受的錯誤dynamic,但是。
無論是否具有上述內容,您都可以通過跳過型別檢查來更改(Map obj)為(dynamic obj),這將使代碼運行。或者您可以
(dynamic obj) => (obj as Map)["release_date"]在查找之前進行轉換。
您可以鍵入data3asList然后List<Map>通過執行將其轉換為data3.cast<Map>().groupBy((Map obj) => ...)。(您也可以將其groupBy用作擴展方法,我建議您這樣做,但它僅在接收器data3, 具有非dynamic型別時才有效。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403339.html
標籤:
