Firebase - TetsuFe/state_notifier_sample6 GitHub Wiki

https://pub.dev/packages/firebase

firebaseプロジェクトを作成し、以下の変更を加える(apiKeyなどは firebase console の 「プロジェクトを設定」から確認)

main.dart

import 'package:firebase/firebase.dart';
import 'package:flutter/material.dart';
import 'package:flutter_state_management/app.dart';

void main() {
  final firebaseApp = initializeApp(
      apiKey: "xxxx",
      authDomain: "yyyy",
      databaseURL: "zzzz",
      projectId: "wwww",
      storageBucket: "vvvv",
      messagingSenderId: "rrrr",
      appId: "qqqq",
      measurementId: "mmmm");

  analytics(firebaseApp);
  runApp(RootApp());
}

web/index.html

<body>
  <!-- This script installs service_worker.js to provide PWA functionality to
       application. For more information, see:
       https://developers.google.com/web/fundamentals/primers/service-workers -->
  <script>
    if ('serviceWorker' in navigator) {
      window.addEventListener('load', function () {
        navigator.serviceWorker.register('flutter_service_worker.js');
      });
    }
  </script>
  <script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-analytics.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.14.2/firebase-firestore.js"></script>
  <script src="main.dart.js" type="application/javascript"></script>
</body>
</html>

firebase 7.3.0

firestore https://github.com/FirebaseExtended/firebase-dart/blob/master/example/firestore/index.dart

ドキュメントは古いようだったので、exampleのコードを参考にしました

import 'package:firebase/firebase.dart' as fb;
import 'package:flutter_state_management/story/story.dart';

class StoryApi {
  Stream<List<Story>> getStoryList() {
    try {
      return fb.firestore().collection('stories').onSnapshot.map(
          (event) => event.docs.map((e) => Story.fromJson(e.data())).toList());
    } on Exception catch (_) {
      throw Exception('なんらかのエラーが発生しました');
    }
  }
}\

リスト取得の際の工夫

  Future<List<Sentence>> getStorySentenceList(String storyId) async {
    try {
      final storySentenceListReference = await fb
          .firestore()
          .collection('storySentenceLists')
          .doc(storyId)
          .get();
      final storySentenceListDocument = storySentenceListReference.data();
      final storySentenceList =
          storySentenceListDocument['sentenceList'] as List<dynamic>; // 1段階目のキャスト。一気にはできない
      return storySentenceList
          .cast<Map<String, dynamic>>() // 2段階目のキャスト。
          .map((e) => Sentence.fromJson(e))
          .toList();
⚠️ **GitHub.com Fallback** ⚠️