카테고리 없음

19일차 과제

신승호. 2023. 2. 25. 00:42

Hero 위젯 사용하여 아래의 결과물을 제작하세요.

예제

main.dart

import 'package:assigment19/mainpage.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: MainPage());
  }
}

mainpage.dart

import 'package:assigment19/secondpage.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';

class MainPage extends StatefulWidget {
  const MainPage({super.key});

  @override
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  var dio = Dio();
  var url = 'https://sfacassignment-default-rtdb.firebaseio.com/.json';

  Future getData() async {
    var res = await dio.get(url);
    return res.data['body'];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('19일차 과제')),
      body: FutureBuilder(
          future: getData(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return Padding(
                padding: const EdgeInsets.all(16),
                child: ListView.builder(
                    itemCount: snapshot.data!.length,
                    itemBuilder: ((context, index) {
                      return Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: Row(
                          children: [
                            GestureDetector(
                                child: Hero(
                                  tag: 'cachedimage',
                                  child: CachedNetworkImage(
                                    fit: BoxFit.fill,
                                    width: 80,
                                    height: 80,
                                    imageUrl: (snapshot.data?[index]['url']),
                                  ),
                                ),
                                onTap: () {
                                  Navigator.push(
                                      context,
                                      MaterialPageRoute(
                                          builder: (context) => HeroPage(
                                                cachedimage: (snapshot
                                                    .data![index]['url']),
                                              )));
                                }),
                            SizedBox(
                              width: 10,
                            ),
                            Text(
                              snapshot.data![index]['msg'],
                              style: TextStyle(
                                  fontWeight: FontWeight.bold, fontSize: 16),
                            ),
                          ],
                        ),
                      );
                    })),
              );
            }
            return CircularProgressIndicator();
          }),
    );
  }
}
CachedNetworkImage는 이미지를 계속보여주기 위해 사용하였다

 

 
 
secondpage.dart
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';

class HeroPage extends StatelessWidget {
  const HeroPage({super.key, required this.cachedimage});
  final String cachedimage;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Second Page')),
      body: Hero(
        tag: 'cachedhero',
        child: Center(
          child: CachedNetworkImage(
            imageUrl: cachedimage,
          ),
        ),
      ),
    );
  }
}

음 이게 왜 작동되는지 모르겠다..

분명

라는 에러가 뜨는데 동작은 된다;;

Android Emulator - Pixel_6_Pro_API_27_5554 2023-02-25 00-37-36.mp4
7.28MB