【发布时间】:2020-12-17 00:13:08
【问题描述】:
我正在尝试使用 ExpansionPanellist 安排一些从 Firebase 流式传输的数据。 panelList 放置在 StreamBuilder 内,在 StreamBuilder 上方我有一个 SingleChildScrollView。
我可以看到带有标题的列表,但我无法让展开/折叠功能工作,所以我看不到正文。 screenshot of the list
扩展/折叠功能在 Streambuilder 之外工作,但当时我无法从 Firebase 访问数据。
任何帮助将不胜感激!如果这是这样做的错误的方式,我也将感谢任何指向实现此目标的替代方法的指针。 (在查看过去的攀登和图表时,不会有任何数据添加到服务器,因此如果有更简单/更好的方法,则可能不需要流构建器。
-克里斯蒂安
class Graphs extends StatefulWidget {
static String id = 'graphs_screen';
@override
_GraphsState createState() => _GraphsState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(tabs: [
Tab(text: 'Graphs'),
Tab(text: 'Stats'),
Tab(text: 'Climbs'),
]),
),
body: TabBarView(
children: [
//Image.asset('assets/images/line_graph.png'),
Expanded(child: NumericComboLinePointChart.withSampleData()),
Container(
child: Text(''),
),
SingleChildScrollView(
child: DataStream(),
),
],
)),
),
);
}
}
class DataStream extends StatefulWidget {
@override
_DataStreamState createState() => _DataStreamState();
}
class _DataStreamState extends State<DataStream> {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: _firestore
.collection('climbs')
.orderBy('Date', descending: true)
.snapshots(),
builder: (context, snapshot) {
List<ExpansionItem> expansionList = <ExpansionItem>[];
if (snapshot.hasData) {
final alldata = snapshot.data.docs;
for (var data in alldata) {
final dataFunction = data.data();
final grades = dataFunction['gradeScore'];
final climbDate = dataFunction['Date'];
final climbDateT = DateTime.fromMicrosecondsSinceEpoch(
climbDate.microsecondsSinceEpoch);
String climbDateString =
"${climbDateT.year.toString()}-${climbDateT.month.toString().padLeft(2, '0')}-${climbDateT.day.toString().padLeft(2, '0')} ${climbDateT.hour.toString()}-${climbDateT.minute.toString()}";
final climber = dataFunction['sender'];
final currentUSer = loggedInUser.email;
if (climber == loggedInUser.email) {
expansionList.add(ExpansionItem(
dateTimeHeader: climbDateString,
climbs: grades.toString()));
}
}
}
return ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
print('tap registered');
expansionList[index].isExpanded = !isExpanded;
});
},
children: expansionList.map((ExpansionItem item) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Container(
child: Text(item.dateTimeHeader),
);
},
body: Container(
child: Text(item.climbs),
),
isExpanded: item.isExpanded,
);
}).toList(),
);
});
}
}
class ExpansionItem {
ExpansionItem({this.isExpanded: false, this.dateTimeHeader, this.climbs});
bool isExpanded;
final String dateTimeHeader;
final String climbs;
}
【问题讨论】:
标签: firebase flutter dart expandablelistview stream-builder