无法将数据存储在列表中 [英] Can't able to store data in the list

查看:77
本文介绍了无法将数据存储在列表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从代码中的链接中检索数据,但是在运行应用程序时无法将其存储到列表中.仅在阻止时显示... 我想将JSON数据存储到用户列表中. 当我将print语句放在for循环下面时,它仅显示单个数据,而不是整个数据.

I am retrieving data from the link in the code but I am not able to store it into a list and while running the app It shows only if block ... I want to store JSON data into the users list. When I put the print statement below for loop it shows only single data instead of whole once.

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() => runApp(Myapp());

class Myapp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

Future<List<userData>>_getUserData() async{
  final response =await http.get("https://dev.uneva.in/task_721/list.php");
  var jsonData = json.decode(response.body);
  List<userData> users = [];
  for (var i in jsonData){
    userData user = userData(i["other"]["pid"], i["name"], i["description"],i["status"] ,i["tokenName"],i["updatedAt"] ,i["tokenNumber"]);
    users.add(user);
  }
  print(users.length);
  return users;
}


class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("ECHO-ALL"),
      ),
      body: Container(
        child: FutureBuilder(
          future: _getUserData(),
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            if (snapshot.data == null) {
              return Container(
                child: Center(
                  child: Text("Waiting for data...."),
                ),
              );
            } else {
              return ListView.builder(
                  itemCount: snapshot.data.length,
                  itemBuilder: (BuildContext context, int index) {
                    return ListTile(
                      title: Text(snapshot.data[index].name),
                    );
                  });
            }
          },
        ),
      ),
    );
  }
}
class userData {
  final String pid;
  final String name;
  final String description;
  final String status;
  final String tokenName;
  final String updatedAt;
  final String tokenNumber;

  userData(this.pid, this.name, this.description, this.status, this.tokenName,
      this.updatedAt, this.tokenNumber);
}


我在哪里做错了?

推荐答案

如果查看jsonData,您可能会注意到某些字段不是String而是int 你的模型课应该是这样的

if you look into jsonData you could notice some fields NOT a Strings but int you model class should be like this

class userData {
  final int pid;
  final String name;
  final String description;
  final int status;
  final String tokenName;
  final String updatedAt;
  final int tokenNumber;

  userData(this.pid, this.name, this.description, this.status, this.tokenName, this.updatedAt, this.tokenNumber);
}

如果按约定重命名此类-UserData

also will be much better if you rename this class by convention - UserData

这篇关于无法将数据存储在列表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆