Firebase 返回Firestore中的时间戳类型,并与Flatter中的DateTime.now()进行比较
**编辑---------------->Firebase 返回Firestore中的时间戳类型,并与Flatter中的DateTime.now()进行比较,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,**编辑----------------> @override Widget build(BuildContext context) { return DefaultTabController( length: dateList.length, child: Scaffold( appBar: AppBar( bottom: const PreferredSize( preferredSize: Size.zero, child
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: dateList.length,
child: Scaffold(
appBar: AppBar(
bottom: const PreferredSize(
preferredSize: Size.zero,
child: TabBar(
tabs: <Widget>[
_buildTabs(),
],
isScrollable: true,
),
),
),
body: TabBarView(
children: <Widget>[
_buildSchedule()
],
),
),
);
}
@override
Widget _buildSchedule() {
return Container(
child: Center(
child: StreamBuilder<QuerySnapshot>(
stream: Firestore.instance
.collection('schedule')
.where('time', isEqualTo: _stateDate)
.orderBy('date')
.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return const Text('Loading...');
}
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) =>
_buildScheduleItem(context, snapshot.data.documents[index]),
);
}),
),
);
}
其他信息。有可能我在这件事上完全错了。我正在努力实现下面的图像。是一个无限滚动的“日历”,显示相应日期的提要。我开始认为这不是一个选项卡视图问题,需要以其他方式完成
------------------>
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: dateList.length,
child: Scaffold(
appBar: AppBar(
bottom: const PreferredSize(
preferredSize: Size.zero,
child: TabBar(
tabs: <Widget>[
_buildTabs(),
],
isScrollable: true,
),
),
),
body: TabBarView(
children: <Widget>[
_buildSchedule()
],
),
),
);
}
@override
Widget _buildSchedule() {
return Container(
child: Center(
child: StreamBuilder<QuerySnapshot>(
stream: Firestore.instance
.collection('schedule')
.where('time', isEqualTo: _stateDate)
.orderBy('date')
.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return const Text('Loading...');
}
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) =>
_buildScheduleItem(context, snapshot.data.documents[index]),
);
}),
),
);
}
我正在创建一个应用程序,在Flutter中创建一个StreamBuilder,它依赖于比较返回Firestore数据的日期
我已经创建了一个可能的日期选项卡值数组。当用户选择该选项卡时,我需要只比较日期-无时间戳,并显示一个游戏流,其中有一个匹配的本地时间日期字段
我有多个选项卡,其中一个视图在变化,因此选项卡与小部件的比例不是1:1,但是选项卡需要通过在单击的索引处返回日期值并将其设置为stateDate来控制小部件的状态
此外,最好启动在今天日期的选项卡上选择的用户
var datesList = [];
var _stateDate = DateTime.now();
initState(){
for (int i = -14; i < 57; i++) {
DateTime date = _stateDate;
date = date.add(Duration(days: i));
datesList.add(date);
}
}
var-datesList=[];
var_stateDate=DateTime.now();
initState(){
对于(int i=-14;i<57;i++){
DateTime日期=_stateDate;
日期=日期。添加(持续时间(天:i));
datesList.add(日期);
}
}
------------------------------------------------------>
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: dateList.length,
child: Scaffold(
appBar: AppBar(
bottom: const PreferredSize(
preferredSize: Size.zero,
child: TabBar(
tabs: <Widget>[
_buildTabs(),
],
isScrollable: true,
),
),
),
body: TabBarView(
children: <Widget>[
_buildSchedule()
],
),
),
);
}
@override
Widget _buildSchedule() {
return Container(
child: Center(
child: StreamBuilder<QuerySnapshot>(
stream: Firestore.instance
.collection('schedule')
.where('time', isEqualTo: _stateDate)
.orderBy('date')
.snapshots(),
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return const Text('Loading...');
}
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) =>
_buildScheduleItem(context, snapshot.data.documents[index]),
);
}),
),
);
}
@覆盖
小部件构建(构建上下文){
返回DefaultTabController(
长度:dateList.length,
孩子:脚手架(
appBar:appBar(
底部:const PreferredSize(
preferredSize:Size.zero,
孩子:TabBar(
选项卡:[
_buildTabs(),
],
isScrollable:是的,
),
),
),
正文:选项卡视图(
儿童:[
_建筑时间表()
],
),
),
);
}
@凌驾
小部件_buildSchedule(){
返回容器(
儿童:中心(
孩子:StreamBuilder(
流:Firestore.instance
.collection(“时间表”)
.where('time',isEqualTo:_stateDate)
.orderBy('日期')
.snapshots(),
建设者:
(BuildContext上下文,异步快照){
如果(!snapshot.hasData){
返回常量文本('Loading…');
}
返回ListView.builder(
itemCount:snapshot.data.documents.length,
itemBuilder:(BuildContext上下文,int索引)=>
_buildScheduleItem(上下文、快照、数据、文档[索引]),
);
}),
),
);
}
任何帮助都会很好。也许我只是想错了。能否请您为
计划
集合中的文档提供示例数据,其中清楚地显示字段和数据类型。Date.now()
返回自unix纪元以来的整数毫秒数。如果您的time
字段不是该字段,则它将不起作用。数据类型必须匹配。My time(我的时间)字段是Firestore返回的“时间戳”,我在文档中找不到它。我相信,当我取回对象时,它确实返回了自unix纪元以来的毫秒数。我一直在搞乱这条小溪,我要让它发挥作用。现在需要连接一个选项卡视图来控制它下面的视图。我的理解是,使用制表符必须是一对一的比例,所以我可能不得不想出另一个解决方案。@DennisAlund在帖子中添加了图片。请提供计划集合中一个文档的示例数据,该文档清楚地显示字段和数据类型。Date.now()
返回自unix纪元以来的整数毫秒数。如果您的time
字段不是该字段,则它将不起作用。数据类型必须匹配。My time(我的时间)字段是Firestore返回的“时间戳”,我在文档中找不到它。我相信,当我取回对象时,它确实返回了自unix纪元以来的毫秒数。我一直在搞乱这条小溪,我要让它发挥作用。现在需要连接一个选项卡视图来控制它下面的视图。我的理解是,使用标签必须是一对一的比例,所以我可能不得不想出另一个解决方案。@DennisAlund在帖子中添加了图片。哦,这是有道理的。就在今天的时间。我要试试这个!非常感谢。您知道我如何通过上图中的水平滚动视图实现这一点吗?来自您的streambuilder调用“builder:(上下文,快照){"然后在里面用scrollDirection:Axis.horizontal调用ListView.builder,并使用snapshot.data.documents作为源。这很有意义。只需夹心当前时间。我会尝试一下!谢谢!你知道我如何用上图中的水平滚动视图实现这一点吗?来自你的streambuilder c所有“builder:(context,snapshot){”,然后在其中调用一个滚动方向为Axis.horizontal的ListView.builder,并使用snapshot.data.documents作为源
DateTime _now = DateTime.now();
DateTime _start = DateTime(_now.year, _now.month, _now.day, 0, 0);
DateTime _end = DateTime(_now.year, _now.month, _now.day, 23, 59, 59);
stream: Firestore.instance
.collection('schedule')
.where('date', isGreaterThanOrEqualTo: _start)
.where('date', isLessThanOrEqualTo: _end)
.orderBy('date')
.snapshots(),