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

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

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

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

Flutter

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

Q&A

1回答

842閲覧

riverpodで状態管理をしているがエラーになる

su_da221

総合スコア59

Firebase

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

Flutter

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

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

0グッド

0クリップ

投稿2022/08/14 08:22

前提

本一覧を取得するアプリを作っています。
本一覧はfirebaseから取得しています。

YouTubeを参考に状態管理をしたいと思ったのですがriverpodでやる方法がいまいちよくわかりません。
参考にしているYouTube
参考にしたサイト

記述やエラーなどは下部に記載します。

実現したいこと

riverpodを使った状態管理をしたい。

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

イメージ説明

エラーメッセージ

該当のソースコード

lib/model/(状態管理ファイル)

dart

1import 'package:cloud_firestore/cloud_firestore.dart'; 2import 'package:flutter/material.dart'; 3import 'package:flutter_riverpod/flutter_riverpod.dart'; 4 5import '../domain/book.dart'; 6 7final bookListProvider = ChangeNotifierProvider<BookListModel>((ref) { 8 return BookListModel(); 9}); 10 11class BookListModel extends ChangeNotifier { 12 final Stream<QuerySnapshot> _userStream = 13 FirebaseFirestore.instance.collection('books').snapshots(); 14 15 // booksという配列を作成 null許容 16 List<Book>? books; 17 18 void fetchBookList() async { 19 final QuerySnapshot snapshot = 20 await FirebaseFirestore.instance.collection('books').get(); 21 22 final List<Book> books = snapshot.docs.map((DocumentSnapshot document) { 23 Map<String, dynamic> data = document.data() as Map<String, dynamic>; 24 25 final String title = data['title']; 26 final String author = data['author']; 27 28 return Book(title, author); 29 }).toList(); 30 31 this.books = books; 32 notifyListeners(); 33 } 34} 35

lib/book_list_page(表示するファイル)

dart

1import 'package:book_list_project/book_list/book_list_model.dart'; 2import 'package:cloud_firestore/cloud_firestore.dart'; 3import 'package:flutter/material.dart'; 4import 'package:flutter_riverpod/flutter_riverpod.dart'; 5 6 7class BookListPage extends ConsumerWidget { 8 9 Widget build(BuildContext context, WidgetRef ref) { 10 11 final bookListProvider = ref.read(bookListProvider); // ここでエラー 12 13 return Scaffold( 14 appBar: AppBar( 15 title: Text('本一覧'), 16 ), 17 body: Center(child: ), 18 floatingActionButton: FloatingActionButton( 19 onPressed: null, 20 tooltip: 'Increment', 21 child: const Icon(Icons.add), 22 ), // This trailing comma makes auto-formatting nicer for build methods. 23 ); 24 } 25} 26

試したこと

riverpodに関しての記事は見ているのですが、別ファイルで管理しているものがなく、参考になりません。
エラー内容では見つからない?という感じでしたがなぜでしょうか。

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

mac
vscode

flutter 3
flutter_riverpod: ^1.0.4

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

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

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

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

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

guest

回答1

0

final bookListProvider = ref.read(bookListProvider);のローカル変数名をbookListProvider から違う名前に変えればエラーが解消されませんか。
bookListProviderはグローバル変数で宣言されていますが、ローカル変数名としても定義されてしまっているため、{}ブロック内ではローカル変数名をref.readの引数として使用したとして認識されエラーが出ています。

以下がエラーメッセージの内容で、下側が日本語訳です。

local variable 'bookListProvider' can't be referenced before it is declared.
ローカル変数 'bookListProvider' は宣言される前に参照することはできません。

エラーの詳細は以下のページを参考にしてください。
https://dart.dev/tools/diagnostic-messages#referenced_before_declaration

あとref.readを使ってますが、そこは多分ref.watchを使うのが一般的かな。
プロバイダの変更をウォッチして、変更があればウィジェットのリビルドを起こすには。

投稿2022/08/14 11:22

ta.fu

総合スコア1667

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問