我想用我网站上的数据构建一个ListView。 我以Void初始化状态开始http请求(如果有更好的方法请告诉我) 而且我在Listview中请求了数组,但是Listview无法识别数组变量。
有人知道我必须如何转换此代码,以便我将数组显示为ListView吗?
Future senddata() async {
final response = await http.post(
"https://www.bumsbirne.php", body: {
"status": "0",
});
var datauser = json.decode(response.body);
print(datauser);
return datauser;
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
senddata();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Jo wenn das klappt"),
),
body: ListView.builder(
padding: const EdgeInsets.all(16.0),
itemCount: datauser == null ? 0 : datauser.length,
itemBuilder: (context, index) {
return _buildImageColumn(datauser[index]);
// return _buildRow(data[index]);
})
);
}
}
这是错误:错误:未为类'_MyHomePageState'定义getter'datauser'。
更新:
使用答案后,我遇到了以下问题:类型'String'不是'index'的'int'类型的子类型 由于我的json的格式,但是我可以使用以下线程的方法来修复它:Type 'String' is not a subtype of type 'int' of 'index'
答案 0 :(得分:1)
您可以在下面复制粘贴运行完整代码
步骤1:您可以使用Future<dynamic> senddata()
步骤2:声明dynamic datauser;
,然后在initState
中调用另一个函数来进行async await
class _MyHomePageState extends State<MyHomePage> {
dynamic datauser;
callSendData() async {
datauser = await senddata();
setState(() {});
}
@override
void initState() {
callSendData();
}
工作演示
完整代码
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
Future<dynamic> senddata() async {
/* final response = await http.post(
"https://www.bumsbirne.php", body: {
"status": "0",
});
var datauser = json.decode(response.body);*/
await Future.delayed(Duration(seconds: 3), () {});
String jsonString = '''
[
{
"url" : "abc"
},
{
"url" : "def"
}
]
''';
http.Response response = http.Response(jsonString, 200);
dynamic datauser = json.decode(response.body);
print(datauser);
return datauser;
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
dynamic datauser;
callSendData() async {
datauser = await senddata();
setState(() {});
}
@override
void initState() {
callSendData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Jo wenn das klappt"),
),
body: datauser == null
? Center(child: CircularProgressIndicator())
: ListView.builder(
padding: const EdgeInsets.all(16.0),
itemCount: datauser == null ? 0 : datauser.length,
itemBuilder: (context, index) {
return Text(datauser[index]["url"]);
// return _buildRow(data[index]);
}));
}
}
答案 1 :(得分:0)
许多解决方案之一是在_MyHomePageState此类中定义senddata方法