====== 04.flutter_webでfirestore ======
{{tag>flutter Flutter_for_Web firebase firestore}}
---//2020/01/07 更新//
[[00.flutter:index.html|スマホアプリ作成フレームワークFlutter目次]]
https://i-doctor.sakura.ne.jp/font/?p=42233
『Flutter×Firebaseで始めるモバイルアプリ開発』をWEBアプリにして写経してみる(3)Firebaseの設定と一覧画面
2020年1月4日
===== 開発環境 =====
Panasonic CF-QV
Windows 10 Pro (1909)
git version 2.29.2.windows.2
Chrome
flutter_windows_2.2.0-stable
VisualStudioCode 1.55.2
VisualStudioCodeのExtensions(拡張機能)『Flutter(dart-code.fultter)』
{{:00.flutter:pasted:20210526-090729.png}}
今回入れるFlutterプラグイン
FlutterFire
https://firebase.google.com/docs/flutter/setup?hl=ja
Flutter アプリに Firebase を追加する
https://firebase.flutter.dev/docs/firestore/usage/
Cloud Firestore
===== 流れ =====
https://i-doctor.sakura.ne.jp/font/?p=42522
FlutterのCloud FirestoreパッケージがWEB対応したので使ってみる
2020年4月19日
-新規Flutter(web)アプリの作成
-新規Firebaseプロジェクトの作成
-Flutter(web)アプリにFirebaseを追加(FirebaseとFlutterアプリの紐付け)(pubspec.yaml、web/index.html、lib/main.dart)
-Cloud Firestoreにデータ書き込み
-Cloud Firestoreからのデータ取得
https://firebase.flutter.dev/docs/firestore/overview/
2021年5月以降、Flutter2.2以降は、新規Flutterアプリを作成すると、自動的にNull safetyとなります。
===== 新規Flutter(web)アプリの作成 =====
https://i-doctor.sakura.ne.jp/font/?p=46146
Windows10にFlutter2.2をインストールしてFultterWebを試してみる(2021年5月版)
2021年5月22日
flutter create flutter2_firestore
{{:00.flutter:pasted:20210526-080128.png}}
cd flutter2_firestore
flutter run
{{:00.flutter:pasted:20210526-080240.png}}
ターミナル画面で q を押すと、Chromeが閉じます。
===== 新規Firebaseプロジェクトの作成 =====
下のサイトに従って、 https://console.firebase.google.com/ から、新規Firebaseアプリを作成します。
今回は、kasi という名前のFirebaseプロジェクトを作成しました。
https://www.flutter-study.dev/firebase/cloud-firestore
Cloud Firestore概要
→すごく分かりやすいです。
{{:00.flutter:pasted:20210526-085136.png}}
{{:00.flutter:pasted:20210526-091411.png}}
{{:00.flutter:pasted:20210526-091458.png}}
この中の部分をメモ帳などにコピーしておきます。
ここの、
var firebaseConfig = {
apiKey: "xxxxxxxxxxxxx",
authDomain: "xxxxxxxxxxx",
.....
}
の部分をコピーしておきます。
===== Flutter(web)アプリにFirebaseを追加(FirebaseとFlutterアプリの紐付け) =====
Flutterアプリの、pubspec.yaml、web/index.html、lib/main.dart を書き換えます。
参考:https://www.flutter-study.dev/firebase/cloud-firestore-try
https://firebase.flutter.dev/docs/firestore/overview/
の、Null safetyで行きます。
pubspec.yaml
dependencies:
flutter:
sdk: flutter
firebase_core: "^1.2.0"
cloud_firestore: "^2.2.0"
(変更前)
{{:00.flutter:pasted:20210526-092138.png}}
(変更後)
{{:00.flutter:pasted:20210526-092634.png}}
pubspec.yamlを変更して保存すると、VisualStudioCodeでは、自動的にFlutterアプリにfirebase_core, cloud_firestoreが自動的にインストールされます。
次に、web/index.html を開き、下の方の、
の『直後』に、以下のようなコードを挿入します。”apiKey: …” のところは、上記のFirebaseのご自身のapiKeyなどに書き換えてください。
実際には、以下のようになります。
(変更前)
{{:00.flutter:pasted:20210526-094123.png}}
(変更後)
{{:00.flutter:pasted:20210526-094622.png}}
===== Cloud Firestoreにデータ書き込み =====
以下の本を、Webアプリにしてみてやってみたいと思います。
{{:00.flutter:pasted:20210526-095021.png}}
まずは、開発モードの状態で、以下のように入力します。
{{:00.flutter:pasted:20210526-102700.png}}
{{:00.flutter:pasted:20210526-102937.png}}
===== Cloud Firestoreからのデータ取得 =====
参考:https://firebase.flutter.dev/docs/firestore/usage
flutter run して、Flutterアプリを起動します。
{{:00.flutter:pasted:20210526-104902.png}}
lib/main.dart を以下のように変更します。
import 'package:flutter/material.dart';
// Import the firebase_core and cloud_firestore plugin
import 'package:firebase_core/firebase_core.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
Future main() async {
// Fireabse初期化
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'かしかりメモ',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyFirestorePage(),
);
}
}
class MyFirestorePage extends StatefulWidget {
@override
_MyFirestorePageState createState() => _MyFirestorePageState();
}
class _MyFirestorePageState extends State {
// 作成したドキュメント一覧
List documentList = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("かしかりメモ")),
body: Center(
child: Column(
children: [
ElevatedButton(
child: Text('コレクション+ドキュメント作成'),
onPressed: () async {
// ドキュメント作成
await FirebaseFirestore.instance
.collection('users') // コレクションID
.doc('id_abc') // ドキュメントID
.set({'name': '鈴木', 'age': 40}); // データ
},
),
ElevatedButton(
child: Text('コレクション+ドキュメント作成2'),
onPressed: () async {
// ドキュメント作成
await FirebaseFirestore.instance
.collection('users') // コレクションID
.doc('id_def') // ドキュメントID
.set({'name': '佐藤', 'age': 55}); // データ
},
),
ElevatedButton(
child: Text('サブコレクション+ドキュメント作成'),
onPressed: () async {
// サブコレクション内にドキュメント作成
await FirebaseFirestore.instance
.collection('users') // コレクションID
.doc('id_abc') // ドキュメントID << usersコレクション内のドキュメント
.collection('orders') // サブコレクションID
.doc('id_123') // ドキュメントID << サブコレクション内のドキュメント
.set({'price': 600, 'date': '9/13'}); // データ
},
),
ElevatedButton(
child: Text('ドキュメント一覧取得'),
onPressed: () async {
// コレクション内のドキュメント一覧を取得
final snapshot =
await FirebaseFirestore.instance.collection('users').get();
// 取得したドキュメント一覧をUIに反映
setState(() {
documentList = snapshot.docs;
});
},
),
// コレクション内のドキュメント一覧を表示
Column(
children: documentList.map((document) {
return ListTile(
title: Text('${document['name']}さん'),
subtitle: Text('${document['age']}歳'),
);
}).toList(),
),
],
),
),
);
}
}
Ctrl+Sで保存して、ターミナル画面で r を押して、更新します。
さらに、上から順番にボタンをクリックしていくと、以下のようになります。
{{:00.flutter:pasted:20210526-114149.png}}
{{:00.flutter:pasted:20210526-114243.png}}
なお、82行目が、
documentList = snapshot.docs;
で動いて、
documentList = snapshot.documents;
ではエラーがでて動きませんでした。
===== Firestoreリンク =====
https://www.flutter-study.dev/firebase/cloud-firestore
Cloud Firestore概要
→すごく分かりやすいです。お勧め。
https://qiita.com/Riscait/items/4be06794468d9c13f11e
@Riscait
が2020年11月03日に更新
FlutterFireがアップデートしたからMigration Guideに沿って修正した記録
→過去の記事のコードを写経して動かなかったときなど、非常に参考になります。
https://blog.codemagic.io/integrate-firebase-cloud-firestore-with-flutter-perform-crud/
CRUD operations using Firebase Cloud Firestore and Flutter
Apr 14, 2021
===== FutureBuilder =====
https://blog.dalt.me/1652
【Flutter】それ、FutureBuilderだったら綺麗に書けるよ?
2020.6.1
https://bukiyo-papa.com/futurebuilder/
【Flutter】FutureBuilderの基本とサンプルコード
投稿日2019年11月28日 著者 たかお
https://bukiyo-papa.com/futurebuildersample/
【Flutter】FutureBuilder サンプルコード【入門】
投稿日2019年11月28日 著者 たかお
https://corgi-lab.com/programming/flutter/flutter-futurebuilder/
【Flutter】FutureBuilderで非同期にWidgetを生成する
2020年4月5日
https://qiita.com/edasan/items/f119a40434ec1cd61d21
@edasan
が2020年09月02日に作成
FlutterでFirestoreのデータをFutureBuilderを使って非同期で取得する
https://www.flutter-study.dev/firebase-app/firestore-stream/
Firestoreでリアルタイム更新
https://qiita.com/glassmonkey/items/02639da648b3ed299140
@glassmonkey
が2020年03月14日に更新
Dart(Flutter)における非同期処理入門(Firestoreのデータ取得サンプルつき)
===== 参考リンク =====
https://firebase.flutter.dev/docs/overview
公式サイト
{{:00.flutter:pasted:20210523-032858.png}}
https://qiita.com/yusuke_vp/items/e446edee3a4156ac9b87
{{:00.flutter:pasted:20210523-032002.png}}
https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/firebase_firestore
Chapter 31
Firebase編3:Firestore
kazutxt
https://www.flutter-study.dev/firebase/cloud-firestore-try/
Cloud Firestoreを使ってみる
https://qiita.com/smiler5617/items/8dcf720f5477a5f4b7d7
@smiler5617
が2021年04月07日に更新
FlutterからCloud Firestoreのデータ取得 & データ書き込み
https://dev.to/happyharis/flutter-web-firestore-crud-3p17
Flutter Web: Firestore CRUD
happyharis
2020年9月16日
===== リンク =====
目次:[[00.flutter:index.html|スマホアプリ作成フレームワークFlutter]]
前:[[00.flutter:03.dart言語|03 Dart言語]]