Flutter中如何在Column内保留固定组件同时条件展示其余组件列表
错误原因
你当前实现无法运行的核心问题有两点:
- 三元运算符两侧返回值类型不匹配:
_forgetPasswordScreen为true时返回单个ForgotPassword组件,为false时返回List<Widget>类型的组件数组,强类型校验不通过。 Column的children属性要求元素为Widget类型,你直接将_buildLoginScreen返回的List<Widget>作为单个元素传入children,形成了数组嵌套,不符合类型要求。
解决方案
Dart 2.3及以上版本支持展开运算符和集合if语法,你使用的2.13.4版本完全兼容,以下两种写法都可以实现需求:
写法1:三元运算符+展开运算符
把三元运算符两侧统一为List<Widget>类型,再通过展开运算符...将数组拆分为独立组件注入children:
Column( crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ _buildCloseButton(context), ..._forgetPasswordScreen ? [ForgotPassword()] : _buildLoginScreen(), ], )
写法2:集合if(可读性更高)
直接用集合if语法做分支判断,分别处理两种情况:
Column( crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ _buildCloseButton(context), if (_forgetPasswordScreen) ForgotPassword() else ..._buildLoginScreen(), ], )
内容的提问来源于stack exchange,提问作者nyphur
相关产品推荐
相关产品推荐

