В моем ListTile мне нужен CircleAvatar с рамкой, поэтому у меня есть CircleAvatar внутри другого. Проблема в том, что граница не отображается. И когда я пробую свой код вне ListTile, он работает...
Код:
class TestTile extends StatelessWidget {
const TestTile({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(children: const [
/***** DOES NOT WORK *****/
Card(
child: SizedBox(
width: 200,
height: 100,
child: ListTile(
leading: CircleAvatar(
radius: 32,
backgroundColor: Colors.blue,
child: CircleAvatar(
radius: 30,
backgroundColor: Colors.red,
)),
title: Text("test"),
))),
/***** WORKS *****/
CircleAvatar(
radius: 32,
backgroundColor: Colors.blue,
child: CircleAvatar(
radius: 30,
backgroundColor: Colors.red,
))
]));
}
}
Вместо того, чтобы помещать два CircleAvatar
друг в друга, чтобы получить границу, используйте Container
со свойством decoration
, например:
Card(
child: SizedBox(
width: 200,
height: 100,
child: ListTile(
leading: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.blue, width: 2)),
child: CircleAvatar(
radius: 30,
backgroundColor: Colors.red,
),
),
title: Text("test"),
))),
Это потому, что ListTile
имеет фиксированную высоту. CircleAvatar
просто не вписываются в них с вашими желаемыми радиусами, поэтому они оба уменьшаются до максимального размера, который подходит. Если вы попробуете использовать меньшие радиусы, например, 20 и 18, вы увидите, что это работает.
Чтобы увеличить высоту ListTile
, вы также можете попробовать установить visualDensity
, например, так, тогда это может подойти
child: ListTile(
visualDensity: VisualDensity(vertical: 2),