我正在构建一个Flutter 应用程序,并且我在理解如何实现Firestore时遇到了问题.在我看过的教程中,我只看到如何创建整个集合的快照,但是在我的示例中,我的集合是Users,所以我只需要为特定用户的文档创建快照.在Firebase文档中似乎没有关于如何做到这一点的文档,在FlutterFire GitHub页面上也没有太多文档.请帮帮我!

这是我试图用StreamBuilder构建的Widget.

  @override
  Widget build(BuildContext context) {
    return new StreamBuilder(
      stream: Firestore.instance.collection('users').document(userId).snapshots(),
      builder: (context, snapshot) {
        return new ListView.builder(
          itemCount: //what do I put here?,
          itemBuilder: (context, index) => new Item(//And here?),
        );
      }
    );
  }

推荐答案

假设您想要使用文档中的name参数创建一个Text

Widget build(BuildContext context) {
  String userId = "skdjfkasjdkfja";
  return StreamBuilder(
      stream: Firestore.instance.collection('users').document(userId).snapshots(),
      builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
        if (!snapshot.hasData) {
          return Text("Loading");
        }
        var userDocument = snapshot.data;
        return Text(userDocument["name"]);
      }
  );
}

这只是一个例子.每次更改文档本身时,在文档上创建StreamBuilder都会重新构建自身.您可以try 此代码,然后转到您的控制台并更改"name"值.您的应用程序将自动反映更改.

您可以使用流中的数据构建整个树,而不是仅仅构建一个Text.

如果您只想获取文档的时刻值,可以通过解析文档引用上的Future/get()方法来实现.

var document = await Firestore.instance.collection('users').document(userId).get(),

Flutter相关问答推荐

如何在应用栏中将列置于中心

允许冻结在初始化时使用工厂

为什么要在值列表中两次放入空安全性

有没有一种正确的方法可以通过上下滑动在两个小部件(在我的情况下是应用程序栏)之间切换?

BlocBuilder仅生成一次,并在后续发出时停止重建

顶部对齐ListTile的[前导、标题、尾随]小部件

Riverpod 2.0-如何使用FutureOr和AutoDisposeSyncNotificationer处理api状态代码?

当 Dart SDK 版本范围不匹配时,为什么依赖解析器不会抛出错误?

Flutter http 请求获取 null

无法在 Flutter 项目中安装最新版本的 image_picker

splash_screen 没有被推送到登录页面

是否有可能减少代码的编写,例如:ref.read(countProvider.notifier) - 在构建方法中?

访问 AsyncSnapshot 中的嵌套属性

如何在 Flutter 中将 ScaffoldMessenger 中的 Snackbar 显示为 Widget?

Flutter 中出现错误空判断运算符用于空值

避免长单词中断

我几乎每次都将 Stateless Widget 与 BLoC 一起使用.我错了吗?

Flutter 本地通知在最新版本中不起作用

有没有办法帮助我修复类型 null 不是 Map 类型的子类型?

如何从dart 中的当前日期时间中减go 1 天?