我正在嘗試決議一個 JSON 資料,該資料進行 API 呼叫,這是一系列包裝在串列中的物件。
[
{
"userId": 1,
"id": 1,
"title": "quidem molestiae enim"
},
{
"userId": 1,
"id": 2,
"title": "sunt qui excepturi placeat culpa"
},
{
"userId": 1,
"id": 3,
"title": "omnis laborum odio"
},
{
"userId": 1,
"id": 4,
"title": "non esse culpa molestiae omnis sed optio"
},
{
"userId": 1,
"id": 5,
"title": "eaque aut omnis a"
},
{
"userId": 1,
"id": 6,
"title": "natus impedit quibusdam illo est"
},
{
"userId": 1,
"id": 7,
"title": "quibusdam autem aliquid et et quia"
},
]
這是我希望在其上呈現資料的小部件。我還想知道我是否在我評論的行中正確呼叫了來自 json 回應的資料:
import 'package:flutter/material.dart';
import '../widget/list.dart';
import '../model/data.dart';
import 'package:provider/provider.dart';
class MainScreen extends StatefulWidget {
@override
MainScreenState createState() => MainScreenState();
}
class MainScreenState extends State<MainScreen> {
@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
Provider.of<DataModel>(context, listen: false).fetchData();
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
final provider = Provider.of<DataModel>(context).listData;
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text("Profile App 2"),
),
body: Padding(
padding: const EdgeInsets.all(5.0),
child: ListView.builder(
itemBuilder: (builder, index) => ListWidget(
provider[index].userId, //to fetch the userId
provider[index].id, //to fetch the id
provider[index].title //to fetch the title
),
itemCount: provider.length
),
),
);
}
}
現在,在 DataModel 類中注釋 32:19 和 33:14 的行中拋出錯誤:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class Data {
final int userId;
final int id;
final String title;
Data({
required this.userId,
required this.id,
required this.title
});
}
class DataModel with ChangeNotifier {
List<Data> _list = [];
List<Data> get listData {
return [..._list];
}
Future<void> fetchData() async {
final url = Uri.parse('https://jsonplaceholder.typicode.com/albums');
final response = await http.get(url);
final extractedData = json.decode(response.body);
print(extractedData);
Map<String, Data> map = {};
extractedData.forEach((value) => map.putIfAbsent( //32:19
value['id'], () => Data( //33:14
userId: value['userId'],
id: value['id'],
title: value['title']
)
)
);
_list = map as List<Data>;
notifyListeners();
}
}
錯誤:
E/flutter ( 9589): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'int' is not a subtype of type 'String'
E/flutter ( 9589): #0 DataModel.fetchData.<anonymous closure> (package:profile_api_2/model/data.dart:33:14)
E/flutter ( 9589): #1 List.forEach (dart:core-patch/growable_array.dart:403:8)
E/flutter ( 9589): #2 DataModel.fetchData (package:profile_api_2/model/data.dart:32:19)
E/flutter ( 9589): <asynchronous suspension>
uj5u.com熱心網友回復:
改成這樣:
final provider = Provider.of<DataModel>(context, listen: true);
.
.
.
.
//inside your listview builder, do this:
provider.listData[index].userId, //to fetch the userId
itemCount: provider.listData.length
uj5u.com熱心網友回復:
嘗試_list = map.values.toList(); 而不是_list = map as List<Data>現在,您必須使用provider[index].userId代替provider.values.toList()[index].userId.
uj5u.com熱心網友回復:
請更改您id或課程userId領域的資料型別Data。出于某種原因,它無法決議其中一個id或userIdasint或兩者。請通過將資料型別String一一更改來檢查。希望它會起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/351829.html
