Flutter 将小部件正确放置在卡中

Flutter 将小部件正确放置在卡中,flutter,Flutter,我正在尝试创建一个带有卡片小部件的ListView 我有ListView和卡,但我不知道如何将小部件正确地放置在卡本身中。这就是它现在的样子: 我希望收藏夹图标和图像保持其位置,但要将文本移动到图像附近,并使“Jean-Paul Gaultier”文本更靠近“Le Male”,并使其向左对齐 这就是我到目前为止所做的: Widget\u myListView(BuildContext上下文){ 返回ListView.builder( itemBuilder:(上下文,索引){ 回程卡( 孩子:

我正在尝试创建一个带有卡片小部件的ListView

我有ListView和卡,但我不知道如何将小部件正确地放置在卡本身中。这就是它现在的样子:

我希望收藏夹图标和图像保持其位置,但要将文本移动到图像附近,并使“Jean-Paul Gaultier”文本更靠近“Le Male”,并使其向左对齐

这就是我到目前为止所做的:

Widget\u myListView(BuildContext上下文){
返回ListView.builder(
itemBuilder:(上下文,索引){
回程卡(
孩子:排(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
纵队(
儿童:[
填充物(
填充:常数边集全部(8.0),
子项:Image.network('${decoded[index]['Image']}'),
),
],
),
尺寸标注框(宽度:8,),
纵队(
儿童:[
正文(
“${decoded[index]['name']}”,
样式:TextStyle(
颜色:颜色。黑色87,
fontWeight:fontWeight.bold,
尺寸:14,
),
),
划船(
儿童:[
正文(
“${decoded[index]['brand']}”,
样式:TextStyle(
颜色:颜色。蓝灰色,
fontWeight:fontWeight.normal,
尺寸:12,
),
),
],
),
],
),
纵队(
mainAxisSize:mainAxisSize.min,
儿童:[
图标按钮(
图标:图标(图标。收藏夹边框),
),
],
),
],
),
);
},
);
}
如果没有
mainAxisAlignment:mainAxisAlignment.
之间的空格,文本确实更接近图像,但收藏夹图标正好靠近文本,这是我不想要的


我试着搜索答案,但由于我不熟悉Flutter,我真的不知道正确的关键字,所以我什么也找不到。

一个更简单的方法是使用
列表互动程序

  Widget _myListView(BuildContext context) {
    return ListView.builder(
      itemBuilder: (context, index) {
        return Card(
          child: ListTile(
            title: Text("title"),
            subtitle: Text("subtitle"),
            leading: Container(
              width: 48, height: 48,
              child: Placeholder(), //place image here replacing the Placeholder widget
            ),
            trailing: IconButton(
              icon: Icon(Icons.favorite_border),
              onPressed: () {},
            ),
          ),
        );
      },
    );
  }
这给了我们


但是如果你想要你的代码,那么它就在这里

  Widget _myListView(BuildContext context) {
    return ListView.builder(
      itemBuilder: (context, index) {
        return Card(
          child: Row(
            children: <Widget>[
              Container(
                margin: const EdgeInsets.all(8.0),
                child: Placeholder(),
                width: 48,
                height: 48,
              ),
              SizedBox(
                width: 8,
              ),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text(
                    'title',
                    style: TextStyle(
                      color: Colors.black87,
                      fontWeight: FontWeight.bold,
                      fontSize: 14,
                    ),
                  ),
                  Text(
                    'subtitle',
                    style: TextStyle(
                      color: Colors.blueGrey,
                      fontWeight: FontWeight.normal,
                      fontSize: 12,
                    ),
                  ),
                ],
              ),
              Spacer(),
              IconButton(
                icon: Icon(Icons.favorite_border),
                onPressed: () {},
              ),
            ],
          ),
        );
      },
    );
  }
Widget\u myListView(构建上下文){
返回ListView.builder(
itemBuilder:(上下文,索引){
回程卡(
孩子:排(
儿童:[
容器(
边距:所有常数边集(8.0),
子:占位符(),
宽度:48,
身高:48,
),
大小盒子(
宽度:8,
),
纵队(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“头衔”,
样式:TextStyle(
颜色:颜色。黑色87,
fontWeight:fontWeight.bold,
尺寸:14,
),
),
正文(
"副标题",,
样式:TextStyle(
颜色:颜色。蓝灰色,
fontWeight:fontWeight.normal,
尺寸:12,
),
),
],
),
垫片(),
图标按钮(
图标:图标(图标。收藏夹边框),
按下:(){},
),
],
),
);
},
);
}

编辑

要减少标题和副标题之间的间距,请使用以下代码替换标题

 title: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Text("title",style: Theme.of(context).textTheme.body2,),
                 Text("subtitle",style: Theme.of(context).textTheme.caption,),
              ],
            ),
标题:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
Text(“title”,style:Theme.of(context.textTheme.body2,),
文本(“字幕”,样式:Theme.of(context.textTheme.caption,),
],
),

一种更简单的方法是使用
列表互动程序

  Widget _myListView(BuildContext context) {
    return ListView.builder(
      itemBuilder: (context, index) {
        return Card(
          child: ListTile(
            title: Text("title"),
            subtitle: Text("subtitle"),
            leading: Container(
              width: 48, height: 48,
              child: Placeholder(), //place image here replacing the Placeholder widget
            ),
            trailing: IconButton(
              icon: Icon(Icons.favorite_border),
              onPressed: () {},
            ),
          ),
        );
      },
    );
  }
这给了我们


但是如果你想要你的代码,那么它就在这里

  Widget _myListView(BuildContext context) {
    return ListView.builder(
      itemBuilder: (context, index) {
        return Card(
          child: Row(
            children: <Widget>[
              Container(
                margin: const EdgeInsets.all(8.0),
                child: Placeholder(),
                width: 48,
                height: 48,
              ),
              SizedBox(
                width: 8,
              ),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text(
                    'title',
                    style: TextStyle(
                      color: Colors.black87,
                      fontWeight: FontWeight.bold,
                      fontSize: 14,
                    ),
                  ),
                  Text(
                    'subtitle',
                    style: TextStyle(
                      color: Colors.blueGrey,
                      fontWeight: FontWeight.normal,
                      fontSize: 12,
                    ),
                  ),
                ],
              ),
              Spacer(),
              IconButton(
                icon: Icon(Icons.favorite_border),
                onPressed: () {},
              ),
            ],
          ),
        );
      },
    );
  }
Widget\u myListView(构建上下文){
返回ListView.builder(
itemBuilder:(上下文,索引){
回程卡(
孩子:排(
儿童:[
容器(
边距:所有常数边集(8.0),
子:占位符(),
宽度:48,
身高:48,
),
大小盒子(
宽度:8,
),
纵队(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“头衔”,
样式:TextStyle(
颜色:颜色。黑色87,
fontWeight:fontWeight.bold,
尺寸:14,
),
),
正文(
"副标题",,
样式:TextStyle(
颜色:颜色。蓝灰色,
fontWeight:fontWeight.normal,
尺寸:12,
),
),
],
),
垫片(),
图标按钮(
图标:图标(图标。收藏夹边框),
按下:(){},
),
],
),
);
},
);
}

编辑

要减少标题和副标题之间的间距,请使用以下代码替换标题

 title: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                Text("title",style: Theme.of(context).textTheme.body2,),
                 Text("subtitle",style: Theme.of(context).textTheme.caption,),
              ],
            ),
标题:列(
crossAxisAlignment:CrossAxisA