- 参考
https://www.flutter-study.dev/firebase/cloud-firestore-try
pubspec.yaml
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 firebase_core: ^1.0.1 cloud_firestore: ^3.1.13 cloud_firestore_web: ^2.6.13
dependenciesに firebase_core: ^1.0.1 cloud_firestore: ^3.1.13 cloud_firestore_web: ^2.6.13 を追加する
index.html
<!DOCTYPE html> <html> <head> (略) </head> <body> <script type="module"> // Import the functions you need from the SDKs you need import { initializeApp } from "https://www.gstatic.com/firebasejs/9.8.3/firebase-app.js"; import { getAnalytics } from "https://www.gstatic.com/firebasejs/9.8.3/firebase-analytics.js"; // TODO: Add SDKs for Firebase products that you want to use // https://firebase.google.com/docs/web/setup#available-libraries // Your web app's Firebase configuration // For Firebase JS SDK v7.20.0 and later, measurementId is optional const firebaseConfig = { apiKey: "AIzaSyDd55SAcL-qBGe0iidvrEelD0Lxd2FJbBo", authDomain: "myapp-47093.firebaseapp.com", projectId: "myapp-47093", storageBucket: "myapp-47093.appspot.com", messagingSenderId: "202117038660", appId: "1:202117038660:web:6fecd6df4a33756b63b211", measurementId: "G-D4MXME2D3W" }; // Initialize Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); </script> <script src="main.dart.js" type="application/javascript"></script> </body> </html>
<body>~</body>に<script type="module">~</script>を追加する 末尾に<script src="main.dart.js" type="application/javascript"></script>を追加する
main.dart
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'config.dart'; final configurations = Configurations(); Future<void> main() async { // Firebase初期化 await Firebase.initializeApp( options: FirebaseOptions( apiKey: configurations.apiKey, appId: configurations.appId, messagingSenderId: configurations.messagingSenderId, projectId: configurations.projectId)); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: MyFirestorePage(), ); } } class MyFirestorePage extends StatefulWidget { @override _MyFirestorePageState createState() => _MyFirestorePageState(); } class _MyFirestorePageState extends State<MyFirestorePage> { // 作成したドキュメント一覧 List<DocumentSnapshot> documentList = []; // 指定したドキュメントの情報 String orderDocumentInfo = ''; @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( children: <Widget>[ ElevatedButton( child: Text('コレクション+ドキュメント作成'), onPressed: () async { // ドキュメント作成 await FirebaseFirestore.instance .collection('users') // コレクションID .doc('id_abc') // ドキュメントID .set({'name': '鈴木', 'age': 1333}); // データ }, ), 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(), ), ElevatedButton( child: Text('ドキュメントを指定して取得'), onPressed: () async { // コレクションIDとドキュメントIDを指定して取得 final document = await FirebaseFirestore.instance .collection('users') .doc('id_abc') .collection('orders') .doc('id_123') .get(); // 取得したドキュメントの情報をUIに反映 setState(() { orderDocumentInfo = '${document['date']} ${document['price']}円'; }); }, ), // ドキュメントの情報を表示 ListTile(title: Text(orderDocumentInfo)), ], ), ), ); } }