首页 > 解决方案 > 错误:没有为类 '_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”类型的子类型

标签: arraysflutterhttplistviewdart

解决方案


您可以在第 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]);
                }));
  }
}

推荐阅读