You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:03