Я немного новичок в флаттере / 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). Если я это выясню, я обязательно отправлю сюда. Еще раз спасибо, что нашли время посмотреть.