Try the following code
ListTile(
leading: const SizedBox(
height: double.infinity,
child: Icon(Icons.location_on_rounded)),
tileColor: DesignColor.grey,
title: "Title 1".textMediumRegular(),
subtitle: "Title 2".textSmall(),
trailing: const SizedBox(
height: double.infinity,
child: Icon(Icons.edit_rounded)),
)
Output:

Caution Doesn't work for all cases !!!
In Flutter's ListTile
, the leading
and trailing
doesn't span accross the full height of the ListTile
when subtitle
is used. Hence create your own Widget using row.
Detailed Comparision between both the Widgets:

Use My Custom Code:
class CustomListTile extends StatelessWidget {
Widget? trailingWidget;
late CrossAxisAlignment crossAxisAlignment;
late TextStyle titleStyle;
late TextStyle subtitleStyle;
String title;
String? subtitle;
Widget? leadingWidget;
CustomListTile(
{super.key,
this.trailingWidget,
this.crossAxisAlignment = CrossAxisAlignment.center,
this.titleStyle =
const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
this.subtitleStyle =
const TextStyle(fontSize: 14, fontWeight: FontWeight.w400),
required this.title,
this.subtitle,
this.leadingWidget});
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: crossAxisAlignment,
children: [
leadingWidget ?? Container(),
const SizedBox(
width: 16,
),
Expanded(
child: Column(
children: [
Text(
title,
style: titleStyle,
),
Text(subtitle ?? "", style: subtitleStyle),
],
),
),
const SizedBox(width: 16),
trailingWidget ?? Container()
],
);
}
}
Extra:
Code of the image for you to work around
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
color: Colors.blue,
child: ListTile(
minLeadingWidth: 0,
isThreeLine: true,
minVerticalPadding: 0,
contentPadding: EdgeInsets.zero,
leading: Container(
color: Colors.orange,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Icon(
Icons.home,
),
],
),
),
title: Container(
color: Colors.pink,
child: const Text(
"This is very long long long long title of the list view"),
),
subtitle: Container(
color: Colors.yellow,
child: const Text(
"This is very long long long long subtitle of the list view . This is very long long long long subtitle of the list view .This is very long long long long subtitle of the list view "),
),
trailing: Container(
color: Colors.orange,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
Icon(
Icons.home,
),
],
),
),
),
),
Container(
color: Colors.blue,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
color: Colors.orange,
child: const Icon(Icons.home),
),
const SizedBox(
width: 16,
),
Expanded(
child: Column(
children: [
Container(
color: Colors.pink,
child: const Text(
"This is very long long long long title of the list view ",
style: TextStyle(
fontSize: 16, fontWeight: FontWeight.w600),
),
),
Container(
color: Colors.yellow,
child: const Text(
"This is very long long long long subtitle of the list view . This is very long long long long subtitle of the list view .This is very long long long long subtitle of the list view ",
style: TextStyle(
fontSize: 14, fontWeight: FontWeight.w400),
),
),
],
),
),
const SizedBox(width: 16),
Container(
color: Colors.orange,
child: const Icon(Icons.home),
),
],
),
)
],
),
));