Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何访问一个特定文档(在firestore中)以在颤振列表互动程序中执行ontap操作后显示_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase 如何访问一个特定文档(在firestore中)以在颤振列表互动程序中执行ontap操作后显示

Firebase 如何访问一个特定文档(在firestore中)以在颤振列表互动程序中执行ontap操作后显示,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个firestore集合(国家),我只需要在按下互动程序后显示其中的一个文档,但无论我在ontap函数中写什么,都会给我带来各种错误。我该怎么办? 这是我的密码 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:cloud_firestore/cloud_firestor

我有一个firestore集合(国家),我只需要在按下互动程序后显示其中的一个文档,但无论我在ontap函数中写什么,都会给我带来各种错误。我该怎么办? 这是我的密码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:vola1/pageShow.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:async/async.dart';

class test extends StatelessWidget {
  const test({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: FirebaseFirestore.instance
            .collection('countries')
            // .doc('nW9L4LGpn2MZVyiTyUII')
            .snapshots(),
        builder: (context, AsyncSnapshot<QuerySnapshot> querySnapshot) {
          if (querySnapshot.hasError) return Text('has some error');
          if (querySnapshot.connectionState == ConnectionState.waiting) {
            return CircularProgressIndicator();
          } else {
            // if (!snapshot.hasData) return Text('Loading data.. please wait..');
            final list = querySnapshot.data.docs;
            return ListView.builder(
              itemBuilder: (context, index) {
                return Container(
                  child: ListTile(
                    title: Text(list[index]['name']),
                    subtitle: Text(list[index]['description']),
                    contentPadding: EdgeInsets.all(20),
                    leading: Image.network(
                      list[index]['image'],
                      height: 200,
                      width: 80,
                    ),
                    onTap: () => {
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => pageShow(list[index]),
                        ),
                      ),
                    },
                  ),
                  color: Colors.orangeAccent,
                );
              },
              itemCount: list.length,
            );
          }
        },
      ),
      appBar: AppBar(
        centerTitle: true,
        backgroundColor: Color.fromRGBO(255, 111, 82, 0.8),
      ),
    );
  }
}

import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“package:flatter/widgets.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:vola1/pageShow.dart”;
导入“包:firebase_core/firebase_core.dart”;
导入“包:async/async.dart”;
类测试扩展了无状态小部件{
常量测试({Key}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:StreamBuilder(
流:FirebaseFirestore.instance
.收款(“国家”)
//.doc('nW9L4LGpn2MZVyiTyUII')
.snapshots(),
生成器:(上下文,异步快照查询快照){
if(querySnapshot.hasError)返回文本('hassomerror');
if(querySnapshot.connectionState==connectionState.waiting){
返回循环ProgressIndicator();
}否则{
//如果(!snapshot.hasData)返回文本('正在加载数据..请稍候..');
最终列表=querySnapshot.data.docs;
返回ListView.builder(
itemBuilder:(上下文,索引){
返回容器(
孩子:ListTile(
标题:文本(列表[索引][“名称]),
字幕:文本(列表[索引][说明]),
内容填充:边缘集。全部(20),
领先:Image.net(
列表[索引]['image'],
身高:200,
宽度:80,
),
onTap:()=>{
导航器。推(
上下文
材料路线(
生成器:(上下文)=>pageShow(列表[索引]),
),
),
},
),
颜色:Colors.orangeacent,
);
},
itemCount:list.length,
);
}
},
),
appBar:appBar(
标题:对,
背景颜色:颜色。来自RGBO(255、111、82、0.8),
),
);
}
}

这是我导航到的页面的代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:async/async.dart';

class pageShow extends StatelessWidget {
  const pageShow(list(index), {Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: FirebaseFirestore.instance.collection('countries').get(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) return Text('Loading data.. please wait..');
          return Column(
            children: <Widget>[
              Text(
                snapshot.data['name'],
                style: TextStyle(fontSize: 20),
              ),
              Text(
                snapshot.data['description'],
                style: TextStyle(fontSize: 20),
              ),
              Text(
                snapshot.data['cuisine'],
                style: TextStyle(fontSize: 20),
              ),
              Text(
                snapshot.data['tradition'],
                style: TextStyle(fontSize: 20),
              )
            ],
          );
        },
      ),
      appBar: AppBar(
        centerTitle: true,
        backgroundColor: Color.fromRGBO(255, 111, 82, 0.8),
      ),
    );
  }
}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“package:flatter/widgets.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:firebase_core/firebase_core.dart”;
导入“包:async/async.dart”;
类pageShow扩展了无状态小部件{
constpageshow(list(index),{Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:StreamBuilder(
流:FirebaseFirestore.instance.collection('countries').get(),
生成器:(上下文,快照){
如果(!snapshot.hasData)返回文本('正在加载数据..请稍候..');
返回列(
儿童:[
正文(
snapshot.data['name'],
样式:TextStyle(字体大小:20),
),
正文(
snapshot.data['description'],
样式:TextStyle(字体大小:20),
),
正文(
snapshot.data['courine'],
样式:TextStyle(字体大小:20),
),
正文(
snapshot.data['tradition'],
样式:TextStyle(字体大小:20),
)
],
);
},
),
appBar:appBar(
标题:对,
背景颜色:颜色。来自RGBO(255、111、82、0.8),
),
);
}
}

按下互动程序后,我希望它显示firestore中特定文档的所有内容。这将非常简洁。

您好,在获取单个文档时,您不需要使用.snapshots()。您可以尝试下面的代码。此外,我建议将文档ID保留为小写的国家名称,以便您可以使用下面的查询

FirebaseFirestore.instance
    .collection('countries')
    .doc("countryName")
    .get()
    .then((DocumentSnapshot documentSnapshot) {
      if (documentSnapshot.exists) {
        print('Document data: ${documentSnapshot.data()}');
        //Set the relevant data to variables as needed
      } else {
        print('Document does not exist on the database');
      }
    });
这是另一个样品

但是,如果不希望国家名称作为文档ID,则必须将国家名称作为字段存储在文档中(由于查询区分大小写,因此首选小写)。然后您可以提出如下请求:

FirebaseFirestore.instance
  .collection('countries')
  .where('countryName', isEqualTo: "theCountryNameUserClickedOn")
  .get()

确保在Firestore中的文档中添加countryName字段。

实际上,我想在用户点击互动程序后显示文档的所有内容现在只有两个文档,但我将在其中添加更多,我只是不知道如何显示与特定国家/地区ontap相关的数据。是否创建一个新页面,然后在ontap中将导航器推送到该页面?但它展示了所有文件的每一个细节,我不希望发生这种情况。你能帮个忙吗?@KalyaniMalokar我不明白。你能分享一个样本输出吗?我的意思是,您正在尝试根据文档中某个字段的值获取文档。但是只有一个匹配的文档?正如你在应用程序界面图片中看到的,我有两个国家,这些国家的数据存储在firestore的一个集合中的两个不同文档中,现在的问题是,当我点击包含国家图片和描述的互动程序时,我希望它打开一个新页面,显示该国家特定文档中的数据@Dharmaraj@KalyaniMalokar你能分享完整文档的截图吗?您需要一个包含国家名称的字段。@KalyaniMalokar我已经更新了答案。如果有帮助,请告诉我。