【问题标题】:Can't able to store data in the list [closed]无法在列表中存储数据[关闭]
【发布时间】:2020-06-23 07:13:36
【问题描述】:

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

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);
}


我哪里做错了??

【问题讨论】:

  • 你能把你的日志贴在这里吗,你从打印声明中得到的?
  • 我使用了错误的数据类型,现在解决了

标签: json flutter flutter-layout


【解决方案1】:

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

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

【讨论】:

  • 谢谢兄弟,还有一个问题,我想根据他们的 tokenNumber 对它们进行排序,那么我该怎么做呢?
  • 返回之前只需排序users.sort((u1, u2) =&gt; u1.tokenNumber &gt; u2.tokenNumber ? 1 : -1);
  • 嘿,我想统计状态并显示在应用栏下方?
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
相关资源
最近更新 更多