#flutter #dart
#flutter #dart
Вопрос:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List items = [];
bool isLoading = false;
@override
void initState() {
// TODO: implement initState
super.initState();
this.fetchItems();
}
fetchItems() async {
setState(() {
isLoading = true;
});
var url =
'https://api.torn.com/torn/?selections=itemsamp;key=7PnSA9HkVB5B6eAK';
var response = await http.get(url);
if (response.statusCode == 200) {
var things = json.decode(response.body)['items'];
setState(() {
items = things;
isLoading = false;
});
} else {
setState(() {
items = [];
isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hej Tomek!'),
centerTitle: true,
),
body: getBody(),
);
}
}
Widget getBody() {
return ListView.builder(
itemCount: items.length, // Here is problem
itemBuilder: (context, index) {
return getCard();
});
}
Widget getCard() {
return Card(
child: Padding(
padding: EdgeInsets.all(10.0),
child: ListTile(
leading: CircleAvatar(),
title: Text(''),
subtitle: Text(''),
trailing: Text(''),
),
),
);
}
элементы, похоже, не определены, и моя Android Studio сообщила мне, что «Получатель не найден: «элементы»».
Я пытался передать элементы из Json в ListView, но могу сказать, почему мои элементы не определены.
Я пытаюсь разобраться в этом в течение последних 2 часов, и я искал ответ, но ни у кого нет подобной проблемы с моей, я думаю, что это действительно простой надзор с моей стороны.
Ответ №1:
Вы определили getBody()
вне области вашего HomePage
класса. Либо поместите его внутрь HomePage
, либо просто измените свой getBody
, чтобы соответствовать этому:
Widget getBody(List items) {
return ListView.builder(
itemCount: items.length, // Here is problem
itemBuilder: (context, index) {
return getCard();
},
);
}
build()
Тогда ваш должен быть:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Hej Tomek!'),
centerTitle: true,
),
body: getBody(items),
);
}