Получение списка документов от зарегистрированного пользователя Flutter / Firebase - PullRequest
0 голосов
/ 27 апреля 2020

Я немного новичок в флаттере / Firebase, и я пытаюсь получить список документов из подколлекции коллекции зарегистрированных пользователей. В настоящее время с кодом, который у меня есть, он возвращает нуль для оператора печати вошедшего в систему пользователя в потоке, однако, если я передаю идентификатор пользователя вручную (вместо передачи uid), это работает.

database.dart

class DatabaseService {
  final String uid;
  DatabaseService({this.uid});


  // list from snapshot
  List<Item> _ListFromSnapshot(QuerySnapshot snapshot) {
    print(snapshot.documents);
    return snapshot.documents.map((doc) {
      return Item(
        name: doc.data['name'] ?? '',
      );
    }).toList();
  }

  Stream<List<Item>> get items {
    print('current logged in user $uid');
    return Firestore.instance
        .collection('users')
        .document(uid)
        .collection('items')
        .snapshots()
        .map(_ListFromSnapshot);
  }

}

home.dart

class Home extends StatelessWidget {
  final AuthService _auth = AuthService();
  @override
  Widget build(BuildContext context) {
    return StreamProvider<List<Item>>.value(
      value: DatabaseService().items,
      child: Scaffold(
        backgroundColor: Colors.brown[50],
        appBar: AppBar(
          title: Text('MyApp'),
        ),
        // just a widget that uses a listview builder to make a card for each item.
        body: ItemList(),
      ),
    );
  }
}

auth.dart

class AuthService {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  // create user obj based on FirebaseUser
  User _userFromFirebaseUser(FirebaseUser user) {
    return user != null ? User(uid: user.uid) : null;
  }

  // auth change user stream
  Stream<User> get user {
    return _auth.onAuthStateChanged
        .map(_userFromFirebaseUser);
  }
}

У меня такое ощущение, что это что-то делать со значением uid не будет доступно к тому времени, когда приложение вызывает его (что-то в будущем или связано с await / asyn c). Если я это выясню, я обязательно отправлю сюда. Еще раз спасибо, что нашли время посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...