flutter - 如何显示像弹出窗口这样的小部件
问题描述
目前,我有一个网格视图。当我点击它时,我使用英雄小部件导航到另一个页面。
在该页面上,我只有一个显示有关该网格图块信息的容器。
我想要的是让该容器位于网格视图之上,而不是成为不同的页面。
解决方案
我发布了我最终做的事情,因为它有效。
@Nonstapp 和 @Parth 建议的内容除了 Hero 转换之外有效,因为它仅适用于 PageRoutes。
因此,我找到了另一种使用 PageRoute 显示类似弹出窗口的方法。
我正在显示的信息小部件:
return Padding(
padding: EdgeInsets.fromLTRB(
MediaQuery.of(context).size.width / 8,
MediaQuery.of(context).size.height / 4,
MediaQuery.of(context).size.width / 8,
0),
child: Material(
color: Colors.transparent,
child: ...
padding 显然是用于定位,Material 小部件是为其赋予 Material 风格并启用像 IconButton 这样的小部件。给 Material 小部件一个透明的颜色。
这就是我所说的:
void seeDetails(BuildContext context, Book book) {
Navigator.push(
context,
PageRouteBuilder(
fullscreenDialog: true,
opaque: false,
pageBuilder: (_, __, ___) => ChangeNotifierProvider.value(
value: book,
child: DetailCard(),
),
),
);
}
我使用 PageRouter 显示全屏对话框,但由于我的设置,只有信息卡可见。
缺点是我无法启用barrierDismissible,因为我在另一条路线上。
这是我的结果:
然而,真正的解决方案是上面@pskink 建议的。它需要更多的设置和调整,而且我遇到了 Providers 的问题。这是您如何实现它的方法
推荐阅读
- java - 使用 Spring Security 保护应用程序不起作用
- android - RecyclerView in a Fragment not loading
- python - How Can I Detect If There are Secondary Objects in an Image
- javascript - The Console Log Display issue
- angular - Mapbox GeoJSON line with Angular
- javascript - 努力理解这个多层 for 循环是如何工作的
- replace - 用大 UTF8 文件中间的单字节代码点(例如空格)替换多字节字符
- python - 如何在地图上画圆圈?
- java - Google FooBar 挑战显示 Blacklisted_Code 错误
- ansible - 无论如何要通过 when 子句忽略播放和/或其任务输出?