如何使用Provider包修改状态,解决Visibility组件visible为空断言报错问题
报错根因
你的AppData类中的两个布尔属性没有初始化,默认值为null,而Visibility组件的visible参数不允许接收空值,因此触发了断言报错。
分步修改方案
1. 给AppData类属性添加初始值
初始状态下启动页需要显示、悬浮按钮默认隐藏,和原有逻辑保持一致:
class AppData extends ChangeNotifier { // 赋初始值避免空值问题 bool splashMainScreen = true; bool floatActBtnMainScreen = false; void closeSplashScreen(bool splash, bool floatActBtn) { splashMainScreen = splash; floatActBtnMainScreen = floatActBtn; notifyListeners(); } }
2. 修正initState中的参数传递
和原有setState逻辑对齐:关闭启动页的同时显示悬浮按钮,不要传两个false:
@override void initState() { super.initState(); // 参数1:启动页设为隐藏 false;参数2:悬浮按钮设为显示 true Provider.of<AppData>(context, listen: false) .closeSplashScreen(false, true); }
3. 确认Provider已正确注册
确保你在应用顶层已经注册了AppData的Provider,否则会找不到状态实例:
void main() { runApp( ChangeNotifierProvider( create: (context) => AppData(), child: const MyApp(), ), ); }
你原有的Widget层Consumer代码无需修改,修改完成后即可正常通过Provider控制启动页显隐。
内容的提问来源于stack exchange,提问作者Pannam
相关产品推荐
相关产品推荐

