【问题标题】:Loop json in Expansion Tile扩展磁贴中的循环 json
【发布时间】:2020-01-25 17:03:22
【问题描述】:

我在尝试在小部件中循环一个 json 对象时遇到了很大的麻烦

我从 api 调用中得到这个 json:

[
 {
  "id":21,
  "name":"John Smit",
  "date_birth":"30-09-1983",
  "cars":[
           {
            "id":406,
            "car_name":"Ford"
           }
          ]
 }
]

以及获取此数据的模型:

class Tiro {

  final int id;
  final String name;
  final String date_birth;
  final List cars;



  Tiro.fromJSON(Map<String, dynamic> jsonMap) :

    id= jsonMap['id'],
    name= jsonMap['name'],
    date_birth= jsonMap['date_birth'],
    cars= jsonMap['cars'];

}

现在,我将显示一个 ExtensionTile,其中包含类似字符串名称的文本,并在他的子项中显示一些 ListTile 生成的循环进入列表汽车:

class TiroTile extends StatelessWidget {
  final Tiro _tiro;


  TiroTile(this._tiro);

  @override

  Widget build(BuildContext context) {
    return Center(
      child: Card(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            ExpansionTile(
              title: Text(_tiro.name),
              leading: Icon(Icons.library_books,
              color: Colors.red[900],
              ),
              children: <Widget>[
                var myCars = jsonDecode(_tiro.cars);
                for (var s in myCars){
                  // here my ListTile
                }
              ],
            ),
          ],
        ),
      ),
    );
  }
}

当然它不起作用,但我不知道我怎么能意识到这一点。 谢谢你的帮助。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您需要创建一个Car 类,就像包含fromJson 构造函数的Tiro 类一样。问题是jsonMap['cars'] 返回一个List&lt;dynamic&gt;。我们需要将其转换为 List 类型,然后我们需要序列化此列表中的每个元素。因此,您需要包括以下更改 -

    var list = jsonMap['cars'] as List;
    

    在构造函数中,您将执行以下操作 -

    cars: list.map((i) => Car.fromJson(i)).toList()
    

    最后,看起来像这样 -

    factory Tiro.fromJSON(Map<String, dynamic> jsonMap){ // The way i have created the constructor is different, but it's upto you
    
        var list = jsonMap['cars'] as List;
    
        return Tiro(
          id : jsonMap['id'],
          name : jsonMap['name'],
          date_birth : jsonMap['date_birth'],
          cars: list.map((i) => Car.fromJson(i)).toList()
        );
      }
    

    同时删除您创建的myCars 变量,您不必在进行上述更改后解码 json。您可以使用_tiro.cars 直接访问该列表。

    附加 -

    现在,如果您的 Json 是一个对象列表(从您的示例中可以看出),您需要应用类似的逻辑。创建另一个类TiroList,其中有一个字段List&lt;Tiro&gt; tiros,并执行上述相同的操作来序列化每个单Tiro。

    【讨论】:

    • 你能把它标记为正确回答吗,它会对访问这个问题的人有所帮助
    猜你喜欢
    • 2011-07-16
    • 2021-01-15
    • 2022-10-24
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多