簡體   English   中英

Flutter 錯誤:Null 檢查運算符用於 StreamBuilder 中的 null 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM