【发布时间】:2020-03-27 22:10:33
【问题描述】:
我想用 Flutter 对 Firebase 实时数据库中的数据列表进行分组。这是我的代码:
import 'package:flutter/material.dart';
import 'package:firebase_database/firebase_database.dart';
import 'dart:async';
import 'package:intl/intl.dart'; // for formatting timestamp to datetime
import 'package:collection/collection.dart'; // for collection
class PlugModel {
var key;
var data;
String hour;
String minute;
String day;
String month;
String year;
PlugModel(this.key, this.hour, this.data);
PlugModel.fromSnapshot(DataSnapshot snapshot)
: key = snapshot.key,
data = snapshot.value['data'],
hour = DateFormat.H().format(
DateTime.fromMillisecondsSinceEpoch(snapshot.value['time'])),
minute = DateFormat.m().format(
DateTime.fromMillisecondsSinceEpoch(snapshot.value['time'])),
day = DateFormat.yMd().format(
DateTime.fromMillisecondsSinceEpoch(snapshot.value['time'])),
month = DateFormat.yM().format(
DateTime.fromMillisecondsSinceEpoch(snapshot.value['time'])),
year = DateFormat.y().format(
DateTime.fromMillisecondsSinceEpoch(snapshot.value['time']));
}
class Plug extends StatefulWidget {
final String data;
final String userId;
final String id;
Plug({this.userId, this.data, this.id});
@override
_PlugState createState() => _PlugState();
}
class _PlugState extends State<Plug> {
List _plugList;
final FirebaseDatabase _database = FirebaseDatabase.instance;
StreamSubscription<Event> _onDeviceAddedSubscription;
@override
void initState() {
super.initState();
_plugList = [];
var _deviceQuery = _database
.reference()
.child(widget.userId)
.child(widget.data)
.child(widget.id);
_onDeviceAddedSubscription =
_deviceQuery.onChildAdded.listen(_onEntryAdded);
}
@override
void dispose() {
_onDeviceAddedSubscription.cancel();
super.dispose();
}
_onEntryAdded(Event event) {
setState(() {
_plugList.add(PlugModel.fromSnapshot(event.snapshot));
});
}
@override
Widget build(BuildContext context) {
...
}
}
所以,我想我的List (_plugList) 会是这样的:
_plugList = [
PlugModel('1', 2.3, '1', '11', '2019-11-11', '2019-11', '2019'),
PlugModel('2', 2.5, '2', '33', '2019-11-11', '2019-11', '2019'),
PlugModel('3', 2.4, '4', '18', '2019-11-12', '2019-11', '2019'),
PlugModel('4', 1.4, '5', '26', '2019-12-22', '2019-12', '2019'),
]
然后,如何根据日期对我的列表进行分组:
- 每日分组
{
'2019-11-11' :
{
('1', 2.3, '1', '11'),
('2', 2.5, '2', '33')
}
'2019-11-12' :
{
('3', 2.4, '4', '18')
}
}
- 每月分组(只需要当月所有数据的
Sum)
{
'2019-11' :
{
(7.2),
}
'2019-12' :
{
(2.4)
}
}
谢谢
【问题讨论】:
标签: list flutter firebase-realtime-database group-by