Flutter 第'行;的子项不能包含任何空值,但在索引2处找到了空值

Flutter 第'行;的子项不能包含任何空值,但在索引2处找到了空值,flutter,dart,Flutter,Dart,我有下面的屏幕图像 我在ui中有一个Apple登录,因此我只需要在IOS中使用此Apple登录,因此我创建了以下代码: Platform.isIOS ? IPetCustomCircleBtn( constraintWidth: constraints.maxWidth * 0.13

我有下面的屏幕图像

我在ui中有一个Apple登录,因此我只需要在IOS中使用此Apple登录,因此我创建了以下代码:

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之间留出空间