我正在尝试通过流从 Firestore 获取数据,但它返回 null。
这是我的模型的代码。
class UserData {
String? uid;
String? name;
String? sugar;
int? strength;
UserData(
{required this.uid,
required this.name,
required this.sugar,
required this.strength});
}
这是我的流服务
//User data from snapshot
UserData _userDataFromSnapShot(DocumentSnapshot snapshot) {
return UserData(
uid: uid,
name: snapshot['name'],
sugar: snapshot['sugar'],
strength: snapshot['strength']);
}
//Get user Doc stream
Stream<UserData> get userData {
return brewCollection.doc(uid).snapshots().map(_userDataFromSnapShot);
}
}
在这里,我想使用从 Firestore 获得的数据和 Stream Builder。并尝试在文本表单字段中显示数据的名称属性,但在这里我得到了空值,虽然最终用户 = Provider.of<MyUser?>(context); 它返回我在打印语句中检查的 Uid 但错误总是说StreamBuilder导致错误
class _FormSettingState extends State<FormSetting> {
final _formKey = GlobalKey<FormState>();
final List<String> sugars = ['0', '1', '2', '3', '4', '5'];
String? _currentName;
String? _currentSugar = "0";
dynamic _currentStrength;
@override
Widget build(BuildContext context) {
final user = Provider.of<MyUser?>(context);
return StreamBuilder<UserData>(
stream: DataBaseServices(uid: user?.Uid).userData,
builder: (context, snapshot) {
if (snapshot.hasData) {
UserData? userdata = snapshot.data;
return Form(
key: _formKey,
child: Column(
children: <Widget>[
Text(
'Update your Brew Settings',
style: TextStyle(fontSize: 18.0),
),
SizedBox(height: 20),
TextFormField(
initialValue: userdata?.name,
decoration:
textInputDecoration.copyWith(hintText: 'Enter Name'),
onChanged: (val) => setState(() => _currentName = val),
validator: (val) =>
val!.isEmpty ? 'Please Enter value' : null,
),}
else {
return Loading();
}