Flutter 流:流生成器返回 Null 值
Posted
技术标签:
【中文标题】Flutter 流:流生成器返回 Null 值【英文标题】:Flutter stream: Stream builder returns Null value 【发布时间】: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
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();
这是错误消息
【问题讨论】:
【参考方案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']); 这个返回模型以上是关于Flutter 流:流生成器返回 Null 值的主要内容,如果未能解决你的问题,请参考以下文章