【问题标题】:Flutter stream: Stream builder returns Null valueFlutter 流:流生成器返回 Null 值
【发布时间】:2021-12-29 03:12:48
【问题描述】:

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

这是错误消息

【问题讨论】:

    标签: flutter dart provider stream-builder flutter-streambuilder


    【解决方案1】:

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

    UserData _userDataFromSnapShot(DocumentSnapshot snapshot) {
        return UserData(
            uid: uid,
            name: snapshot['name'],
            sugar: snapshot['sugar'],
            strength: snapshot['strength']);
      }
    

    【讨论】:

    • 我省略了代码,因为它输入错误,但问题仍然存在。
    • 您是否在快照或其他变量(如快照['sugar'])中获取数据?
    • 不,我没有进入变量,我在快照中获取数据,然后映射该快照
    • 这意味着您的 Stream 函数没有返回任何值? brewCollection.doc(uid).snapshots().map(_userDataFromSnapShot) 这个函数是否返回一个用户模型?
    • UserData _userDataFromSnapShot(DocumentSnapshot snapshot) { return UserData( uid: uid, name: snapshot['name'], sugar: snapshot['sugar'],strength: snapshot['strength']); } 这个返回模型
    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 2020-07-25
    • 1970-01-01
    • 2017-11-12
    • 2019-05-10
    • 2021-02-07
    • 2020-08-17
    • 2013-04-04
    相关资源
    最近更新 更多