我正在尝试有一列顶部和底部角为圆形的列表图块。有些瓷砖在悬停时会改变颜色,而另一些则不会。因此,我尝试了两件事:
- 创建一个带圆角的容器,在里面添加一个带有我的 listTiles 的 Column。
- 使用我的列表图块创建一列,并为第一个和最后一个元素添加特定的圆角计数器。
- 为包含所有元素的容器着色。那么问题是listtiles的悬停颜色被绘制在容器的颜色之下。
遗憾的是,在这两种情况下,列表图块的背景颜色都从圆形容器中溢出,如下图所示:
这是第二次尝试的示例代码:
import 'package:flutter/material.dart';
const Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(
scaffoldBackgroundColor: darkBlue,
),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatelessWidget {
final children = List<Widget>.generate(
5,
(i) => ListTile(
tileColor: Colors.green, hoverColor: Colors.red, title: Text('$i')));
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: List.generate(
children.length,
(index) {
if (index == 0 && index == children.length - 1) {
return Ink(
// clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
border: Border.all(
color: Colors.red,
),
borderRadius: BorderRadius.circular(20),
color: Colors.blue,
),
child: children[index],
);
}
if (index == 0) {
return Container(
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
border: Border.all(
color: Colors.red,
),
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20)),
color: Colors.blue,
),
child: children[index],
);
} else if (index == children.length - 1) {
return Container(
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
border: Border.all(
color: Colors.red,
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(20),
bottomRight: Radius.circular(20)),
color: Colors.blue,
),
child: children[index],
);
}
return children[index];
},
),
);
}
}
children
listile 和其他元素的列表在哪里。
强制元素如何children
尊重父容器设置的边界限制?