firebase - Flutter - 来自 Firebase 的英雄小部件子图像 url
问题描述
我正在尝试创建一个具有子 Image.network() 的 Hero 小部件
Hero(
tag: 'headerView',
transitionOnUserGestures: true,
child: Image.network(
headerPhoto,
fit: BoxFit.cover,
),
)
图片 url -headerPhoto- 是从 Firestore 异步获取的,因此,我假设我必须将这个 Hero 小部件放在 FutureBuilder 中。
FutureBuilder(
builder: (context, snapshot) {
...
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData) {
String headerPhoto = snapshot.data['headerPhoto'];
return Scaffold(
body:GestureDetector(
onTap: () {
_showPage('headerView', headerPhoto);
},
child: Hero(
tag: 'headerView',
transitionOnUserGestures: true,
child: Image.network(
headerPhoto,
width: MediaQuery.of(context).size.width,
fit: BoxFit.cover,
),
),
),
)
}
}
...
},
future: _fetchHeaderPhoto(userData),
);
当我像上面一样在 FutureBuilder 中使用 Hero 小部件时,第一个动画会正常工作。但是当我从 PageView 导航回来时——其中只有 Hero 小部件——动画不起作用。另一方面,当我尝试使用带有硬编码字符串的 Hero 小部件时,例如:
Hero(
tag: 'headerView',
transitionOnUserGestures: true,
child: Image.network(
'https://picsum.photos/200/300',
fit: BoxFit.cover,
),
)
第一个动画和第二个动画都完美地工作。出现这个问题是因为我使用 FutureBuilder 吗?如果不是什么问题?
提前致谢。
解决方案
这是因为FutureBuilder
每次重建整个第一个小部件时都会获取数据。为了防止这种情况发生,请创建新函数来获取headerPhoto
和更新第一个小部件的状态。在里面调用这个函数initState
。这应该够了吧。
推荐阅读
- gradle - 如何修复错误“无法锁定 buildSrc 构建锁,因为它已被此进程锁定。” 使用 Gradle 5 和 GradleBuild 任务
- javascript - 如何在 Redux api 调用期间在组件上设置加载布尔值
- c# - 如何从我的 Login.cs 接收到 MasterPageDetail 的值?
- oracle - 保存grails域对象时如何选择oracle current_timestamp
- javascript - 单击时如何使用列表中项目的信息呈现模式
- python - 如何使用 python 中的 re.split 函数将此“#123/200$345/400%”拆分为 123/200 和 345/400 作为输出
- amazon-web-services - 使用 Amazon Rekognition 和 Kinesis 设置人脸检测和识别时出现问题
- qt - 如何使用任何额外的模块获取静态 Qt 构建。例如:错误:QT 中的未知模块:+= 串行端口
- mysql - 无论如何在sql中获得IN语句成功匹配索引?
- wordpress - 如何在flutter中格式化api wordpress日期