flutter - PageView 上 Stack 外的 BackdropFilter 覆盖
问题描述
滚动时看起来像 PageView 覆盖在 Page 外的 BackdropFilter。我希望它仅适用于父小部件。如何防止这种行为?
代码示例:
class PageViewScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView.builder(
itemCount: 6,
itemBuilder: (context, index) => Page(text: 'Page $index'),
),
);
}
}
class Page extends StatelessWidget {
final String text;
const Page({Key key, this.text}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
Text(_getRandomString(6000)),
BackdropFilter(
filter: ImageFilter.blur(sigmaX: 4, sigmaY: 4),
child: Container(color: Colors.black.withOpacity(0.1)),
),
Center(
child: Text(
text,
style: Theme.of(context).textTheme.headline2,
),
),
],
);
}
}
Codepen 工作示例:https ://codepen.io/ioputin/pen/jOymamJ
解决方案
正如文件所说:
过滤器将应用于其父控件或祖先控件剪辑中的所有区域。如果没有剪辑,过滤器将应用于全屏。
所以我不得不用 ClipRect 包装 BackdropFilter
ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 4, sigmaY: 4),
child: Container(color: Colors.black.withOpacity(0.1)),
),
),
推荐阅读
- python - 包含默认 PyQt5 QWidget 的 NamedTuple(或数据类)
- python - 尽管卸载了 NumPy,但导入 NumPy 不会产生 ModuleNotFoundError。为什么?
- android - 如何在 Android Studio (Kotlin) 中的流连接之前放置音频
- node.js - 在同一台服务器上运行 Mongo Node Angular
- python - 如何在标题中设置 django 登录?
- python-3.x - 气流 InitDB 问题
- javascript - 如何使用 for 循环变量作为循环的索引?(JS)
- dataframe - 如何将 Pyspark Row datetime.datetime 数据帧转换为列名 DateType 与 DD-MM-YYYY 中的时间戳
- python-3.x - 代码中带有防刮保护的页面?
- c# - 如何使用 CsvHelper 控制浮点数的格式