Flutter中返回Widget的方法报可能返回null错误该如何解决?
问题原因
- 你声明的
earnPoints方法要求返回非空Widget类型,但你所有的return语句都属于showCupertinoModalBottomSheet的参数闭包,仅用于给弹窗构造内部视图,并没有给earnPoints方法本身返回任何Widget,方法执行完就会默认返回null,和声明的返回类型冲突。 - 额外说明:
showCupertinoModalBottomSheet是异步调用方法,返回值是Future类型,本身也不是Widget,即使你直接return这个方法的调用结果,也和声明的Widget返回类型不匹配。
修复方案
根据你的实际使用场景二选一即可:
场景1:该方法仅用于主动触发弹窗,不需要返回组件
直接修改方法的返回类型为void即可,修改后的代码如下:
void earnPoints() { // 把原方法签名的Widget改为void double width = MediaQuery.of(context).size.width; double height = MediaQuery.of(context).size.height; showCupertinoModalBottomSheet( context: context, builder: (context) { return StatefulBuilder( builder: (BuildContext context, StateSetter setStatee) { return Material( child: Container( height: height * 0.9, child: SingleChildScrollView( child: Column(children: []), )), ); }); }); }
场景2:该方法需要返回一个可交互组件,点击组件才触发弹窗
给方法补充return语句,返回对应交互组件即可,示例如下:
Widget earnPoints() { double width = MediaQuery.of(context).size.width; double height = MediaQuery.of(context).size.height; // 补充返回点击触发弹窗的组件,这里以按钮为例 return TextButton( onPressed: () { showCupertinoModalBottomSheet( context: context, builder: (context) { return StatefulBuilder( builder: (BuildContext context, StateSetter setStatee) { return Material( child: Container( height: height * 0.9, child: SingleChildScrollView( child: Column(children: []), )), ); }); }); }, child: const Text("赚取积分") ); }
内容的提问来源于stack exchange,提问作者rameez khan
相关产品推荐
相关产品推荐

