ОК, я застрял на этой проблеме, используя FutureProvider.
Я уже создаю FutureProvider над моим MaterialApp, поэтому его нужно распознать, верно?
Мое дерево виджетов выглядит примерно так:
MyApp >> Home >> CardVehicle
Вот мой main.dart код, в котором я создаю объект. Provider:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final Service service = Service();
@override
Widget build(BuildContext context) {
return FutureProvider(
create: (_) => service.fetchCarYear(),
catchError: (_, error) => print(error),
child: MaterialApp(
title: 'KPM Demo',
theme: ThemeData(
primarySwatch: Colors.amber,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Home(),
),
);
}
}
мой фиктивный класс обслуживания:
class Service {
Future<CarYear> fetchCarYear() async {
CarYear carYear = CarYear();
final response = await Future.delayed(
Duration(milliseconds: 500),
() => jsonEncode({
"data": [
{"year": "2020"},
{"year": "2019"},
{"year": "2018"}
]
}),
);
carYear = CarYear.fromJson(jsonDecode(response));
return carYear;
}
}
Вот где я поставил свой Provider:
class CardVehicle extends StatelessWidget {
@override
Widget build(BuildContext context) {
CarYear carYear = Provider.of<CarYear>(context);
return Container(
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
),
child: Column(
children: <Widget>[
DropdownButton(
isExpanded: true,
icon: Icon(Icons.keyboard_arrow_down),
items: carYear.data
.map((item) => DropdownMenuItem(child: Text(item.year)))
.toList() ?? null,
onChanged: null,
),
],
),
);
}
}
Я сделал ошибка где-то? Пожалуйста, помогите!
Редактировать: вот мой класс CarYear:
class CarYear {
List<Data> data;
CarYear({this.data});
CarYear.fromJson(Map<String, dynamic> json) {
if (json['data'] != null) {
data = new List<Data>();
json['data'].forEach((v) {
data.add(new Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
String year;
Data({this.year});
Data.fromJson(Map<String, dynamic> json) {
year = json['year'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['year'] = this.year;
return data;
}
}