Flutter报ToDouble is called on null错误及空值问题如何修复?
问题修复方案
1. 解决toDouble was called on null报错
报错根因是_currentBlend和recentData.Blend同时为空时,调用toDouble()方法触发空指针。修改Slider的value字段,增加兜底默认值即可:
// 修改前 value: (_currentBlend ?? recentData.Blend).toDouble(), // 修改后,默认值3对应中间档位,可根据需求调整 value: (_currentBlend ?? recentData.Blend ?? 3).toDouble(),
同时需要检查你的UserData类定义,确保Blend字段有默认值,避免从数据库读取时返回空值。
2. 修复姓名输入框值不更新问题
TextFormField的initialValue仅在组件首次初始化时生效,你没有将数据库返回的recentData.Name同步到_currentName变量,导致值不更新。
在snapshot.hasData分支的UserData recentData = snapshot.data;代码后,新增变量初始化逻辑:
// 首次加载时用数据库返回值初始化本地变量 _currentName ??= recentData.Name; _currentCupSize ??= recentData.CupSize ?? 'Select'; _currentBlend ??= recentData.Blend ?? 3; _currentFlavour ??= recentData.Flavour ?? 'Select'; _currentCream ??= recentData.Cream ?? 'Select'; _currentToppings ??= recentData.Toppings ?? 'Select';
3. 修复Slider颜色异常隐藏bug
Colors.grey的取值要求是100的整数倍(100、200...900),你直接传入1-5的数值会返回空值,修改颜色配置:
// 修改前 activeColor: Colors.grey[_currentBlend ?? recentData.Blend], inactiveColor: Colors.grey[_currentBlend ?? recentData.Blend], // 修改后 activeColor: Colors.grey[(_currentBlend ?? recentData.Blend ?? 3) * 100], inactiveColor: Colors.grey[(_currentBlend ?? recentData.Blend ?? 3) * 100],
4. 修复StreamBuilder空分支返回异常
你的StreamBuilder无数据分支仅调用了Loading()没有返回Widget,会触发空返回报错,修改为:
// 修改前 } else { Loading(); } // 修改后 } else { return Loading(); }
内容的提问来源于stack exchange,提问作者NightyKnight
相关产品推荐
相关产品推荐

