flutter - 如何从覆盖另一个的小部件中删除透明度?
问题描述
我正在尝试创建一个覆盖 ListView 的可扩展小部件。但是,这个小部件是透明的,我不想看到它下面的 ListView 部分。
这是问题代码
class _TestWidgetState extends State<TestWidget> {
final lvController = ScrollController();
ExpandableController exController = ExpandableController();
@override
void initState() {
// controller = new ExpandableController(initialExpanded: true);
super.initState();
}
@override
void dispose() {
super.dispose();
}
void listenScrolling() {
if (lvController.position.atEdge) {
final isTop = lvController.position.pixels < 50;
if (isTop) {
print("scrolled to top");
setState(() {
exController.toggle();
});
}
} else if (lvController.position.userScrollDirection ==
ScrollDirection.reverse &&
exController.expanded) {
setState(() {
exController.toggle();
});
}
}
@override
Widget build(BuildContext context) {
return new SafeArea(
child: ExpandableNotifier(
initialExpanded: true,
child: Container(
color: Theme.of(context).backgroundColor,
child: Scaffold(
appBar: sappBar(context),
body: Column(children: [
Expanded(
child: Stack(fit: StackFit.expand, children: [
Positioned(
top: 0,
width: MediaQuery.of(context).size.width,
child: Container(
height: 100,
width: MediaQuery.of(context).size.width,
color: Colors.white,
child: Expandable(
collapsed: Container(),
expanded: testCard(),
))),
buildList()
]))
])))));
}
Widget testCard() {
return Container(
height: 100,
width: MediaQuery.of(context).size.width,
child: Card(
child: Text(
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium."),
color: Colors.white,
));
}
Widget buildList() => ListView.builder(
shrinkWrap: true,
controller: lvController,
itemCount: 50,
itemBuilder: (context, index) => ListTile(
title: Center(
child: Text('${index + 1}', style: TextStyle(fontSize: 32)),
)));
PreferredSizeWidget sappBar(BuildContext context) {
return AppBar(backgroundColor: Theme.of(context).backgroundColor, actions: [
Builder(builder: (context) {
exController = ExpandableController.of(context, required: true)!;
lvController.addListener(listenScrolling);
return IconButton(
icon: Icon(CupertinoIcons.rectangle_compress_vertical),
onPressed: () {
setState(() {
exController.toggle();
});
});
}),
]);
}
}
这是该项目的链接
解决方案
您可以将该buildList()
方法放在小部件内,并使用该功能Stack
从其中删除颜色。Container
testCard()
Container(
color: Theme.of(context).backgroundColor,
child: Scaffold(
appBar: sappBar(context),
body: Stack(
fit: StackFit.expand,
children: [
buildList(),
Positioned(
top: 0,
width: MediaQuery.of(context).size.width,
child: Container(
height: 100,
child: Expandable(
collapsed: Container(),
expanded: testCard(),
),
),
),
],
),
),
),
结果:
推荐阅读
- r - 在闪亮的数据表excel输出中删除标题上方的“标题”行?
- python-3.x - 如何使用 python boto3 在 aws S3 中创建文件
- pandas - 将 pandas 组中的值拆分为新列
- python - 单元测试时未找到 Django Reverse
- java - Java 1.4 和 Maven 2.1.0 的 Maven 构建问题
- android - flutter build apk --debug 在没有发布密钥库的情况下无法构建调试
- sql - SQL 过滤器以查找具有不同状态的重复产品名称
- python - python中for循环的问题只得到最后一项
- vim - 从可视模式更改为插入模式时如何保持选中文本?
- c++ - 使用 libgpiod 如何即时切换请求线路的方向?