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

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

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

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

Q&A

解決済

1回答

3225閲覧

【Flutter】Riverpod クラス内でのプロバイダー参照方法を知りたいです

Takumi_pyg

総合スコア2

Flutter

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

0グッド

0クリップ

投稿2021/10/05 03:19

編集2021/10/05 03:20

Riverpodを使用して、別ファイルにあるプロバイダーの値を取得したいと思っています

Flutter

1import 'package:flutter/material.dart'; 2import 'package:firebase_auth/firebase_auth.dart'; 3import 'package:cloud_firestore/cloud_firestore.dart'; 4import 'package:flutter_riverpod/flutter_riverpod.dart'; 5import 'package:sample/login/login_page.dart'; 6 7final userProvider = ChangeNotifierProvider((ref) => UserModel()); 8final authUserProvider = Provider((ref) => FirebaseAuthUserProvider); 9 10class UserModel extends ChangeNotifier { 11 bool isLoading = false; 12 String appBarTitle = ''; 13 User? currentUser; 14 late DocumentSnapshot currentUserDoc; 15 16 // watch(userProvider)が呼ばれた時に発火する 17 UserModel() { 18 init(); 19 } 20 21 Future init() async { 22 startLoading(); 23 setCurrentUser(); 24 await setCurrentUserDoc(); 25 endLoading(); 26 } 27 28 void startLoading() { 29 isLoading = true; 30 // 変更をWidgetに通知する 31 notifyListeners(); 32 } 33 34 void setCurrentUser() { 35 currentUser = watch(authUserProvider); 36 } 37 38 void setAppBarTitle() { 39 appBarTitle = currentUserDoc['name']; 40 } 41 42 void endLoading() { 43 isLoading = false; 44 // 変更をWidgetに通知する 45 notifyListeners(); 46 } 47 48 Future setCurrentUserDoc() async { 49 try { 50 await FirebaseFirestore.instance 51 .collection('users') 52 .where('uid', isEqualTo: currentUser!.uid) 53 .limit(1) 54 .get() 55 .then((querySnapshot) { 56 querySnapshot.docs.forEach((DocumentSnapshot documentSnapshot) { 57 currentUserDoc = documentSnapshot; 58 }); 59 }); 60 } catch (e) { 61 debugPrint(e.toString()); 62 } 63 } 64} 65

この部分で別のファイルにあるプロバイダーから取得したいと考えています

Flutter

1currentUser = watch(authUserProvider);

公式ドキュメントを読んでも記載されていませんでしたので、この方法では難しいのでしょうか。
もし、詳しい方がいたら教えて頂けるとありがたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

公式ドキュメントの以下の箇所が該当するかなと思いました。

https://riverpod.dev/docs/concepts/reading#obtaining-a-ref-from-a-provider

公式では StateNotifierProvider ですが、 ChangeNotifierProvider に読み替えても問題ないと思います。

dart

1final counter = StateNotifierProvider<Counter, int>((ref) { 2 return Counter(ref); 3}); 4 5class Counter extends StateNotifier<int> { 6 Counter(this.ref): super(0); 7 8 final Ref ref; 9 10 void increment() { 11 // Counter can use the "ref" to read other providers 12 final repository = ref.read(repositoryProvider); 13 repository.post('...'); 14 } 15}

UserクラスのConstructor経由でrefを渡すことで、以下のようにして authUserProvider を読めるようになります。

dart

1void setCurrentUser() { 2 currentUser = ref.watch(authUserProvider); 3}

投稿2021/10/13 22:01

編集2021/10/13 22:03
tanzents

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問