来自 json 的 Flutter ExpansionTile

Posted

技术标签:

【中文标题】来自 json 的 Flutter ExpansionTile【英文标题】:Flutter ExpansionTile from json 【发布时间】:2021-06-25 06:12:09 【问题描述】:

我有一个颤振应用程序,它在列表视图中显示来自 RESTapi 的用户列表。但是,我想在扩展磁贴中显示用户列表,以便显示有关他们的更多详细信息。下面是获取数据的方法:

  final String apiURL = 'https://jsonplaceholder.typicode.com/users';
  Future<List<Users>> fetchJSONData() async 
    var jsonResponse = await http.get(Uri.parse(apiURL));

    if (jsonResponse.statusCode == 200) 
      final jsonItems =
          json.decode(jsonResponse.body).cast<Map<String, dynamic>>();

      List<Users> usersList = jsonItems.map<Users>((json) 
        return Users.fromJson(json);
      ).toList();

      return usersList;
     else 
      throw Exception('Failed to load data from internet');
    
  

这是用于显示用户列表的代码:

@override
  Widget build(BuildContext context) 
    return Scaffold(
        appBar: AppBar(
          title: Text('Sample Customer List'),
          backgroundColor: Theme.of(context).accentColor,
        ),
        body: _buildExpanded());
  

  Widget _showListTile() 
    return FutureBuilder<List<Users>>(
      future: fetchJSONData(),
      builder: (context, snapshot) 
        if (!snapshot.hasData) 
          return Center(child: CircularProgressIndicator());
        

        return ListView(
          children: snapshot.data
              .map(
                (user) => Slidable(
                  actionPane: SlidableScrollActionPane(),
                  actions: <Widget>[
                    IconSlideAction(
                      caption: 'Archive',
                      color: Colors.blue,
                      icon: Icons.archive,
                      onTap: () => print('Archiving'),
                    ),
                    IconSlideAction(
                      caption: 'Share',
                      color: Colors.green,
                      icon: Icons.share,
                      onTap: () => print('Share'),
                    )
                  ],
                  actionExtentRatio: 1 / 5,
                  child: ListTile(
                    title: Text(user.name),
                    onTap: () 
                      print(user.name);
                    ,
                    subtitle: Text(user.phoneNumber),
                    leading: CircleAvatar(
                      backgroundColor: Colors.green,
                      child: Text(user.name[0],
                          style: TextStyle(
                            color: Colors.white,
                            fontSize: 20.0,
                          )),
                    ),
                  ),
                  secondaryActions: <Widget>[
                    IconSlideAction(
                      caption: 'More',
                      color: Colors.black45,
                      icon: Icons.more_horiz,
                      onTap: () => print('More'),
                    ),
                    IconSlideAction(
                      caption: 'Delete',
                      color: Colors.red,
                      icon: Icons.delete,
                      onTap: () => print('Delete'),
                    ),
                  ],
                ),
              )
              .toList(),
        );
      ,
    );
  

我需要做什么来实现扩展磁贴是这个应用程序吗?

【问题讨论】:

你可以用ExpansionTile替换ListTile 你能举个例子来说明一下吗 【参考方案1】:

举例

      ExpansionTile(
        title: Text(user.name),
        subtitle: Text(user.phoneNumber),
        leading: CircleAvatar(
          backgroundColor: Colors.green,
          child: Text(user.name[0],
              style: TextStyle(
                color: Colors.white,
                fontSize: 20.0,
              )),
        ),
        children: [
          Text(
            "$user.email",
            style: TextStyle(fontSize: 18),
          ),
          Text(
            "$user.address",
            style: TextStyle(fontSize: 18),
          ),
          // ...
          // other information you want to show
        ])

或者您可以推送其他页面以显示详细信息。

【讨论】:

以上是关于来自 json 的 Flutter ExpansionTile的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 应用程序创建一个扩展面板列表

根据来自 URL "[FLUTTER] " 的 JSON 值进行重定向

来自 json 的 Flutter ListTile 标题名称

来自Json的Flutter Firestore返回Null?

Flutter ExpansionPanelList - 扩展回调不起作用

Flutter 中的 JSON ObjectMapper