Я получаю ответ, но проблема в том, что когда я нажимаю на мой API, сначала он показывает, что Getter Iterator был вызван на нуль, а затем после загрузки данных.
Это мой класс утилит.
class BlocApi with ChangeNotifier {
BlocApi.instance() {
getAllItems();
}
List<Categories> _items;
List<Categories> get getItems => _items;
setItems(List<Categories> items) async {
_items = items;
notifyListeners();
}
Future<void> getAllItems() async {
Response response = await get('api Link');
if (response.statusCode == 200) {
var data = json.decode(response.body);
var rest1 = data['Categories'] as List;
List<Categories> totalList = new List<Categories>();
for (var u in rest1) {
final items1 = Categories.fromJson(u);
totalList.add(items1);
}
setItems(totalList);
} else {}
}
}
затем, после этого, моя первая вкладка, и я вызываю свой API для разных вкладок.
class _BevaragesState extends State<Bevarages> {
List<Itemsss> _items = new List<Itemsss>();
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
final BlocApi blocApi = Provider.of<BlocApi>(context);
for (var u in blocApi.getItems) {
if (u.categoryName == 'Bevarages') {
for (var v in u.items) {
_items.add(v);
}
}
}
return Scaffold(
body: Container(
child: ListView.builder(
itemCount: blocApi.getItems == null ? 0 : _items.length,
itemBuilder: (BuildContext context, int index) {
return Container(
margin: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 25.0),
child: Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Flexible(
flex: 1,
child: Container(
margin: EdgeInsets.only(left: 5.0),
child: Image.network(
'http://dum9b973t0902.cloudfront.net/${_items[index].itemImage}',
height: 70.0,
width: 70.0,
),
),
),
Flexible(
flex: 2,
child: Container(
margin: EdgeInsets.only(left: 5.0),
child: Column(
children: <Widget>[
Container(
alignment: Alignment.centerLeft,
child: Wrap(
children: <Widget>[
Text(
_items[index].itemName,
style: TextStyle(
fontFamily: 'Arimo',
fontWeight: FontWeight.w700,
fontStyle: FontStyle.normal,
fontSize: 15.0,
),
),
],
),
),
Container(
margin: EdgeInsets.only(top: 5.0),
child: Row(
children: <Widget>[
Text(
'Price : ',
textAlign: TextAlign.left,
),
Text(
_items[index].price,
style: TextStyle(
fontFamily: 'Arimo',
fontWeight: FontWeight.w400,
fontStyle: FontStyle.normal,
fontSize: 13.0,
decoration: TextDecoration.lineThrough,
),
),
],
),
),