Flutter底部导航栏调用Home页面时required参数app缺失报错问题
问题原因
你的报错触发有两个核心问题:
Home组件在定义时声明了必填的命名参数app(类型为FirebaseApp),实例化时必须传入符合类型的参数- 你当前在
nav.dart中初始化Home时传入的_Home是Home组件对应的State类,不属于FirebaseApp类型,完全不符合参数要求
同时观察你的Home组件代码,全程没有用到声明的app参数,所有Firebase相关调用都是直接用的FirebaseDatabase.instance默认实例,所以你可以二选一选择解决方案:
解决方案1:删掉无用的app参数(更推荐)
因为你实际没有用到这个参数,直接删除即可避免参数校验报错:
- 修改
home_screen.dart里的Home类定义,删除app相关的声明和构造参数:
class Home extends StatefulWidget { // 删掉原来的final FirebaseApp app;行 const Home({Key? key}) : super(key: key); // 替换原来的构造函数 @override _Home createState() => _Home(); }
- 修改
nav.dart里的_widgetOptions列表,直接实例化Home即可:
List<Widget> _widgetOptions = <Widget>[ Home(), // 替换原来的Home(app:_Home) FlutterBlueApp(), Text('Settings'), ];
解决方案2:保留app参数,传入正确类型的实例
如果你后续需要用到这个app参数,可以保留参数,传入正确的FirebaseApp实例即可:
修改nav.dart里的_widgetOptions列表,传入默认的FirebaseApp实例:
List<Widget> _widgetOptions = <Widget>[ Home(app: Firebase.app()), // 用Firebase.app()获取默认初始化的实例 FlutterBlueApp(), Text('Settings'), ];
额外优化提示
你当前nav.dart里的登出逻辑有问题:AuthClass().signOut;没有加括号执行,实际不会触发登出操作,改成AuthClass().signOut();即可正常调用。
内容的提问来源于stack exchange,提问作者Matthew Niculae
相关产品推荐
相关产品推荐

