按用户收集FireStore Flutter应用

时间:2018-12-25 03:27:31

标签: firebase dart flutter google-cloud-firestore

我正在尝试在我的flutter应用程序中创建一个用户集合。

该应用程序具有一个库存集合,其中包含作为文件的项目,而这些文件(如盘子或袋子)具有2个字段

我创建了一个root用户集合,该集合文档用其用户ID标识了已使用的用户,每个用户ID都有一个文档(您从FirebaseAuth获得的文档)。

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

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

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

我自己的数据库起作用,如下所示:enter image description here

和其他具有用户集合的集合如下所示:

enter image description here


这是我的代码,可以在其中访问库存

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);
}

1 个答案:

答案 0 :(得分:0)

将此收藏用于库存:

padding