Flutter 第'行;的子项不能包含任何空值,但在索引2处找到了空值
我有下面的屏幕图像 我在ui中有一个Apple登录,因此我只需要在IOS中使用此Apple登录,因此我创建了以下代码:Flutter 第'行;的子项不能包含任何空值,但在索引2处找到了空值,flutter,dart,Flutter,Dart,我有下面的屏幕图像 我在ui中有一个Apple登录,因此我只需要在IOS中使用此Apple登录,因此我创建了以下代码: Platform.isIOS ? IPetCustomCircleBtn( constraintWidth: constraints.maxWidth * 0.13
Platform.isIOS
? IPetCustomCircleBtn(
constraintWidth:
constraints.maxWidth * 0.13,
constraintHeight:
constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
)
: null
if (Platform.isIOS)
IPetCustomCircleBtn(
constraintWidth: constraints.maxWidth * 0.13,
constraintHeight: constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
),
我发现了这个错误:
Row's children must not contain any null values, but a null value was found at index 2
我试图通过添加一个空的小部件来处理这个问题,如下代码所示
Platform.isIOS
? IPetCustomCircleBtn(
constraintWidth:
constraints.maxWidth * 0.13,
constraintHeight:
constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
)
: SizedBox()
但问题是外观不好,因为我需要其他按钮位于行的中心,这是我的整行:
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IPetCustomCircleBtn(
constraintWidth: constraints.maxWidth * 0.13,
constraintHeight: constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.google,
colour: Colors.white,
),
iPetIconColor: Colors.white,
iPetFillColor: Colors.red,
),
IPetCustomCircleBtn(
constraintWidth: constraints.maxWidth * 0.13,
constraintHeight: constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.facebook,
colour: Colors.white,
),
iPetIconColor: AppConst.kPrimaryWhiteBgColor,
iPetFillColor: AppConst.kBlueColor,
),
Platform.isIOS
? IPetCustomCircleBtn(
constraintWidth:
constraints.maxWidth * 0.13,
constraintHeight:
constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
)
: SizedBox()
],
),
所以这个案子有什么好办法:D
我希望这能足够清楚
我建议您构建两行,一行使用apple登录,另一行不使用,然后调用
Platform.isIOS?rowWithIos:rowWithoutIos
如果您为所有登录类型构建小部件,则会减少这两行中的重复代码。我建议您构建两行,一行使用apple登录,另一行不使用,然后调用Platform.isIOS?rowWithIos:rowWithoutIos
如果为所有登录类型构建小部件,则可以减少这两行中的重复代码。我可以想出两种方法:
SizedBox(height: 0, width: 0,)
Row(
mainAxisAlignment: Platform.isIOS ? MainAxisAlignment.spaceAround
: MainAxisAlignment.spaceBetween
....
您可以根据需要更换mainAxisAlignment我可以想到两种方法:
SizedBox(height: 0, width: 0,)
Row(
mainAxisAlignment: Platform.isIOS ? MainAxisAlignment.spaceAround
: MainAxisAlignment.spaceBetween
....
您可以根据需要更换mainAxisAlignment我找到了更好的解决方案,如下代码所示:
Platform.isIOS
? IPetCustomCircleBtn(
constraintWidth:
constraints.maxWidth * 0.13,
constraintHeight:
constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
)
: null
if (Platform.isIOS)
IPetCustomCircleBtn(
constraintWidth: constraints.maxWidth * 0.13,
constraintHeight: constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
),
我找到了更好的解决方案,如下代码所示:
Platform.isIOS
? IPetCustomCircleBtn(
constraintWidth:
constraints.maxWidth * 0.13,
constraintHeight:
constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
)
: null
if (Platform.isIOS)
IPetCustomCircleBtn(
constraintWidth: constraints.maxWidth * 0.13,
constraintHeight: constraints.maxHeight * 0.13,
iPetShapeBorder: CircleBorder(
side: BorderSide(
width: 2,
color: Colors.black,
style: BorderStyle.solid,
),
),
iPetChildCard: IPetCustomIcon(
ipFontIc: FontAwesomeIcons.apple,
colour: Colors.black,
),
iPetIconColor: Colors.black,
iPetFillColor: Colors.white,
),
不用SizeBox,只需使用类似Center()的小部件@KabirouAgouda我以前考虑过这个解决方案,但我没想到这是最好的解决方案,谢谢你,我已经尝试过了,但没有成功:代替SizeBox,只需使用类似Center()的小部件@KabirouAgouda我以前考虑过这个解决方案,但我没想到这是最好的解决方案,谢谢你,我已经尝试过了,但没有成功:DI不喜欢这个解决方案,我正在避免重复代码实现,如果我将行提取为一个小部件类,并为行子级创建一个
列表的构造函数,那么您的解决方案将是好的:DI不喜欢这个解决方案,我正在避免重复代码实现,如果我将行提取为一个小部件类,并为行的子项创建一个列表的构造函数,那么您的解决方案将是很好的:谢谢您的帮助:),我已经尝试了第一个,但是让我试试第二种方法谢谢你我认为这个解决方案很接近正确,但是用相同的规则在make center和add Size box之间留出空间谢谢你的帮助:),我已经尝试了第一种,但是,让我试试第二种方法谢谢,我认为这个解决方案是接近正确的,但是用相同的规则在make center和add size box之间留出空间