我试图将一个类提供程序构建为数组列表,以便从API中获取数据,但是我找不到足够的方法来获取数据。我一直在不断出错。而且我无法弄清楚如何用类值列出数组。
这是API中代码的外观(将更改实际值只是为了显示示例):
{
"listProduct": [
{
"id": 127,"title": "String","Date": "2019-10-31T10:03:35","Price": 25.0,"category": "Jeep","brand": "مرسيدس","brandmodel": "M300","kilometer": 300.0,"modelYear": "2010","fuelType": "بنزين","gearType": "اوتوماتك","image": {
"path": "Upload/UploadCarMain/UploadCarMain-200-200/car.jpeg","name": "car.jpeg"
},],}
这是我的类提供者数据,应该位于数组中(该数据具有将被放入“ listProduct”中的所有值):
class AddCar {
int id;
String name;
String city;
String country;
String currencyT;
double price;
String date;
String sponsnum;
String category;
String company;
String model;
String year;
String engine;
double distanceCovered;
String transmission;
String oilT;
String outColor;
String inColor;
String description;
File image;
PlaceLocation location;
bool isFavorite;
AddCar({
this.id,this.name,this.city,this.country,this.currencyT,this.price,this.date,this.sponsnum,this.category,this.company,this.model,this.year,this.engine,this.distanceCovered,this.transmission,this.oilT,this.outColor,this.inColor,this.description,this.image,this.location,this.isFavorite = false,});
}
这是我的获取代码(这些是我需要为显示的当前代码获取的值):
Future<void> fetchAndSetCars() async {
const url =
'My link';
final response = await http.get(url);
final extractedData = json.decode(response.body) as Map<String,dynamic>;
List<AddCar> loadedCars = [];
extractedData.forEach((carId,carData) {
loadedCars.add(AddCar(
id: int.parse(carId),name: carData['Title'],currencyT: carData['gearType'],price: carData['Price'],date: carData['Date'],model: carData['brandmodel'],year: carData['modelYear'],distanceCovered: carData['kilometer'],transmission: carData['gearType'],oilT: carData['fuelType'],image: File(carData['image']),));
});
_cars = loadedCars;
print(json.decode(response.body));
notifyListeners();
}
在这里显示我的提取代码:
class CarArea extends StatefulWidget {
@override
_CarAreaState createState() => _CarAreaState();
}
class _CarAreaState extends State<CarArea> {
var _isInit = true;
@override
void didChangeDependencies() {
if (_isInit) {
Provider.of<Cars>(context).fetchAndSetCars();
}
_isInit = false;
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
final carsData = Provider.of<Cars>(context);
final car = carsData.cars;
return car.isEmpty
? Padding(
padding: EdgeInsets.all(15.0),child: Center(
child: Text(
'no cars available',style: TextStyle(
fontFamily: ArabicFonts.Tajawal,fontWeight: FontWeight.bold,package: 'google_fonts_arabic',),)))
: car.length < 2
? ListView.builder(
physics: NeverScrollableScrollPhysics(),itemCount: car.length = 1,shrinkWrap: true,itemBuilder: (ctx,i) => CarItem(
car[i].id,car[i].image,car[i].name,car[i].model,car[i].currencyT,car[i].price,car[i].distanceCovered,car[i].transmission,car[i].oilT,car[i].year,car[i].date,)
: ListView.builder(
physics: NeverScrollableScrollPhysics(),itemCount: car.length = 2,);
}
}
还有将我的CarItem显示在用户界面上的代码:
class CarItem extends StatelessWidget {
final int id;
final File image;
final String name;
final String model;
final String currencyT;
final double price;
final double distanceCovered;
final String transmission;
final String oilT;
final String year;
final String date;
CarItem(
this.id,);
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(color: Theme.of(context).primaryColor,width: 2.0),child: Column(
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Color.fromARGB(255,245,245),child: Padding(
padding: const EdgeInsets.fromLTRB(17.0,4.0,17.0,4.0),child: Row(
textDirection: TextDirection.rtl,mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Container(
child: Row(
textDirection: TextDirection.rtl,children: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(5.0,0),child: Icon(
MyFlutterApp.cars,Text(
AppLocalizations.of(context).itemListCar,Container(
child: Row(
children: <Widget>[
Text(
date.toString(),Padding(
padding: const EdgeInsets.fromLTRB(0,5.0,child: Icon(
MyFlutterApp.history,Row(
mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[
Container(
width: MediaQuery.of(context).size.width * 0.35,height: MediaQuery.of(context).size.width * 0.35,child: GestureDetector(
child: image == null
? Container(
decoration: BoxDecoration(
color: Colors.grey[200],padding: EdgeInsets.all(6),child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Text(
'No Images provided',textAlign: TextAlign.center,)
: Image.file(
image,fit: BoxFit.fill,onTap: () {
Navigator.of(context).pushNamed(
MyCarDetails.routeName,arguments: id,);
},Container(
width: MediaQuery.of(context).size.width * 0.65,margin: EdgeInsets.all(0),padding: const EdgeInsets.fromLTRB(22.0,22.0,child: Column(
children: <Widget>[
Container(
width: double.infinity,padding: EdgeInsets.only(
bottom: 5.8,top: 0,child: Text(
name,)),Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Expanded(
child: Text(
model,Text(
currencyT + price.toStringAsFixed(1),crossAxisAlignment: CrossAxisAlignment.end,children: <Widget>[
Tab(
icon: Icon(
MyFlutterApp.km,child: Text(
distanceCovered.toStringAsFixed(0) + ' KM',Tab(
icon: Icon(
MyFlutterApp.motion_vector,child: Text(
transmission,Tab(
icon: Icon(
MyFlutterApp.fuel_type,child: Text(
oilT,Tab(
icon: Icon(
MyFlutterApp.general_model,child: Text(
year,);
}
}
这是我在堆栈跟踪中遇到的错误:
E/flutter (29729): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: FormatException: Invalid radix-10 number (at character 1)
E/flutter (29729): listProduct
E/flutter (29729): ^
E/flutter (29729):
E/flutter (29729): #0 int._throwFormatException (dart:core-patch/integers_patch.dart:131:5)
E/flutter (29729): #1 int._parseRadix (dart:core-patch/integers_patch.dart:142:16)
E/flutter (29729): #2 int._parse (dart:core-patch/integers_patch.dart:100:12)
E/flutter (29729): #3 int.parse (dart:core-patch/integers_patch.dart:63:12)
E/flutter (29729): #4 Cars.fetchAndSetCars.<anonymous closure>
package:flutter_app/providers/car_provider.dart:107
E/flutter (29729): #5 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter (29729): #6 Cars.fetchAndSetCars
package:flutter_app/providers/car_provider.dart:105
E/flutter (29729): <asynchronous suspension>
E/flutter (29729): #7 _CarAreaState.didChangeDependencies
E/flutter (29729): #8 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4086
E/flutter (29729): #9 ComponentElement.mount
package:flutter/…/widgets/framework.dart:3919
E/flutter (29729): #10 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #11 Element.updateChild
package:flutter/…/widgets/framework.dart:2904
E/flutter (29729): #12 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:3961
E/flutter (29729): #13 Element.rebuild
package:flutter/…/widgets/framework.dart:3738
E/flutter (29729): #14 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:3924
E/flutter (29729): #15 ComponentElement.mount
package:flutter/…/widgets/framework.dart:3919
E/flutter (29729): #16 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #17 Element.updateChild
E/flutter (29729): #18 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:3961
E/flutter (29729): #19 Element.rebuild
package:flutter/…/widgets/framework.dart:3738
E/flutter (29729): #20 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:3924
E/flutter (29729): #21 StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4088
E/flutter (29729): #22 ComponentElement.mount
package:flutter/…/widgets/framework.dart:3919
E/flutter (29729): #23 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #24 MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5233
E/flutter (29729): #25 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #26 Element.updateChild
package:flutter/…/widgets/framework.dart:2904
E/flutter (29729): #27 SingleChildRenderObjectElement.mount
E/flutter (29729): #28 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #29 Element.updateChild
package:flutter/…/widgets/framework.dart:2904
E/flutter (29729): #30 SingleChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:5127
E/flutter (29729): #31 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #32 Element.updateChild
package:flutter/…/widgets/framework.dart:2904
E/flutter (29729): #33 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:3961
E/flutter (29729): #34 Element.rebuild
package:flutter/…/widgets/framework.dart:3738
E/flutter (29729): #35 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:3924
E/flutter (29729): #36 ComponentElement.mount
package:flutter/…/widgets/framework.dart:3919
E/flutter (29729): #37 Element.inflateWidget
E/flutter (29729): #38 Element.updateChild
package:flutter/…/widgets/framework.dart:2904
E/flutter (29729): #39 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:3961
E/flutter (29729): #40 Element.rebuild
package:flutter/…/widgets/framework.dart:3738
E/flutter (29729): #41 ComponentElement._firstBuild
package:flutter/…/widgets/framework.dart:3924
E/flutter (29729): #42 ComponentElement.mount
package:flutter/…/widgets/framework.dart:3919
E/flutter (29729): #43 ParentDataElement.mount
package:flutter/…/widgets/framework.dart:4314
E/flutter (29729): #44 Element.inflateWidget
package:flutter/…/widgets/framework.dart:3101
E/flutter (29729): #45 Element.updateChild
package:flutter/…/widgets/framework.dart:2904
E/flutter (29729): #46 Componen
印刷品给了我这个
{listProduct: [{id: 127,Title: car -en,Date: 2019-10-31T10:03:35,Price: 25.0,category: car child 2,categoryId: 8,status: 1,brandId: 1,brand: mercedes,brandmodelId: 6,brandmodel: M300,kilometer: 300.0,modelYearId: 2,modelYear: 2010,fuelType: benz,carFeatureFuelId: 3,gearType: automatic,carFeatureGearId: 2,image: {path: Upload/UploadCarMain/UploadCarMain-200-200/carCar127.jpeg,name: carCar127.jpeg},vendorId: 2},{id: 44,Title: null,Date: 2019-10-26T09:16:23.0265211,Price: 3454.0,category: car child 1,categoryId: 7,brandId: 2,brand: BM,brandmodelId: 7,brandmodel: BM X5,kilometer: 345.0,fuelType: dezil,carFeatureFuelId: 4,gearType: normal,carFeatureGearId: 1,image: {path: Upload/UploadCarMain/UploadCarMain-200-200/1Car44.jpg,name: 1Car44.jpg},vendorId: 1},{id: 43,Date: 2019-10-25T09:40:46.4631028,
打印已加载的汽车后:
[{id: 127,brandmodel