arrays - 错误:没有为类 '_MyHomePageState' 定义 getter 'datauser'
问题描述
我想用我网站上的数据构建一个 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的形成但是我可以通过使用这个线程的方法来修复它:类型'String'不是“index”的“int”类型的子类型
解决方案
您可以在第 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]);
}));
}
}
推荐阅读
- java - 在 Hibernate @ManyToMany 双向映射中保留非拥有侧对象不会将数据保留在连接表中
- ios - 如何以编程方式根据纵向/横向更改布局约束?
- javascript - Vue 没有在 FireFox 中运行
- ruby-on-rails - 在引导导航栏上反应颜色选择器
- json - SSIS-如何将文件夹中的多个 JSON 文件导入 Oracle?
- c++ - 在 Qt 项目中使用时 g++ std::strtod 函数中的错误?
- batch-file - 使用延迟扩展替换字符串(区分大小写) - 批量
- python - osmx 高程数据:没有名为“keys”的模块
- php - 删除句子中的单词,但不删除双引号之间的单词
- java - Kafka Streams 窗口聚合批处理