同一集合中的单个文档Firestore Flutter

时间:2020-03-16 12:48:05

标签: flutter dart google-cloud-firestore

我构建了一个测验应用程序,并且使用了Firestore来存储数据,为此我需要一个代码:当用户选择答案1时,他进入页面A,但是当他选择答案2时,他进入页面B……等等

我在这里:当我点击它时,所有答案都转到同一页面,我希望每个答案都有自己的页面

enter image description here

这是我的代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class question14 extends StatefulWidget {
  @override
  _question14State createState() => _question14State();
}

class _question14State extends State<question14> {
  int selectedIndex 

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: StreamBuilder(
            stream: Firestore.instance.collection('numberzz').snapshots(),
            builder: (context, snapshot) {
              if (!snapshot.hasData) return const Text('Loading ...');
              return ListView.builder(

                scrollDirection: Axis.horizontal,
                padding: EdgeInsets.fromLTRB(100.0, 0.0, 0.0, 0.0),
                itemExtent: 200.0,
                itemCount: snapshot.data.documents.length,
                itemBuilder: (BuildContext context, int index) {
                  final DocumentSnapshot document =
                      snapshot.data.documents[index];

                  return Container(
                    padding: EdgeInsets.fromLTRB(0.0, 300.0, 0.0, 450.0),
                    child: ListTile(
                      contentPadding: selectedIndex == index
                          ? EdgeInsets.all(0.0)
                          : EdgeInsets.all(25.0),
                      title: Image.network(
                        document['number'],
                      ),
                      selected: selectedIndex == index,
                      onTap: () {
                        Firestore.instance.runTransaction((transaction) async {
                          DocumentSnapshot freshSnap =
                              await transaction.get(document.reference);
                          await transaction.update(freshSnap.reference, {
                            'vote': freshSnap['vote'] + 1,
                          });
                        });
                        Navigator.push(
                                context, MaterialPageRoute(
                                builder: (context) => new page()));

                        setState(() {
                          selectedIndex = index;
                        });
                      },
                    ),
                  );
                },
              );
            }));
  }
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以在导航之前检查选择了哪个索引。一种条件导航。

switch(selectedIndex){
 case 0:
   Navigator.of(context).push(.....(Page A));
   break;
 case 1:
  .......
  break; 

我想你明白了。 但是这段代码应该在

之后
setState(() { selectedIndex = index };