Flutter传递Model类到Tab页面时底部导航页面报错如何解决
Flutter自定义Model传入Tab页面报错解决方案
报错原因
你的More组件构造函数定义了必传位置参数 UserData类型的currentUser,调用时未传入对应参数所以触发编译错误。
// 你的More组件构造要求必须传入currentUser参数 More(this.currentUser,) ;
修复方案
方案1:直接传入已有的UserData实例
如果你的底部导航父组件BottomNav已经持有currentUser实例,直接传递即可,修改_items列表中More的调用代码:
List<Widget> _items = [ Home(), UserProfile(FirebaseAuth.instance.currentUser,imageList: [],currentIndex:0), Notifications(), Chat(), More(widget.currentUser), // 传入父组件持有的currentUser实例 ];
方案2:将Firebase用户转换为自定义Model后传入
如果当前没有现成的UserData实例,参考你给UserProfile传参的逻辑,把Firebase返回的用户对象转换成你自定义的UserData类实例再传递:
假设你的
UserData类已经实现了从Firebase User转实例的方法,比如fromFirebaseUser构造,示例代码如下:
List<Widget> _items = [ Home(), UserProfile(FirebaseAuth.instance.currentUser,imageList: [],currentIndex:0), Notifications(), Chat(), More(UserData.fromFirebaseUser(FirebaseAuth.instance.currentUser!)), // 注意做空安全判空处理 ];
可选优化:参数可选化处理
如果允许currentUser为空,可以修改More组件的构造函数为可选命名参数,避免强制传参的要求,注意使用时要做空判断:
class More extends StatefulWidget{ final UserData? currentUser; // 改为可空类型 const More({this.currentUser, super.key}); // 改为可选命名参数 @override _MoreState createState() => _MoreState(); }
内容的提问来源于stack exchange,提问作者GAGAN SINGH
相关产品推荐
相关产品推荐

