1

我正在尝试通过流从 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();
           }

这是错误消息 在此处输入图像描述

4

1 回答 1

0

我认为问题出在您的服务文件中-“名称:名称:快照['名称'],”数据未分配

UserData _userDataFromSnapShot(DocumentSnapshot snapshot) {
    return UserData(
        uid: uid,
        name: snapshot['name'],
        sugar: snapshot['sugar'],
        strength: snapshot['strength']);
  }
于 2021-11-18T12:23:52.400 回答