【发布时间】:2022-01-10 17:22:58
【问题描述】:
Flutter 错误:对 StreamBuilder 中的空值使用空检查运算符
无论我做什么,我都会不断收到此错误,而不是我想要的用户数据, 在 database.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();
}
}
);
}
}
【问题讨论】: