[英]Flutter Error: Null check operator used on a null value in a StreamBuilder
Flutter 錯誤:Null 檢查運算符用於 StreamBuilder 中的 null 值
無論我做什么,我都會在數據庫中不斷收到此錯誤而不是我想要的用戶數據。dart 我沒有放任何東西? 或者,所以我猜問題出在這個文件上。 但我不知道如何解決它。 我也嘗試了我在谷歌上找到的所有命令,但它們都不起作用
class SettingsForm extends StatefulWidget {
const SettingsForm({Key? key}) : super(key: key);
@override
_SettingsFormState createState() => _SettingsFormState();
}
class _SettingsFormState extends State<SettingsForm> {
final _formKey = GlobalKey<FormState>();
final List<String> sugars = ['0','1','2','3','4'];
String?_currentName ;
String?_currentSugars ;
dynamic _currentStrength =1;
@override
Widget build(BuildContext context) {
final user = Provider.of<myUser?>(context);
return StreamBuilder<myUserData?>(
stream: DatabaseService(uid: user!.uid).userData,
builder: (context, snapshot) {
if(snapshot.hasData) {
myUserData? usdata = snapshot.data;
return Form(
key:_formKey,
child: Column(
children: [
Text('Update your brew settings.',
style: TextStyle(fontSize:18.0),),
SizedBox(height: 20,),
TextFormField(
initialValue: usdata?.name,
decoration: textInputDecoration.copyWith(hintText: ' name'),
validator: (val) => val!.isEmpty ? 'Please enter a name' : null,
onChanged: (val) {
setState(() => _currentName = val);
},
),
SizedBox(height: 20.0,),
//dropdown
DropdownButtonFormField<String>(
value: usdata?.sugars,
items: sugars.map((sugar){
return DropdownMenuItem(
value: sugar,
child: Text(' $sugar sugars')
);
}).toList(),
onChanged: (val) => setState(() => _currentSugars = val.toString()),
),
SizedBox(height:20 ),
//slider
Slider(
value: (_currentStrength ?? usdata?.strength).toDouble(),
activeColor: Colors.brown[_currentStrength ?? usdata?.strength],
inactiveColor: Colors.brown[_currentStrength ?? usdata?.strength],
min:100,
max:900,
divisions: 8,
onChanged: (val) => setState(() {
_currentStrength = val.round();
}),
),
RaisedButton(
color:Colors.pink[400],
child: Text('Update',
style: TextStyle(color:Colors.white),),
onPressed: () async {
print(_currentName);
print(_currentSugars);
print(_currentStrength);
})
],
),
);
}
else {
myUserData usdata = snapshot.data!;
print(usdata.name);
print(usdata.sugars);
print(usdata.strength);
return Container();
}
}
);
}
}
這是您的代碼的簡化:
builder: (context, snapshot) {
if(snapshot.hasData) {
...
} else {
myUserData usdata = snapshot.data!;
print(usdata.name);
print(usdata.sugars);
print(usdata.strength);
return Container();
}
},
else
語句中的代碼只有在snapshot.hasData
為 false 時才會運行,這意味着snapshot.data
是 null,當您嘗試讀取它時會出現錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.