При нажатии на изображение, которое я хочу поместить в контейнер другой страницы в flutter, как я могу этого добиться?

#flutter #flutter-layout #flutter-layoutbuilder

Вопрос:

У меня есть домашняя страница для веб-сайта электронной коммерции, и я показываю каждый продукт в формате изображения при нажатии на каждый продукт(изображение). Я хочу, чтобы это изображение было заполнено на следующем экране, который представляет собой информационный экран продукта, который также содержит продукт (изображение) и некоторые другие связанные с ним материалы. Я хочу создать информационную страницу только один раз и просто изменить изображение продукта и другие материалы соответственно в соответствии с изображением (продуктом), на которое нажимается. Как я могу этого достичь Я новичок в flutter и не знаю этой логики, я столкнулся с valuelistenablebuilder, но не понимаю, как я могу этого достичь, пожалуйста, помогите. Спасибо,

Ответ №1:

По умолчанию Flutter предоставляет эту поддержку с помощью Hero виджета. Найдите фрагменты кода ниже.

 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(
        child: Hero(
          tag: 'imageHero',
          child: Image.network(
            'https://picsum.photos/250?image=9',
          ),
        ),
        onTap: () {
          Navigator.push(context, MaterialPageRoute(builder: (_) {
            return DetailScreen();
          }));
        },
      ),
    );
  }
}

class DetailScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GestureDetector(
        child: Center(
          child: Hero(
            tag: 'imageHero',
            child: Image.network(
              'https://picsum.photos/250?image=9',
            ),
          ),
        ),
        onTap: () {
          Navigator.pop(context);
        },
      ),
    );
  }
}
 

Убедитесь Hero.tag , что свойство должно сохраняться одинаковым для обеих страниц.

Для получения более подробной информации перейдите по ссылке