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

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

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

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

Dart

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

Q&A

解決済

2回答

761閲覧

flutter:画面遷移時の”The builder for route "/" returned null.”エラー

Inete6Q

総合スコア18

Flutter

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

Dart

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

0グッド

0クリップ

投稿2020/08/28 17:21

編集2020/08/29 02:31

前提・実現したいこと

flutter学習で画面遷移を実装しようとしています。
KboyさんのYouTube動画を見て、写経していました。
Navigate with named routesを使おうとしています。

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

The builder for route "/" returned null. Route builders must never return null. The relevant error-causing widget was: MaterialApp file:///Users/to/AndroidStudioProjects/coriander3/lib/main.dart:12:12 When the exception was thrown, this was the stack: #0 MaterialRouteTransitionMixin.buildPage.<anonymous closure> (package:flutter/src/material/page.dart:107:9) #1 MaterialRouteTransitionMixin.buildPage (package:flutter/src/material/page.dart:113:6) #2 _ModalScopeState.build.<anonymous closure> (package:flutter/src/widgets/routes.dart:826:45) #3 Builder.build (package:flutter/src/widgets/basic.dart:7118:48) #4 StatelessElement.build (package:flutter/src/widgets/framework.dart:4620:28)

該当のソースコード

dart

1 2//以下、main.dart 3import 'package:flutter/material.dart'; 4 5void main() { 6 runApp(MyApp()); 7} 8 9class MyApp extends StatelessWidget { 10 // This widget is the root of your application. 11 12 Widget build(BuildContext context) { 13 return MaterialApp( 14 title: 'Flutter Demo', 15 theme: ThemeData( 16 17 primarySwatch: Colors.blue, 18 19 ), 20 home: MyHomePage(title: 'Flutter Demo Home Page'), 21 ); 22 } 23} 24 25class MyHomePage extends StatefulWidget { 26 MyHomePage({Key key, this.title}) : super(key: key); 27 28 29 30 final String title; 31 32 33 _MyHomePageState createState() => _MyHomePageState(); 34} 35 36class _MyHomePageState extends State<MyHomePage> { 37 int _counter = 0; 38 39 void _incrementCounter() { 40 setState(() { 41 42 _counter++; 43 }); 44 } 45 46 47 Widget build(BuildContext context) { 48 49 return Scaffold( 50 appBar: AppBar( 51 52 title: Text(widget.title), 53 ), 54 body: Center( 55 56 child: RaisedButton( 57 child: Text('次へ'), 58 onPressed: (){ 59 Navigator.pushNamed(context, '/next'); 60 }, 61 ), 62 ), 63 floatingActionButton: FloatingActionButton( 64 onPressed: _incrementCounter, 65 tooltip: 'Increment', 66 child: Icon(Icons.add), 67 ), // This trailing comma makes auto-formatting nicer for build methods. 68 ); 69 } 70} 71 72 73 74//以下、next_page.dart 75import 'package:flutter/material.dart'; 76 77class NextPage extends StatelessWidget { 78 79 Widget build(BuildContext context) { 80 // TODO: implement build 81 return Scaffold( 82 appBar: AppBar( 83 84 title: Text('次の画面'), 85 ), 86 body: Container( 87 height: double.infinity, 88 color: Colors.red, 89 child: Center( 90 child: RaisedButton( 91 child: Text('戻る'), 92 onPressed: () { 93 Navigator.pop(context); 94 }, 95 ), 96 ), 97 ), 98 ); 99 } 100 101}

試したこと

home: MyHomePage(title: 'Flutter Demo Home Page'),

の記述を削除後、initialRoute以下を追加した際にエラーが起きました。
(その前まではエラーなく動きました。)

dart

1//以下を追加 2initialRoute: '/', 3 routes: { 4 5 '/': (context) => MyHomePage(), 6 7 '/next': (context) => NextPage(), 8 },

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

Android studio 4.0.1
Xcode 11.3.1
MacBook Air (13-inch, 2017)
MacOS Catalina 10.15.1
エミュレータ iPhone8(mobile)

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

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

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

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

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

guest

回答2

0

ベストアンサー

コードが綺麗に貼れないかったで新しく回答を作らせてもらいました.

これは,Textに指定していない変数widget.titleを入れようとしているからだと思います.
エラーをとるためには,main.dartのコードを以下のように修正してください.

//以下、main.dart import 'package:flutter/material.dart'; import './next_page.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), initialRoute: '/', routes: { '/': (context) => MyHomePage(), '/next': (context) => NextPage(), }, ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('元の画面'), ), body: Center( child: RaisedButton( child: Text('次へ'), onPressed: () { Navigator.pushNamed(context, '/next'); }, ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. ); } }

ご確認お願いいたします.

投稿2020/09/01 04:30

okmt1230z

総合スコア17

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

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

Inete6Q

2020/09/01 15:03

ありがとうございます!!!助かりました。解決できました! ちなみになんですが、このエラー文の読み方がさっぱりわからないのですが、この文章でどの部分でエラーが発生しているとかってわかるんでしょうか? お手隙な時でいいので回答いただけるとうれしいです。
okmt1230z

2020/09/02 00:54

よかったです.よかったです. 質問のエラーは二つあるのでまずは一つ目から説明したいと思います. The builder for route "/" returned null. ですが,これはNavigatorを使って画面遷移を行おうとしている中で,route / の遷移先が見つからなかった(null)ことが原因です. しっかりとルーティングのコードを書いてあげることで直ったはずです. 二つ目の, A non-null String must be provided to a Text widget. 'package:flutter/src/widgets/text.dart': Failed assertion: line 360 pos 10: 'data != null' ですが,これは元のコードがText widgetに渡そうとしている値を確認してみてください. title: Text(widget.title), この部分です.サンプルコードのなごりでしょうか? titleという変数に値を入れずにルーティングしているんです. もし上記のコードのままエラーを取りたかったら, routes: { '/': (context) => MyHomePage(title: '元の画面'), '/next': (context) => NextPage(), }, としてあげるべきでした. こちらでも動くのを確認してみてくださいね.
Inete6Q

2020/09/04 02:17

そうなんですね!わかりました。 丁寧なご回答ありがとうございます!
guest

0

再ビルド後も同じエラーが出ましたでしょうか?
ご確認お願いします。

投稿2020/08/30 02:32

okmt1230z

総合スコア17

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

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

Inete6Q

2020/08/30 18:25

コメントありがとうございます。 いじってしまっていたので、コピペして再度実行してみたらエラーコメントが下記に変わりました。 ════════ Exception caught by widgets library ═══════════════════════════════════════════════════════ The following assertion was thrown building MyHomePage(dirty, state: _MyHomePageState#12cca): A non-null String must be provided to a Text widget. 'package:flutter/src/widgets/text.dart': Failed assertion: line 360 pos 10: 'data != null' The relevant error-causing widget was: MyHomePage file:///Users/to/AndroidStudioProjects/coriander2/lib/main.dart:23:27 When the exception was thrown, this was the stack: #2 new Text (package:flutter/src/widgets/text.dart:360:10) #3 _MyHomePageState.build (package:coriander2/main.dart:57:16) #4 StatefulElement.build (package:flutter/src/widgets/framework.dart:4663:28) #5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4546:15) #6 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
okmt1230z

2020/09/01 04:28

これは,Textに指定していない変数widget.titleを入れようとしているからだと思います. エラーをとるためには,main.dartのコードを以下のように修正してください. ``` //以下、main.dart import 'package:flutter/material.dart'; import './next_page.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), initialRoute: '/', routes: { '/': (context) => MyHomePage(), '/next': (context) => NextPage(), }, ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('元の画面'), ), body: Center( child: RaisedButton( child: Text('次へ'), onPressed: () { Navigator.pushNamed(context, '/next'); }, ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. ); } } ``` 動きましたら,是非ベストアンサーにお願いします.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問