【问题标题】:Collection per Users FireStore Flutter App按用户收集 FireStore Flutter App
【发布时间】:2018-12-25 03:27:31
【问题描述】:

我试图在我的颤振应用程序中创建一个用户集合。

应用程序有一个库存集合,其中包含文档项目,这些文档(如盘子或袋子)有 2 个字段

我创建了一个 root 用户集合,并且该集合文档使用他们的用户 ID 标识了使用的用户,每个用户 ID 一个文档(您从 FirebaseAuth 获得的那个)。

有人告诉我,我必须在 Firebase 中设置访问规则,以允许每个用户拥有自己的股票收藏。

Github https://github.com/juancarlosjr97/flutter_ims

每个用户都应该有自己的收藏

我自己的数据库看起来像这样:

另一个包含用户集合的集合如下所示:


这是我可以访问股票集合的代码

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

class StockWidget extends StatefulWidget {
  @override
  StockWidgetApp createState() => new StockWidgetApp();
}

class StockWidgetApp extends State<StockWidget> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance.collection('stock').snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) return LinearProgressIndicator();
        return _buildList(context, snapshot.data.documents);
      },
    );
  }

  Widget _buildList(BuildContext context, List<DocumentSnapshot> snapshot) {
    return ListView(
      padding: const EdgeInsets.only(top: 20.0),
      children: snapshot.map((data) => _buildListItem(context, data)).toList(),
    );
  }

  Widget _buildListItem(BuildContext context, DocumentSnapshot data) {
    final record = Record.fromSnapshot(data);

    return Padding(
      key: ValueKey(record.item),
      padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
      child: Container(
        decoration: BoxDecoration(
          border: Border.all(color: Colors.grey),
          borderRadius: BorderRadius.circular(5.0),
        ),
        child: ListTile(
          title: Text(record.item),
          trailing: Text(record.instock.toString()),
          onTap: () =>
              record.reference.updateData({'instock': record.instock + 1}),
          onLongPress: () =>
              record.reference.updateData({'instock': record.instock - 1}),
        ),
      ),
    );
  }
}

class Record {
  final String item;
  final int instock;
  final DocumentReference reference;

  @override
  String toString() => "Record<$item:$instock>";

  Record.fromMap(Map<String, dynamic> map, {this.reference})
      : assert(map['item'] != null),
        assert(map['instock'] != null),
        item = map['item'],
        instock = map['instock'];

  Record.fromSnapshot(DocumentSnapshot snapshot)
      : this.fromMap(snapshot.data, reference: snapshot.reference);
}

【问题讨论】:

  • 您想为每个带有编码的用户文档创建股票集合吗?
  • 请提供重现问题的最小代码inside您的问题本身。还要确保在您的帖子中有一个(单个)问题,因为现在我不清楚您在问什么。
  • 抱歉,是的,我正在尝试为每个用户创建一个库存集合。这个想法是每个用户都有自己的股票,而不是像已知的普通股票列表

标签: firebase dart flutter google-cloud-firestore


【解决方案1】:

将此集合用于库存:

final userId = [get the user id from auth]
final col = Firestore.instance.collection("users").document(userId).collection("stock");

//add stock
col.add(yourstock);

【讨论】:

  • 感谢您的回复!!!!如何从 auth 获取用户 ID?对不起,打扰你 ?以及语法 col.add(your stock) 是如何工作的?它创建一个股票集合?
  • 来自 firebase 身份验证。 pub.dartlang.org/packages/firebase_auth
猜你喜欢
  • 2022-01-15
  • 2021-11-25
  • 2019-12-07
  • 2019-03-14
  • 2022-10-20
  • 2021-04-04
  • 2021-03-04
  • 2021-12-03
相关资源
最近更新 更多