🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flutter

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

Dart

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

Q&A

解決済

2回答

2539閲覧

Flutter 画面遷移ができない

_kei

総合スコア26

Flutter

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

Dart

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

0グッド

0クリップ

投稿2021/03/02 10:24

前提・実現したいこと

Flutter初心者です。画面遷移を実現したいです。「Navigate with named routes」を参考にしましたが、実装することができませんでした。どこがおかしいのか、どのように修正したらよいのか教えていただきたいです。

画面のRaisedButtonを押し、PlayScrrenに遷移することを実現したいです。

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

エラーメッセージは出力されておらず、問題の原因を追求することが出来ませんでした。

該当のソースコード

main.dart(遷移前画面)

dart

1import 'package:flutter/cupertino.dart'; 2import 'package:flutter/material.dart'; 3import 'package:flutter_app_2/play_screen.dart'; 4 5void main() { 6 runApp(MyApp()); 7} 8 9class MyApp extends StatelessWidget { 10 11 Widget build(BuildContext context) { 12 return MaterialApp( 13 title: "Image Demo", 14 theme: ThemeData(fontFamily: 'Krona'), 15 initialRoute: '/', 16 routes: { 17 '/play': (context) => PlayScreen(), 18 }, 19中略 20 21 SizedBox( 22 width: 330, 23 child: RaisedButton( 24 child: Padding( 25 padding: EdgeInsets.only(top: 15, bottom: 15), 26 child: Text('PLAY!' 27 style: TextStyle( 28 fontSize: 25, 29 fontWeight: FontWeight.w400, 30 fontFamily: 'Krona' 31 color: Colors.white)), 32 ), 33 color: Color.fromRGBO(220, 20, 60, 0.2), 34 shape: RoundedRectangleBorder( 35 side: BorderSide( 36 color: Color.fromRGBO(220, 20, 60, 0.6), width: 2), 37 ), 38 onPressed: () { 39 Navigator.pushNamed(context, '/play'); 40 }, 41 ), 42 ),

play_screen.dart(遷移後画面)

dart

1import 'package:flutter/material.dart'; 2 3class PlayScreen extends StatelessWidget { 4 5 Widget build(BuildContext context) { 6 return Scaffold( 7 body: Center( 8 child: ElevatedButton( 9 onPressed: () { 10 Navigator.pop(context); 11 }, 12 child: Text('Go back!'), 13 ), 14 ), 15 ); 16 } 17} 18

試したこと

Navigate to a new screen and back」,「Navigate with named routes」を参考にし、2つの手法でそれぞれ実装を試みました。しかし、どちらも実現することはできまんでした。

補足説明

・両ファイルともにlibフォルダに作成されています。

・main.dartではStack を利用していますが、これは画面遷移が実現できていないことに関係ないと思うので省いています。

・Android StudioでのFlutter開発の際、エラーメッセージが出力されておらず、問題の原因が分からない場合、あなただったらどのようにするかも可能であれば、教えていただきたいです。

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

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

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

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

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

guest

回答2

0

main.dart(遷移前画面)の(中略)のところが気になるのですが、
SizedBox()がもしかしてhomeプロパティの中に入ってたりしませんか?

MaterialApp()の中で、initialRouteプロパティとhomeプロパティは同時に使用することができないので注意が必要です。
もしかしたらそれが原因かもしれません。

自分が作成してみた範囲では画面遷移に問題なかったので、そちらも貼っておきます。

main.dart

dart

1import 'package:flutter/material.dart'; 2import 'package:transition_test_app/home_screen.dart'; 3import 'package:transition_test_app/play_screen.dart'; 4 5void main() { 6 runApp(MyApp()); 7} 8 9class MyApp extends StatelessWidget { 10 11 Widget build(BuildContext context) { 12 return MaterialApp( 13 title: "Image Demo", 14 theme: ThemeData(fontFamily: 'Krona'), 15 initialRoute: '/', 16 routes: { 17 '/': (context) => HomeScreen(), 18 '/play': (context) => PlayScreen(), 19 }, 20 ); 21 } 22}

home_screen.dart

dart

1import 'package:flutter/material.dart'; 2 3class HomeScreen extends StatelessWidget { 4 5 6 Widget build(BuildContext context) { 7 return Scaffold( 8 appBar: AppBar( 9 title: Text("遷移前"), 10 backgroundColor: Colors.purple, 11 ), 12 body: Center( 13 child: Column( 14 children: [ 15 RaisedButton( 16 color: Colors.purple, 17 textColor: Colors.white, 18 child: Text("Go To PlayScreen"), 19 onPressed: () { 20 Navigator.pushNamed(context, "/play"); 21 }, 22 ) 23 ], 24 ), 25 ), 26 ); 27 } 28}

play_screen.dart

dart

1import 'package:flutter/material.dart'; 2 3class PlayScreen extends StatelessWidget { 4 5 Widget build(BuildContext context) { 6 return Scaffold( 7 appBar: AppBar( 8 title: Text("遷移後"), 9 backgroundColor: Colors.blue, 10 ), 11 body: Center( 12 child: Column( 13 children: [ 14 RaisedButton( 15 color: Colors.blue, 16 textColor: Colors.white, 17 child: Text("Go To HomeScreen"), 18 onPressed: () { 19 Navigator.pop(context); 20 }, 21 ) 22 ], 23 ), 24 ), 25 ); 26 } 27}

投稿2021/03/02 12:47

Rassy

総合スコア44

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

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

_kei

2021/03/02 13:23

ご回答ありがとうございます。 ご指摘の通り、initialRouteプロパティとhomeプロパティを同時に使用していたことが原因でした。自力でなんとか解決できてよかったです。 コードも併せて載せていただきありがとうございます。 (しかし、この2つプロパティを同時に使用できないことはドキュメントに記載されていないと思うのですが。 あとこれエラーメッセージでないの不便ですよね)
guest

0

自己解決

どうやらmain.dartのMyAppクラス内のMaterialApp()にてhomeプロパティを記述していたことが原因で発生した問題だったようです。

投稿2021/03/02 12:33

_kei

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問