【问题标题】:Flutter Hive: GroupBy the list By DateFlutter Hive:GroupBy 列表按日期
【发布时间】:2020-04-01 22:47:43
【问题描述】:

我正在使用 Hive Flutter。我有一个这样的结果列表,但我想要 GroupBy 按日期列出的列表。

结果是我想要的,像这样:

2019 年 12 月 9 日,星期一

  • ggh
  • ggh
  • ggh
  • ggh

我已经研究并找到了一些包:Collection Package。我尝试使用此脚本对列表进行分组,但打印不是我想要的:

var groupData = groupBy(historyList, (obj) => historyList);
                  print(historyList);

结果

I/flutter (23894): {2019-12-09 01:08:56.328: [Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive']}
I/flutter (23894): {2019-12-09 00:57:22.455: [Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive']}
I/flutter (23894): {2019-12-09 00:57:01.274: [Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive']}
I/flutter (23894): {2019-12-09 00:56:56.992: [Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive']}
I/flutter (23894): {2019-12-09 00:56:47.549: [Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive', Instance of 'HistoryModelHive']}

这是我的模特:

WatchBoxBuilder(
          box: Hive.box("history_box"),
          builder: (ctx, boxx) {
            final historyList = boxx.values.toList().cast<HistoryModelHive>();
            historyList.sort((first, end) =>
                end.dateHistoryCreate.compareTo(first.dateHistoryCreate));
            if (historyList.isEmpty) {
              return Column(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: <Widget>[
                  Image.asset(
                    "assets/images/empty2.png",
                    fit: BoxFit.cover,
                    height: 250,
                  ),
                  Text(
                    'Your History Empty',
                    textAlign: TextAlign.center,
                    style: textTheme.display1,
                  )
                ],
              );
            } else {
              return ListView.builder(
                itemCount: boxx.length,
                itemBuilder: (BuildContext context, int i) {
                  final historyData = historyList[i];
                  var groupData = groupBy(
                      historyList, (obj) => historyData.dateHistoryCreate);
                  print(groupData);
                  return ListViewHistory(
                    id: historyData.id,
                    receiverName: historyData.receiverName,
                    amountDebt: historyData.amountDebt,
                    amountLack: historyData.amountLack,
                    amountSubstract: historyData.amountSubstract,
                    dateHistoryCreate: historyData.dateHistoryCreate,
                    imageReceiver: historyData.imageReceiver,
                    imageSignature: historyData.imageSignature,
                    nameAction: historyData.nameAction,
                  );
                },
              );
            }
          },
        )),

【问题讨论】:

    标签: flutter dart flutter-hive


    【解决方案1】:

    你可以使用包https://pub.dev/packages/grouped_listview
    您可以在下面复制粘贴运行完整代码

    代码sn-p

    List<History> historyList = [History("Monday, December 9,2019", "gghh"), History("Monday, December 11,2019", "1"), History("Monday, December 10,2019", "2"), History("Monday, December 9,2019", "gghh"),History("Monday, December 9,2019", "gghh"),History("Monday, December 10,2019", "5") ];
    
      @override
      Widget build(BuildContext context) {
        return GroupedListView<History, String>(
          collection: historyList,
          groupBy: (History g) => g.dateHistoryCreate,
          listBuilder: (BuildContext context, History g) => ListTile(title: Text(g.amountDebt.toString())),
          groupBuilder: (BuildContext context, String name) => Text(name),
        );
      }
    

    演示

    完整代码

    import 'package:flutter/material.dart';
    import 'package:grouped_listview/grouped_listview.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(        
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
    
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      int _counter = 0;
    
      void _incrementCounter() {
        setState(() {      
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {   
        return Scaffold(
          appBar: AppBar(        
            title: Text(widget.title),
          ),
          body: Center(        
            child: Column(          
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Expanded(flex: 1, child: ExampleWidget()),
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: Theme.of(context).textTheme.display1,
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ), 
        );
      }
    }
    
    class History {
      String dateHistoryCreate;
      String amountDebt;
    
      History(this.dateHistoryCreate, this.amountDebt);
    }
    
    class ExampleWidget extends StatelessWidget {
      List<History> historyList = [History("Monday, December 9,2019", "gghh"), History("Monday, December 11,2019", "1"), History("Monday, December 10,2019", "2"), History("Monday, December 9,2019", "gghh"),History("Monday, December 9,2019", "gghh"),History("Monday, December 10,2019", "5") ];
      @override
      Widget build(BuildContext context) {
        return GroupedListView<History, String>(
          collection: historyList,
          groupBy: (History g) => g.dateHistoryCreate,
          listBuilder: (BuildContext context, History g) => ListTile(title: Text(g.amountDebt.toString())),
          groupBuilder: (BuildContext context, String name) => Text(name),
        );
      }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2020-04-16
    • 2021-09-29
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多