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

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

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

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

Dart

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

Q&A

1回答

661閲覧

Flutterでメソッドを呼び出しの際にエラー

takahiro00

総合スコア84

Flutter

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

Dart

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

0グッド

0クリップ

投稿2023/06/04 14:48

編集2023/06/04 15:05

実現したいこと

メソッドを他のclassから呼び出して、
String型の値を取得したいのですが、
エラーになり呼び出すことができません。

ご教示お願いいたします。

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

════════ Exception caught by widgets library ═══════════════════════════════════ The following _TypeError was thrown building: type 'Future<String>' is not a subtype of type 'String' in type cast

該当のソースコード

呼び出したいメソッド

dart

1 static Future<String> fetchTest(String uid) async { 2 String image = ''; 3 try { 4 final snapshot = await _userCollection.doc(uid).get(); 5 image = snapshot.data()!['image_path']; 6 } catch (e) { 7 print('失敗 ===== $e'); 8 } 9 return image; 10 }

呼び出し側

dart

1~~~~~ 2itemBuilder: (context, index) { 3 ~~~~~~~ 4 String imageP = data['sender_id']; 5 String imagePa = TestFirestore.fetchTest(imageP) as String; 6 ~~~~~~~ 7} 8~~~~~

試したこと

as Stringを付けないと、キャストしろと怒られるので、キャストして変数に入れるようにしていますが、
うまくいきません

static Future<String>をstatic Future<dynamic>にすると以下のエラーになります。
type 'Future<dynamic>' is not a subtype of type 'String' in type cast

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

Flutter 3.10.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 84a1e904f4 (4 weeks ago) • 2023-05-09 07:41:44 -0700
Engine • revision d44b5a94c9
Tools • Dart 3.0.0 • DevTools 2.23.1

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

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

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

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

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

guest

回答1

0

fetchTestは非同期関数なので、Stringを取り出すにはawaitで待つかthenのコールバックで確定した値を利用するしかありません。
castして取り扱うというようなものではないです。

https://dart.dev/language#async
https://api.flutter.dev/flutter/dart-async/Future-class.html

また利用する側はitemBuilderの中で使っているようなので、ListViewなどのウィジェットbuild時に参照したいのでしょうか。
しかしその関数内では非同期処理を同期的に取り扱うことはできません。

といった方法を使う必要があります。

投稿2023/06/05 00:24

ta.fu

総合スコア1703

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

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

takahiro00

2023/06/15 13:04

ご回答ありがとうございます。 リアルタイムで取得する必要があるので、StreamBuilderで取る必要があるんですよね 根本的にやり方が違うようなので、一から考え直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問