用到hero 动画,需要tag来指定点击对象。

    1. import 'package:flutter/material.dart';
    2. void main() => runApp(HeroApp());
    3. class HeroApp extends StatelessWidget {
    4. @override
    5. Widget build(BuildContext context) {
    6. return MaterialApp(
    7. title: 'Transition Demo',
    8. home: MainScreen(),
    9. );
    10. }
    11. }
    12. class MainScreen extends StatelessWidget {
    13. @override
    14. Widget build(BuildContext context) {
    15. return Scaffold(
    16. appBar: AppBar(
    17. title: Text('Main Screen'),
    18. ),
    19. body: GestureDetector(
    20. child: Hero(
    21. tag: 'imageHero',
    22. child: Image.network(
    23. 'https://picsum.photos/250?image=9',
    24. ),
    25. ),
    26. onTap: () {
    27. Navigator.push(context, MaterialPageRoute(builder: (_) {
    28. return DetailScreen();
    29. }));
    30. },
    31. ),
    32. );
    33. }
    34. }
    35. class DetailScreen extends StatelessWidget {
    36. @override
    37. Widget build(BuildContext context) {
    38. return Scaffold(
    39. body: GestureDetector(
    40. child: Center(
    41. child: Hero(
    42. tag: 'imageHero',
    43. child: Image.network(
    44. 'https://picsum.photos/250?image=9',
    45. ),
    46. ),
    47. ),
    48. onTap: () {
    49. Navigator.pop(context);
    50. },
    51. ),
    52. );
    53. }
    54. }

    来源:https://flutter.dev/docs/cookbook/navigation/hero-animations