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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

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

Q&A

解決済

1回答

1455閲覧

firebase_storageに保存されているファイルの変化を画面に反映させたい。

moriman

総合スコア615

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

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

0グッド

0クリップ

投稿2020/06/25 08:11

flutterでfirebase_storageに画像・動画ファイルをアップロードするような
アプリを作ろうとしています。

現時点で、更新ボタンを押すと、押した時点のstorage内のファイルを全件取得して各ファイルに対応したボタンを表示→押したら画像を表示

まではできました。まあこれでもいいかな、という感じなんですが、
できればstorageにファイルがアップロードされたらそれを即時に画面に反映させて(対応したボタンを表示したい)、その時点で通知を送る、みたいなことができれば、今っぽくていいなあと思っています。

それをする場合、StreamBuilderを使うのでしょうか。StreamBuilderが頭に浮かぶのですが、具体的にどうすればいいか、となると手が止まります。

StreamControllerを自分で作って、他のユーザーがファイルをアップロードする都度イベントをaddするようなコードを自分で書くんでしょうか。そのためにはファイルのアップロードを察知する必要があると思うのですが、そのためのメソッドがあるんでしょうか。

関連するサンプルコードなどありましたら教えて頂きたいです。

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

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

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

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

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

tepci

2020/06/30 02:45

質問ですが、StreamBuilderを使ってStorageではなく、Databaseのデータを即時に反映させる方法はわかりますか?
moriman

2020/06/30 06:25

コメントを頂きましてありがとうございます。 まずstorageでどういうことができるかを知りたかったので、 storageから見て、だいたい一通り掴めたので これからfirestoreとrealtime_databaseについて(まずはfirestoreから)書籍など読んでいる状況です。 まだStreamBuilderまで行っていないので、StreamBuilderを使った表示についてはわかっておりません。 StreamBuilder自体はfirebase以外のサンプルでたまに見るので、何となく、「Streamのイベント結果を勝手にwidgetに反映させてくれるすごく便利なもの」くらいの認識です。
tepci

2020/06/30 06:45

現在学習中ということでしたら、FirestoreやRealtime Databaseであれば、StreamBuilderを使って即時に反映させる方法に関する記事は日本語でもいくつかありますので、StreamBuilderを使う場合はStorageよりも先にFirestoreを使うと仕様がわかりやすいと思います。
guest

回答1

0

ベストアンサー

私もStorageについては知識が浅いので、あくまで推測になります。

Storageのデータを直接StreamBuilderを使って即時反映させることはなかなか難しい気がしますが、FireStoreのデータを即時反映させることは簡単です。

StreamBuilderを使ってFireStoreに格納されているデータを取得する方法は以下の記事が参考になります。
https://qiita.com/koizumiim/items/26bbad2f365ff3f186ef

それを利用して、Storageへファイルをアップロードすると同時にFireStoreにそのファイルへのパスのデータを追加します。
そうすれば、StreamBuilderFireStoreの変更を勝手に検知してくれるので、その後ファイルのパスをつかってStorageからファイルを取得すれば実現可能ではないかと思いました。

以下リンク先でも同じような回答がありました。やはりStorageはクライアントに変更の通知をしないため、StreamBuilderで即時反映させることは難しいようです。
https://stackoverflow.com/questions/62533169/streambuilder-help-flutter-firebase-storage

投稿2020/06/30 07:01

編集2020/06/30 07:03
tepci

総合スコア419

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

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

moriman

2020/07/01 04:16

回答を頂きましてありがとうございます。 書いてますね笑 firestoreのサンプルを見ていたのですが、DocumentReference,CollectionReference,QueryなどのクラスにStreamを取得(生成)するsnapshots()メソッドが用意されているので、それを使えば簡単に、データベースの中身をリアルタイムに反映するwidgetが作れる、ということですよね。 firestoreにはそういう便利な仕組みが用意されているので、簡単にStreamBuilderが使える、でもstorageには用意されていないので、やるならお示し頂いた方法か、あるいはstorageの中身の変化を返すStreamを自分で実装しないといけない、みたいなことですかね。 これって公式のflutterfireのstorageで上記の便利機能が実装されれば、storageでも、現在のfirestoreのようにStreamBuilderを簡単に使える、ということですよね。 でも用意されるまで待たないといけないし、そもそも用意されるのかどうかも誰にもわからない、ということですよね笑 storageでもlistAll()メソッドで全件取得自体はできるようになってますが、勝手にStreamを作ってくれるような仕組みはないっぽいですね。
tepci

2020/07/01 06:29

Storageの変更はクライアントに通知されないという仕様なので、それはずっと変わらないと思います。 変更を監視したい場合はこちら側で実装しないといけないですね。 そういったIssueも見つからないですし、実装される可能性はほぼないかと思います。 listAll()ですらfirebase_storageのmasterに未だマージされていないですからね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問