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

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

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

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

Dart

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

Q&A

解決済

1回答

4383閲覧

flutter ListTileで大量の画面遷移をしたい

otai0811

総合スコア17

Flutter

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

Dart

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

0グッド

0クリップ

投稿2020/08/07 07:38

編集2020/08/07 07:44

FlutterのListTileを使った画面遷移について質問があります。

作りたいもの:
item0~99までの名前がついたリストを作り、各ボタンを押したら
this page is item$i

と表示されるようなプログラムを作りたいです。
すなわち、item25と書いてあるListTileを押したら、this page is item25 と表示されるようにしたいです。
しかし、画面遷移のところで問題が生じています。
画面遷移先を100個も予め登録してNavigator.pushをすると動作はすると思うのですが、あまり現実的ではないと思います。
大量の画面遷移が必要なときに、画面遷移を自動化してくれるようなListで言うListview.builderのような物はどのように実装すればよろしいでしょうか?
以下に画面遷移前までのコードを記載します。
超初心者であるので、トンチンカンなことを言っていたら申し訳ありません。
ご回答のほどよろしくお願いいたします。

import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; void main() { runApp(MyApp( items: List<String>.generate(100, (i) => "Item $i"), )); } class MyApp extends StatelessWidget { final List<String> items; MyApp({Key key, @required this.items}) : super(key: key); @override Widget build(BuildContext context) { final title = 'Long List'; return MaterialApp( title: title, home: Scaffold( appBar: AppBar( title: Text(title), ), body: ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return ListTile( title: Text('${items[index]}'), ); }, ), ), ); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

Navigator.pushの際にindexを引数にして渡し、遷移先でコンストラクタで受け取ります。

Dart

1import 'package:flutter/foundation.dart'; 2import 'package:flutter/material.dart'; 3 4void main() { 5 runApp(MyApp( 6 items: List<String>.generate(100, (i) => "Item $i"), 7 )); 8} 9 10class MyApp extends StatelessWidget { 11 final List<String> items; 12 13 MyApp({Key key, this.items}) : super(key: key); 14 15 16 Widget build(BuildContext context) { 17 final title = 'Long List'; 18 19 return MaterialApp( 20 title: title, 21 home: Scaffold( 22 appBar: AppBar( 23 title: Text(title), 24 ), 25 body: ListView.builder( 26 itemCount: items.length, 27 itemBuilder: (context, index) { 28 return ListTile( 29 title: Text(items[index]), 30 onTap: () { 31 Navigator.push( 32 context, 33 MaterialPageRoute(builder: (context) => ItemDetail(index.toString())), 34 ); 35 }, 36 ); 37 }, 38 ), 39 ), 40 ); 41 } 42} 43 44class ItemDetail extends StatelessWidget { 45 final String index; 46 ItemDetail(this.index); 47 48 49 Widget build(BuildContext context) { 50 return Scaffold( 51 appBar: AppBar( 52 title: Text("item detail"), 53 ), 54 body: Center( 55 child: Text("this page is item$index"), 56 ), 57 ); 58 } 59}

投稿2020/08/11 04:50

tepci

総合スコア419

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

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

otai0811

2020/08/11 16:24

ご回答いただきありがとうございます。なるほど、ページを大量に作る必要はなくて、コンストラクタを使って画面遷移先の表示を変えれば良いのですね。わかりやすい説明ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問