在点击颤动时显示全屏图像(英雄)

Posted

技术标签:

【中文标题】在点击颤动时显示全屏图像(英雄)【英文标题】:Show full screen image on tap flutter (Hero) 【发布时间】:2021-09-18 16:41:30 【问题描述】:

我有使用network to local file显示的图像

Hero(
                           tag: "customWidget",
                           child: Container(
                             width: context.screenWidth / 2,
                             height: context.screenHeight / 4,
                             child: NetworkToLocal(
                               mediaURL: element.payload.uri,
                               mediaType: 'image',
                             ),
                           ),
                         ),

我想添加功能,在点击图像后,我可以以全屏模式显示此图像。如何使用 hero 小部件?

在上面的截图中,添加时高亮元素发生错误

                       child: NetworkToLocal(
                            mediaURL: element.payload.uri,
                            mediaType: 'image',
                          ),

【问题讨论】:

【参考方案1】:

你使用英雄动画

import 'package:flutter/material.dart';

void main() => runApp(HeroApp());

class HeroApp extends StatelessWidget 
@override
Widget build(BuildContext context) 
return MaterialApp(
  title: 'Transition Demo',
  home: MainScreen(),
 );



class MainScreen extends StatelessWidget 
@override
Widget build(BuildContext context) 
return Scaffold(
  appBar: AppBar(
    title: Text('Main Screen'),
  ),
  body: GestureDetector(
    onTap: () 
      Navigator.push(context, MaterialPageRoute(builder: (_) 
        return DetailScreen();
      ));
    ,
    child: Hero(
      tag: 'imageHero',
      child: Image.network(
        'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/1200px-Image_created_with_a_mobile_phone.png',
      ),
    ),
  ),
);



class DetailScreen extends StatelessWidget 
@override
Widget build(BuildContext context) 
return Scaffold(
  body: GestureDetector(
    onTap: () 
      Navigator.pop(context);
    ,
    child: Center(
      child: Hero(
        tag: 'imageHero',
        child: Image.network(
          'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/1200px-Image_created_with_a_mobile_phone.png',
        ),
      ),
    ),
  ),
);


【讨论】:

您忘记在英雄小部件上添加一个键!)另外,请扩展您的答案,i.o 两个屏幕上的英雄动画。 @RavindraS.Patil 我试过上面的例子,它不适合我的情况。我无法在任何其他类中使用 URL。“mediaURL: element.payload.uri”,在上面的示例中,他们使用了网络图像小部件。 我想你不明白,它是如何工作的。您无法在屏幕之间共享已完成的小部件。英雄动画仅在具有在屏幕之间切换的标签的小部件上添加动画。所以一个屏幕上的英雄小部件不是另一个屏幕上的小部件! 如果你有一些缓存的图像,我认为从缓存中获取它并立即显示它对你来说不是问题。 尝试将元素声明为 var element ;或 var element = " ";

以上是关于在点击颤动时显示全屏图像(英雄)的主要内容,如果未能解决你的问题,请参考以下文章

在颤动中英雄动画之后开始动画

《APEX英雄》S8赛季上线,Steam国区到底怎么下载?

怎么把英雄联盟改成女号 英雄联盟中怎么修改你的性别

想用 css 或 jquery 对图像进行滚动效果

英雄联盟WeGame版关闭开机自动启动 WeGame版关闭开机自动启动的方法

在 SpriteKit 中,如何制作我的英雄精灵的裁剪(带有透明段)图像?