Коллекция для пользователей FireStore Flutter App - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь создать коллекцию пользователей в своем приложении.

Приложение имеет коллекцию запасов с элементами, которые являются документами, и эти документы, такие как таблички или пакеты, имеют 2 поля

Я создаю коллекцию корневых пользователей и документы этой коллекции, которые идентифицировали используемые сих идентификатор пользователя, один документ для каждого идентификатора пользователя (тот, который вы получаете от 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 голосов
/ 26 декабря 2018

Используйте эту коллекцию на складе:

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

//add stock
col.add(yourstock);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...