我想從本地 Json 檔案中提取資料并使用 Print() 函式顯示到終端中,但收到一條錯誤訊息Error: Expected a value of type 'Sector?', but got one of type '_JsonMap'
專案 Dart 版本:sdk: ">=2.16.0-134.1.beta <3.0.0"
錯誤
Error: Expected a value of type 'Sector?', but got one of type '_JsonMap'
at Object.throw_ [as throw] (http://localhost:56217/dart_sdk.js:5067:11)
at Object.castError (http://localhost:56217/dart_sdk.js:5026:15)
at Object.cast [as as] (http://localhost:56217/dart_sdk.js:5351:17)
at dart.NullableType.new.as (http://localhost:56217/dart_sdk.js:6911:60)
at Function.fromJson (http://localhost:56217/packages/startupbits/model/DataModel.dart.lib.js:35:65)
at demo._DemoScreenState.new.readJson (http://localhost:56217/packages/startupbits/screen/demo.dart.lib.js:102:46)
at readJson.next (<anonymous>)
at http://localhost:56217/dart_sdk.js:40568:33
at _RootZone.runUnary (http://localhost:56217/dart_sdk.js:40438:59)
at _FutureListener.thenAwait.handleValue (http://localhost:56217/dart_sdk.js:35360:29)
at handleValueCallback (http://localhost:56217/dart_sdk.js:35928:49)
at Function._propagateToListeners (http://localhost:56217/dart_sdk.js:35966:17)
at async._AsyncCallbackEntry.new.callback (http://localhost:56217/dart_sdk.js:35695:27)
at Object._microtaskLoop (http://localhost:56217/dart_sdk.js:40705:13)
at _startMicrotaskLoop (http://localhost:56217/dart_sdk.js:40711:13)
at http://localhost:56217/dart_sdk.js:36188:9
json檔案
{
"Sector": {
"Food & Beverages": [
{
"Id": 1,
"Companies": "Nutrizoe",
}
{
"Id": 2,
"Companies": "Third Wave Coffee",
}
]
}
}
資料模型.dart 檔案
class StartupData{
Sector? sector;
StartupData({this.sector});
factory StartupData.fromJson(Map<String, dynamic> json){
return new StartupData(
sector: json['Sector']
);
}
}
class Sector{
List<FoodBeverages>? foodBeverages;
Sector({this.foodBeverages});
factory Sector.formJson(Map<String, dynamic> json){
var list = json['Food & Beverages'] as List;
List<FoodBeverages> foodList = list.map((i) => FoodBeverages.formJson(i)).toList();
return new Sector(
foodBeverages: foodList
);
}
}
class FoodBeverages{
String? id;
String? Companies;
FoodBeverages({this.id,this.Companies});
factory FoodBeverages.formJson(Map<String, dynamic> json){
return new FoodBeverages(
id: json['Id'].toString(),
Companies: json['Companies']
);
}
}
顯示.dart
我想在 print() 中列印資料的地方
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:startupbits/model/DataModel.dart';
class DemoScreen extends StatefulWidget {
const DemoScreen({Key? key}) : super(key: key);
@override
_DemoScreenState createState() => _DemoScreenState();
}
class _DemoScreenState extends State<DemoScreen> {
late StartupData data;
Future<String> loadJson() async{
return await rootBundle.loadString('assets/StartUpData.json');
}
Future readJson() async{
String jsonString = await loadJson();
final response = await json.decode(jsonString);
StartupData jsonData = new StartupData.fromJson(response);
StartupData ob = new StartupData();
print(ob.sector?.foodBeverages![0].id); //============Print Value in Terminal============//
setState(() {
data = jsonData;
});
}
@override
void initState() {
// TODO: implement initState
super.initState();
readJson();
}
@override
Widget build(BuildContext context) {
return Center(child: Text("Hello"),);
}
}
uj5u.com熱心網友回復:
您應該使用以下代碼來識別 StartupData.fromJson 中的扇區:
class StartupData{
Sector? sector;
StartupData({this.sector});
factory StartupData.fromJson(Map<String, dynamic> json){
return new StartupData(
sector: Sector.fromJson(json['Sector'] as Map<String, dynamic>),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/420292.html
標籤:
上一篇:在firestore查詢中使用where子句和引數串列
下一篇:串列的值未以正確的格式呈現
