Flutter无法读取Json矩阵的名称

时间:2019-07-05 13:39:47

标签: json flutter dart

我是新手,我无法解决问题。

我有一个数据库,可以给我这样的Json

{
    "data": [
        {
            "id": “1”,
            “color”: “Black”,
            “Status”: "1"
        },
        {
            "id": “2”,
            “color”: “Green”,
            “Status”: "1"
        },
        {
            "id": “3”,
            “color”: “Blue”,
            “Status”: “0”
        }
    ]
}

我想做的是在listview上获取数据并显示它。

问题在于未显示数据,我无法理解如何在flutter上传递矩阵名称

如果我从"data"中删除了JSON矩阵的名称,那么数据将成功显示。

但是我需要使用具有矩阵名称的JSON来获取数据。

有人知道如何帮助我理解我能做什么吗?

感谢您的帮助和时间。

Main.dart

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

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Users'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  Future<List<User>> _getUsers() async {

    var data = await http.get("http://simone.fabriziolerose.it/index.php/Hello/dispdataflutter");

    var jsonData = json.decode(data.body);

    List<User> users = [];

    for(var u in jsonData){

      User user = User(u["id"], u["testo"], u["stato"]);

      users.add(user);

    }

    print(users.length);

    return users;

  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: Container(
        child: FutureBuilder(
          future: _getUsers(),
          builder: (BuildContext context, AsyncSnapshot snapshot){
            print(snapshot.data);
            if(snapshot.data == null){
              return Container(
                  child: Center(
                      child: Text("Loading...")
                  )
              );
            } else {
              return ListView.builder(
                itemCount: snapshot.data.length,
                itemBuilder: (BuildContext context, int index) {
                  return ListTile(
                    leading: CircleAvatar(
                      backgroundImage: NetworkImage(
                          snapshot.data[index].picture
                      ),
                    ),
                    title: Text(snapshot.data[index].name),
                    subtitle: Text(snapshot.data[index].email),
                    onTap: (){

                      Navigator.push(context,
                          new MaterialPageRoute(builder: (context) => DetailPage(snapshot.data[index]))
                      );

                    },
                  );
                },
              );
            }
          },
        ),
      ),
    );
  }
}

class DetailPage extends StatelessWidget {

  final User user;

  DetailPage(this.user);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(user.name),
        )
    );
  }
}


class User {

  final String name;
  final String email;
  final String picture;

  User(this.name, this.email, this.picture);

}

1 个答案:

答案 0 :(得分:0)

您要迭代Map,必须迭代Map内的List:

    Future<List<User>> _getUsers() async {

        final data = await http.get("http://simone.fabriziolerose.it/index.php/Hello/dispdataflutter");

        final jsonData = Map.from(json.decode(data.body)); // Make sure you are getting Map, instead Linked, Hashed, Serialized data

        List<User> users = [];

        for(var u in jsonData['data']){ // That was the error

            User user = User(u["id"], u["testo"], u["stato"]);

            users.add(user);

        }

        print(users.length);

        return users;

    }

还要确保,如示例中所示,您正在使用Map方法获得Map.from类型。