错误:未为类“ _MyHomePageState”定义吸气剂“ datauser”

时间:2020-10-29 02:43:20

标签: arrays flutter http listview dart

我想用我网站上的数据构建一个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'

2 个答案:

答案 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();
  }

工作演示

enter image description here

完整代码

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方法