質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

303閲覧

Flutterでの値の受け渡しについて

ituking

総合スコア80

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2023/06/04 12:10

編集2023/06/04 13:43

実現したいこと

  • Flutterで画像をタップした際に、拡大画像が表示されるプログラムを書いており、すでに外側は構築できたが、外側に関しては、もうだいぶできているので中身の部分に関しての実装のイメージが湧かないのでアドバイスいただければと思っています。

前提

現在、Flutterでアプリを趣味で開発しており、投稿された画像をタップすると拡大画像として画面に表示されるというもの(Twitterみたいなやつ)を作っていて外側はすでに作り終えた状況です。
Flutterでのデータ、値の受け渡しについて以下のページがヒットし、それに準ずる形でこれから値の受け渡しに関して書いていこうと思っています。ですが、まだまだ経験が浅いこともありどのような形で書いていけば良いかよく分かり切っていない状況です。実装のイメージも湧いていない状況なのでアドバイスいただきたいです。長くなるので呼び出し元のコードはコメント欄に記載します。

発生している問題・エラーメッセージ

該当のソースコード

image_zoom_page.dart

1import 'package:chat_app/pages/home_page.dart'; 2import 'package:flutter/material.dart'; 3 4class ImageZoomPage extends StatefulWidget { 5 const ImageZoomPage({super.key}); 6 7 @override 8 State<ImageZoomPage> createState() => _ImageZoomPageState(); 9} 10 11class _ImageZoomPageState extends State<ImageZoomPage> { 12 @override 13 Widget build(BuildContext context) { 14 return Scaffold( 15 backgroundColor: Colors.black, 16 appBar: AppBar( 17 backgroundColor: Colors.black, 18 leading: Container( 19 decoration: const BoxDecoration( 20 shape: BoxShape.circle, 21 ), 22 child: CircleAvatar( 23 backgroundColor: Colors.transparent, 24 child: IconButton( 25 icon: const Icon(Icons.clear), 26 onPressed: () { 27 Navigator.pop( 28 context, 29 MaterialPageRoute( 30 builder: (context) => const HomePage(), 31 ), 32 ); 33 }, 34 ), 35 ), 36 ), 37 ), 38 body: Column( 39 children: const [ 40 Expanded( 41 child: Align( 42 alignment: Alignment.topCenter, 43 child: Image( 44 image: NetworkImage( 45 "https://images.unsplash.com/photo-1472396961693-142e6e269027?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxNTgwfDB8MXxzZWFyY2h8Mjl8fE5hdHVyZXxlbnwwfHx8fDE2NzgwODY0NTY&ixlib=rb-4.0.3&q=80&w=400", 46 ), 47 ), 48 ), 49 ), 50 ], 51 ), 52 ); 53 } 54} 55

試したこと

Flutterでの値の受け渡し方法、データそのままに値を次の画面に引き継ぐ方法についてググったところ、以下のページにヒット。

補足情報(FW/ツールのバージョンなど)

https://zenn.dev/kboy/books/ca6a9c93fd23f3/viewer/2ae915

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ituking

2023/06/04 12:10

```home_page.dart import 'package:chat_app/firestore/account_firestore.dart'; import 'package:chat_app/firestore/post_firestore.dart'; import 'package:chat_app/main.dart'; import 'package:chat_app/model/account.dart'; import 'package:chat_app/model/post.dart'; import 'package:chat_app/pages/image_zoom_page.dart'; import 'package:chat_app/pages/post_comment_page.dart'; import 'package:chat_app/pages/post_page.dart'; import 'package:chat_app/utils/like_button.dart'; import 'package:chat_app/utils/share_button.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { double padValue = 0; @override Widget build(BuildContext context) { return Scaffold( body: StreamBuilder<QuerySnapshot>( stream: PostFirestore.posts.snapshots(), builder: (context, postSnapshot) { if (postSnapshot.hasData) { List<String> postAccountIds = []; for (var doc in postSnapshot.data!.docs) { Map<String, dynamic> data = doc.data() as Map<String, dynamic>; if (!postAccountIds.contains(data['post_account_id'])) { postAccountIds.add(data['post_account_id']); } } return FutureBuilder<Map<String, Account>?>( future: AccountFirestore.getPostUserMap(postAccountIds), builder: (context, userSnapshot) { if (userSnapshot.hasData && userSnapshot.connectionState == ConnectionState.done) { return ListView.builder( itemCount: postSnapshot.data!.docs.length, itemBuilder: (context, index) { Map<String, dynamic> data = postSnapshot.data!.docs[index].data() as Map<String, dynamic>; Post post = Post( id: postSnapshot.data!.docs[index].id, imagePath: data['image_path'], content: data['content'], postAccountId: data['post_account_id'], postTime: data['post_time'], ); if (kDebugMode) { print(post.imagePath); } if (kDebugMode) { print(post.content); } if (kDebugMode) { print(post.postTime); } Account postAccount = userSnapshot.data![post.postAccountId]!; return Card( child: SizedBox( height: MediaQuery.of(context).size.height * 0.75, child: Column( children: [ ListTile( leading: const CircleAvatar( backgroundImage: NetworkImage( "https://images.unsplash.com/photo-1472396961693-142e6e269027?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxNTgwfDB8MXxzZWFyY2h8Mjl8fE5hdHVyZXxlbnwwfHx8fDE2NzgwODY0NTY&ixlib=rb-4.0.3&q=80&w=400", ), ), title: Text( postAccount.name, style: const TextStyle( fontWeight: FontWeight.bold, ), ), subtitle: Text( post.postTime == null ? "" : DateFormat('yyyy-MM-dd-Hm').format( post.postTime!.toDate(), ), style: const TextStyle( fontWeight: FontWeight.normal, ), ), ), Expanded( child: post.imagePath != null ? GestureDetector( onTap: () { Navigator.push( context, PageRouteBuilder( pageBuilder: ( context, animation, secondaryAnimation, ) => const ImageZoomPage(), transitionsBuilder: ( context, animation, secondaryAnimation, child, ) { return const FadeUpwardsPageTransitionsBuilder() .buildTransitions( MaterialPageRoute( builder: (context) => const ImageZoomPage(), ), context, animation, secondaryAnimation, child, ); }, ), ); }, child: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(24.0), image: DecorationImage( image: NetworkImage( post.imagePath!), fit: BoxFit.cover, ), ), ), ) : Container( height: MediaQuery.of(context) .size .height * 0.3, width: MediaQuery.of(context) .size .width * 0.9, decoration: BoxDecoration( borderRadius: BorderRadius.circular(24.0), color: Colors.grey, ), child: const Icon( Icons.image, color: Colors.white, size: 64.0, ), ), ), Padding( padding: const EdgeInsets.symmetric( horizontal: 8.0, vertical: 25.0, ), child: Container( alignment: Alignment.centerLeft, width: double.infinity, child: Text( post.content, style: const TextStyle( fontSize: 16.0, ), ), ), ), const SizedBox( height: 14.0, ), Row( mainAxisAlignment: MainAxisAlign
guest

回答1

0

ベストアンサー

こういうの?

投稿2023/06/05 00:40

ta.fu

総合スコア1667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ituking

2023/06/05 06:39

やはり値の受け渡しを行うのですね。自分の考えていたことと一緒だったので、開発に自信がつきました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問