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

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

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

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

Dart

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

Q&A

解決済

1回答

2199閲覧

Flutter / Dart Type型の変数に入れたクラスの実行方法

choro0121

総合スコア1

Flutter

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

Dart

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

0グッド

0クリップ

投稿2021/04/18 03:03

前提・実現したいこと

初歩的な内容かと思いますが、Dartに関する知見がなく
実現方法が調べても分からなかったため質問させていただきます。

Flutter/Dartを用いてWebページのルーティングを行おうとしています。
各ページのURLをKey、その時のページオブジェクトのクラスをValueとした辞書型を作成し
MaterialPageRouteのBuilderにてページオブジェウトを返すようにしようとしたのですが
ValueがType型であるため実行できません。

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

The return type 'Type' isn't a 'Widget', as required by the closure's context.

該当のソースコード

Dart

1const routes = { 2 '/': MyHomePage, 3 '/login': LoginPage, 4 '/signup': SignupPage, 5}; 6 7 8class MyApp extends StatelessWidget { 9 10 Widget build(BuildContext context) { 11 return MaterialApp( 12 onGenerateRoute: (settings) { 13 var paths = settings.name.split('?'); 14 var path = paths[0]; 15 16 return MaterialPageRoute( 17 settings: RouteSettings(name: settings.name), 18 builder: (context) => routes[path](), 19 ); 20 ), 21 ); 22 } 23}

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

  • Flutter 2.0.4
  • Dart SDK version: 2.12.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

MyHomePage と記述すると 型(Type)にしかならないので、
意図通りにやるとするなら、以下のコードでしょうか。

dart

1Map<String, WidgetBuilder> routes = { 2 '/': (context) => MyHomePage(), 3 '/login': (context) => LoginPage(), 4 '/signup': (context) => SignupPage(), 5}; 6 7class MyApp extends StatelessWidget { 8 9 Widget build(BuildContext context) { 10 return MaterialApp( 11 onGenerateRoute: (settings) { 12 var paths = settings.name.split('?'); 13 var path = paths[0]; 14 15 return MaterialPageRoute( 16 settings: RouteSettings(name: settings.name), 17 builder: routes[path], 18 ); 19 }, 20 ); 21 } 22}

routesの型をMap<String, WidgetBuilder>としたのは、
MaterialApproutesと同じにしただけです。

https://api.flutter.dev/flutter/material/MaterialApp/routes.html

追記:
(補足)
Flutter ではリフレクションが使用できなかったと思いますので、
型からインスタンスを作ることはできないです。
代わりに以下のようなパッケージがあるようです。
https://pub.dev/packages/built_mirrors

投稿2021/04/18 07:13

編集2021/04/18 08:20
satokei

総合スコア1217

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

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

choro0121

2021/04/18 09:45

ありがとうございます!無事にやりたいことができました! WidgetBuilder自体をValueにしてしまえばよかったのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問