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(),