【问题标题】:Flutter how to add grouped data to a listFlutter如何将分组数据添加到列表中
【发布时间】:2021-10-04 18:13:31
【问题描述】:

如何将分组的 json 数据制作成颤动的列表?我已经对jsondata进行了分组。

final data = body.data['items']; // gets json data here
final uniqueSetOfChapters =groupBy(data, (dynamic obj) => obj['chapter']); // grouping it here
    uniqueSetOfChapters.forEach((key, value) {
      print('$key : : $value');
     });

结果我得到如下分组数据

Measurement : : [
{sequenceno: 193, _id: 5dc1, chapter: Measurement, title: Measuring Length, package_description: Let us learn about ‘Measurement using Length'., age_level: [99, 6], pkg_sequence: 251},
     {sequenceno: 193, _id: 5d99, chapter: Measurement, title: Measuring Weight, package_description: Let us learn about ‘Measuring Weight’., age_level: [99, 6], pkg_sequence: 251},
     {sequenceno: 1933, _id: 5d99, chapter: Measurement, title: Measuring Capacity, package_description: This module introduces how to measure the capacity of a container., age_level: [99, 6], pkg_sequence: 251}, 
    {sequenceno: 193, _id: 5ef4, chapter: Measurement, title: Revision - Measuring Length, package_description: In this module, we will revise about measurement using length., age_level: [99, 6], pkg_sequence: 2514],
    
 Data Handling : : [
{sequenceno: 193, _id: 5e23, chapter: Data Handling, title: Bar chart, package_description: This module helps to understand how to represent data., age_level: [99, 6], pkg_sequence: 2511},
 {sequenceno: 193, _id: 5f15, chapter: Data Handling, title: Revision - Bar chart, package_description: Let us revise some activities on presenting data in the form of graphs., age_level: [99, 6], pkg_sequence: 251}
]

我怎样才能将这些分组数据放到一个列表中?我为此创建了一个模型,如下所示

class Titles{
  String? sequenceno;
  String? id;
  String? chapter;
   String? title;
  String? packageDescription;
  String? ageLevel;
  String? pkgSequence;
  String? packagescors;
  Titles({
    this.sequenceno,
    this.id,
    this.chapter,
    this.title,
    this.packageDescription,
    this.ageLevel,
    this.pkgSequence,
    this.packagescors,
  });
  factory Titles.fromMap(Map<String, dynamic> map) {
    return Titles(
      sequenceno: map['sequenceno'],
      id: map["_id"],
      chapter: map['chapter'],
      title: map['title'],
      packageDescription: map['package_description'],
      ageLevel: map['age_level'],
      pkgSequence: map['pkg_sequence'],
      // packagescors: map['packagescors'],
    );
}
Map<String, dynamic> toMap(){
      var map = <String,dynamic>{
        "sequenceno": sequenceno,
        "_id": id,
        "chapter": chapter,
        "title": title,
        "package_description": packageDescription,
        "age_level": ageLevel,
        "pkg_sequence": pkgSequence,
         "packagescors": packagescors,
      };
       return map;
      }}

如何将这些分组数据添加到列表中??

【问题讨论】:

标签: flutter dictionary dart


【解决方案1】:

您可以尝试使用 grouped_list 包:https://pub.dev/packages/grouped_list

输出样本:

代码sn-p:

     @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: Appbar(title: "Titles",),
      body: Container(
          child: GroupedListView<dynamic, String>(
            elements: measurements,
            groupBy: (element) => element.chapter,
            groupComparator: (value1, value2) => value2.compareTo(value1),
            order: GroupedListOrder.ASC,
            useStickyGroupSeparators: true,
            groupSeparatorBuilder: (String value) => Padding(
              padding: const EdgeInsets.only(left: 8.0),
              child: Text(
                value,
                textAlign: TextAlign.start,
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: Theme.of(context).primaryColor),
              ),
            ),
            itemBuilder: (c, element) {
              return Column(
                children: <Widget>[
                  ListTile(
                    title: Text(
                      element.title,
                      style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
                    ),
                    subtitle: Text(
                      element.packageDescription,
                      overflow: TextOverflow.ellipsis,
                      style: TextStyle(fontSize: 12, ),
                    ),
                    onTap: () => {},
                  ),
                ],
              );
            },
        ),
      ),
    );
  }

【讨论】:

    【解决方案2】:

    我假设您想转换地图列表:

    measurement = [{'sequenceno': '193', '_id': '5d99',... }, {'sequenceno': '1933', '_id': '5d99', ..},  {...}, {...}]
    

    进入标题列表。

    你可以做的是:

    var titleList = [for (var map in measurement) Titles.fromMap(map) ];
    

    有关信息,您不需要使用工厂构造函数。以下构造函数也应该可以工作:

    Titles.fromMap(Map<String, dynamic> map) :
      sequenceno = map['sequenceno'],
      id = map["_id"],
      chapter = map['chapter'],
      title = map['title'],
      packageDescription = map['package_description'],
      ageLevel = map['age_level'],
      pkgSequence = map['pkg_sequence'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多