Flutter 填充柱中的垂直空间-颤振

Flutter 填充柱中的垂直空间-颤振,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我想把“价格”放在“商品名称”的正下方,“添加按钮”应该在图片的底部中间 我使用Stack小部件将“添加按钮”和图片放在彼此的顶部。有没有办法定位这个 我尝试使用mainAxisAlignment.start将“price”放在我列中的“item name”下面,但似乎不起作用 ListView.builder( scrollDirection: Axis.vertical, shrinkWrap: true,

我想把“价格”放在“商品名称”的正下方,“添加按钮”应该在图片的底部中间

我使用Stack小部件将“添加按钮”和图片放在彼此的顶部。有没有办法定位这个

我尝试使用mainAxisAlignment.start将“price”放在我列中的“item name”下面,但似乎不起作用

        ListView.builder(
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            itemBuilder: (ctx, i) => restaurantItems[i].quantity <= 0
                ? Center()
                : Padding(
                    padding: const EdgeInsets.only(left: 15, bottom: 8, top: 1),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: [
                        // ITEM NAME
                        Padding(
                          padding: const EdgeInsets.only(left: 10, top: 10),
                          child: Row(
                            mainAxisSize: MainAxisSize.max,
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(
                                '${restaurantItems[i].name}',
                                style: TextStyle(
                                    fontSize: 17,
                                    color: kTextColor,
                                    fontWeight: FontWeight.w700),
                              ),

                              //Spacer(),

                              // 'ADD' BUTTON CONTAINER
                              Padding(
                                padding: const EdgeInsets.only(right: 20),
                                child: Stack(
                                  children: [
                                    ClipRRect(
                                      borderRadius: BorderRadius.circular(8),
                                      child: Image.network(
                                        restaurantItems[i].imageUrl,
                                        height: size.width * 0.28,
                                        width: size.width * 0.26,
                                        fit: BoxFit.cover,
                                      ),
                                    ),
                                    Container(
                                      decoration: BoxDecoration(
                                        borderRadius: BorderRadius.circular(8),
                                        color: Colors.black87,
                                      ),
                                      child: Padding(
                                        padding: const EdgeInsets.only(
                                            left: 9,
                                            top: 3,
                                            right: 5,
                                            bottom: 3),
                                        child: InkWell(
                                          splashColor: Colors.white,
                                          onTap: () {
                                            print(restaurantItems[i].name);
                                            cart.addItem(
                                              restaurantItems[i].id,
                                              restaurantItems[i].name,
                                              restaurantItems[i].price,
                                              restaurant,
                                            );
                                          },
                                          child: Row(
                                            children: [
                                              Text(
                                                'ADD',
                                                style: TextStyle(
                                                  color: Colors.white,
                                                ),
                                              ),
                                              Icon(
                                                Icons.add,
                                                color: Colors.white,
                                                size: 17,
                                              ),
                                            ],
                                          ),
                                        ),
                                      ),
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(left: 10, bottom: 11),
                          child: Text(
                            '₹${restaurantItems[i].price}',
                            style: TextStyle(
                                fontSize: 15,
                                color: kTextColor,
                                fontWeight: FontWeight.w400),
                          ),
                        ),
                      ],
                    ),
                  ),
            itemCount: restaurantItems.length,
          );
ListView.builder(
滚动方向:轴垂直,
收缩膜:对,

itemBuilder:(ctx,i)=>restaurantItems[i].quantity您可以使用以下内容:

          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Column(
                children: [
                  Text('Title'),
                  Text('Price'),
                ],
              ),
              Stack(
                children: [
                  ImageWiget(
                  ),
                  Positioned.fill(
                      child: Column(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Text('Add Button'),
                    ],
                  ))
                ],
              )
            ],
          ),

您可以使用以下内容:

          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Column(
                children: [
                  Text('Title'),
                  Text('Price'),
                ],
              ),
              Stack(
                children: [
                  ImageWiget(
                  ),
                  Positioned.fill(
                      child: Column(
                    mainAxisAlignment: MainAxisAlignment.end,
                    children: [
                      Text('Add Button'),
                    ],
                  ))
                ],
              )
            ],
          ),

在列中打断行的第一部分
添加列属性,然后在第二列中将文本小部件放在中间。

在列中断开第一行
添加列属性,然后在第二列中将文本小部件放在中间。

我测试了以下代码,根据需要对其进行调整:

         Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                // control the split ratio here
                Expanded(
                  flex: 2,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        'restaurant name',
                        style: TextStyle(
                            fontSize: 17,
                            color: Colors.black,
                            fontWeight: FontWeight.w700),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(left: 10, bottom: 11),
                        child: Text(
                          '₹ 5',
                          style: TextStyle(
                              fontSize: 15,
                              color: Colors.black,
                              fontWeight: FontWeight.w400),
                        ),
                      ),
                    ],
                  ),
                ),
                SizedBox(width: 10.0),
                Expanded(
                  // control the split ratio here
                  flex: 2,
                  child: Column(
                    children: [
                      // 'ADD' BUTTON CONTAINER
                      Padding(
                        padding: const EdgeInsets.only(right: 20),
                        child: Stack(
                          children: [
                            ClipRRect(
                              borderRadius: BorderRadius.circular(8),
                              child: Image.network(
                                'https://picsum.photos/id/1/200/300',
                                height:
                                    MediaQuery.of(context).size.width * 0.28,
                                width:
                                    MediaQuery.of(context).size.height * 0.26,
                                fit: BoxFit.cover,
                              ),
                            ),
                            Positioned.fill(
                              bottom: 0.0,
                              child: Align(
                                alignment: Alignment.bottomCenter,
                                child: Container(
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(8),
                                    color: Colors.black87,
                                  ),
                                  //try to use ElevatedButton.icon instead
                                  child: Padding(
                                    padding: const EdgeInsets.only(
                                        left: 9, top: 3, right: 5, bottom: 3),
                                    child: InkWell(
                                      splashColor: Colors.white,
                                      onTap: () {},
                                      child: Row(
                                        mainAxisSize: MainAxisSize.min,
                                        mainAxisAlignment:
                                            MainAxisAlignment.center,
                                        children: [
                                          Text(
                                            'ADD',
                                            style: TextStyle(
                                              color: Colors.white,
                                            ),
                                          ),
                                          Icon(
                                            Icons.add,
                                            color: Colors.white,
                                            size: 17,
                                          ),
                                        ],
                                      ),
                                    ),
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),

我测试了以下代码,根据需要对其进行调整:

         Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                // control the split ratio here
                Expanded(
                  flex: 2,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        'restaurant name',
                        style: TextStyle(
                            fontSize: 17,
                            color: Colors.black,
                            fontWeight: FontWeight.w700),
                      ),
                      Padding(
                        padding: const EdgeInsets.only(left: 10, bottom: 11),
                        child: Text(
                          '₹ 5',
                          style: TextStyle(
                              fontSize: 15,
                              color: Colors.black,
                              fontWeight: FontWeight.w400),
                        ),
                      ),
                    ],
                  ),
                ),
                SizedBox(width: 10.0),
                Expanded(
                  // control the split ratio here
                  flex: 2,
                  child: Column(
                    children: [
                      // 'ADD' BUTTON CONTAINER
                      Padding(
                        padding: const EdgeInsets.only(right: 20),
                        child: Stack(
                          children: [
                            ClipRRect(
                              borderRadius: BorderRadius.circular(8),
                              child: Image.network(
                                'https://picsum.photos/id/1/200/300',
                                height:
                                    MediaQuery.of(context).size.width * 0.28,
                                width:
                                    MediaQuery.of(context).size.height * 0.26,
                                fit: BoxFit.cover,
                              ),
                            ),
                            Positioned.fill(
                              bottom: 0.0,
                              child: Align(
                                alignment: Alignment.bottomCenter,
                                child: Container(
                                  decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(8),
                                    color: Colors.black87,
                                  ),
                                  //try to use ElevatedButton.icon instead
                                  child: Padding(
                                    padding: const EdgeInsets.only(
                                        left: 9, top: 3, right: 5, bottom: 3),
                                    child: InkWell(
                                      splashColor: Colors.white,
                                      onTap: () {},
                                      child: Row(
                                        mainAxisSize: MainAxisSize.min,
                                        mainAxisAlignment:
                                            MainAxisAlignment.center,
                                        children: [
                                          Text(
                                            'ADD',
                                            style: TextStyle(
                                              color: Colors.white,
                                            ),
                                          ),
                                          Icon(
                                            Icons.add,
                                            color: Colors.white,
                                            size: 17,
                                          ),
                                        ],
                                      ),
                                    ),
                                  ),
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),

您只需要在行内创建列小部件,并在该列内添加文本小部件和填充价格小部件

ListView.builder(
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            itemBuilder: (ctx, i) => restaurantItems[i].quantity <= 0
                ? Center()
                : Padding(
                    padding: const EdgeInsets.only(left: 15, bottom: 8, top: 1),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: [
                        // ITEM NAME
                        Padding(
                          padding: const EdgeInsets.only(left: 10, top: 10),
                          child: Row(
                            mainAxisSize: MainAxisSize.max,
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                            Column(
                             children:[
                              Text(
                                '${restaurantItems[i].name}',
                                style: TextStyle(
                                    fontSize: 17,
                                    color: kTextColor,
                                    fontWeight: FontWeight.w700),
                              ),
                              Padding(
                                padding: const EdgeInsets.only(left: 10, bottom: 11),
                                child: Text(
                                '₹${restaurantItems[i].price}',
                                style: TextStyle(
                                fontSize: 15,
                                color: kTextColor,
                                fontWeight: FontWeight.w400),
                          ),
                        ),
                       ],
                      ),

                              //Spacer(),

                              // 'ADD' BUTTON CONTAINER
                              Padding(
                                padding: const EdgeInsets.only(right: 20),
                                child: Stack(
                                  children: [
                                    ClipRRect(
                                      borderRadius: BorderRadius.circular(8),
                                      child: Image.network(
                                        restaurantItems[i].imageUrl,
                                        height: size.width * 0.28,
                                        width: size.width * 0.26,
                                        fit: BoxFit.cover,
                                      ),
                                    ),
                                    Container(
                                      decoration: BoxDecoration(
                                        borderRadius: BorderRadius.circular(8),
                                        color: Colors.black87,
                                      ),
                                      child: Padding(
                                        padding: const EdgeInsets.only(
                                            left: 9,
                                            top: 3,
                                            right: 5,
                                            bottom: 3),
                                        child: InkWell(
                                          splashColor: Colors.white,
                                          onTap: () {
                                            print(restaurantItems[i].name);
                                            cart.addItem(
                                              restaurantItems[i].id,
                                              restaurantItems[i].name,
                                              restaurantItems[i].price,
                                              restaurant,
                                            );
                                          },
                                          child: Row(
                                            children: [
                                              Text(
                                                'ADD',
                                                style: TextStyle(
                                                  color: Colors.white,
                                                ),
                                              ),
                                              Icon(
                                                Icons.add,
                                                color: Colors.white,
                                                size: 17,
                                              ),
                                            ],
                                          ),
                                        ),
                                      ),
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                        ),
                        
                      ],
                    ),
                  ),
            itemCount: restaurantItems.length,
          );
ListView.builder(
滚动方向:轴垂直,
收缩膜:对,

itemBuilder:(ctx,i)=>restaurantItems[i].quantity您所需要的只是在行中创建列小部件,并在该列中添加文本小部件和填充价格小部件。这是您修改的代码

ListView.builder(
            scrollDirection: Axis.vertical,
            shrinkWrap: true,
            itemBuilder: (ctx, i) => restaurantItems[i].quantity <= 0
                ? Center()
                : Padding(
                    padding: const EdgeInsets.only(left: 15, bottom: 8, top: 1),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      mainAxisAlignment: MainAxisAlignment.start,
                      children: [
                        // ITEM NAME
                        Padding(
                          padding: const EdgeInsets.only(left: 10, top: 10),
                          child: Row(
                            mainAxisSize: MainAxisSize.max,
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                            Column(
                             children:[
                              Text(
                                '${restaurantItems[i].name}',
                                style: TextStyle(
                                    fontSize: 17,
                                    color: kTextColor,
                                    fontWeight: FontWeight.w700),
                              ),
                              Padding(
                                padding: const EdgeInsets.only(left: 10, bottom: 11),
                                child: Text(
                                '₹${restaurantItems[i].price}',
                                style: TextStyle(
                                fontSize: 15,
                                color: kTextColor,
                                fontWeight: FontWeight.w400),
                          ),
                        ),
                       ],
                      ),

                              //Spacer(),

                              // 'ADD' BUTTON CONTAINER
                              Padding(
                                padding: const EdgeInsets.only(right: 20),
                                child: Stack(
                                  children: [
                                    ClipRRect(
                                      borderRadius: BorderRadius.circular(8),
                                      child: Image.network(
                                        restaurantItems[i].imageUrl,
                                        height: size.width * 0.28,
                                        width: size.width * 0.26,
                                        fit: BoxFit.cover,
                                      ),
                                    ),
                                    Container(
                                      decoration: BoxDecoration(
                                        borderRadius: BorderRadius.circular(8),
                                        color: Colors.black87,
                                      ),
                                      child: Padding(
                                        padding: const EdgeInsets.only(
                                            left: 9,
                                            top: 3,
                                            right: 5,
                                            bottom: 3),
                                        child: InkWell(
                                          splashColor: Colors.white,
                                          onTap: () {
                                            print(restaurantItems[i].name);
                                            cart.addItem(
                                              restaurantItems[i].id,
                                              restaurantItems[i].name,
                                              restaurantItems[i].price,
                                              restaurant,
                                            );
                                          },
                                          child: Row(
                                            children: [
                                              Text(
                                                'ADD',
                                                style: TextStyle(
                                                  color: Colors.white,
                                                ),
                                              ),
                                              Icon(
                                                Icons.add,
                                                color: Colors.white,
                                                size: 17,
                                              ),
                                            ],
                                          ),
                                        ),
                                      ),
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                        ),
                        
                      ],
                    ),
                  ),
            itemCount: restaurantItems.length,
          );
ListView.builder(
滚动方向:轴垂直,
收缩膜:对,

itemBuilder:(ctx,i)=>restaurantItems[i].quantity的效果非常好!谢谢我在屏幕右侧看到了很多空白。我如何才能将堆栈推到那里?我尝试将正确的填充减少到0,但它不起作用。即使在行中添加mainAxisAlignment.spaceBetween也无助于NVM。我在列小部件中添加了crossAxisAlignment.end,它现在的工作方式如下魅力!谢谢!我在屏幕右侧看到了很多空白。我如何才能将堆栈推到那里?我尝试将正确的填充减少到0,但它不起作用。即使在行中添加mainAxisAlignment.spaceBetween也无助于NVM。我在列小部件中添加了crossAxisAlignment.end,它现在起作用了