Closed8
Flutter+Firebaseエミュレーター(LocalのFirestoreに書き込むまで)
Firestoreをローカルでいじいじできるところまで行きたい。
まずは、firebase初期化
$ firebase init
作っておいたプロジェクト選択。
あとは、なすがまま・・・
=== Firestore Setup
Firestore Security Rules allow you to define how and when to allow
requests. You can keep these rules in your project directory
and publish them with firebase deploy.
? What file should be used for Firestore Rules? firestore.rules
Firestore indexes allow you to perform complex queries while
maintaining performance that scales with the size of the result
set. You can keep index definitions in your project directory
and publish them with firebase deploy.
? What file should be used for Firestore indexes? firestore.indexes.json
i Writing configuration info to firebase.json...
i Writing project information to .firebaserc...
i Writing gitignore file to .gitignore...
✔ Firebase initialization complete!
初期化Done
エミュレーター起動
$ firebase emulators:start
http://localhost:4000/firestore
へアクセス
monoさんの記事を参考に。
simple_loggerを入れておく。
Fluttterからエミュレータへ接続できるようにする。
元々あったmain.dartをrun.dartにリネーム
run.dart
void run({bool isEmulator = false}) async {
final logger = SimpleLogger();
logger.fine('start(isEmulator: $isEmulator)');
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(ProviderScope(
child: MyApp(),
));
}
main_emu.dart
import 'run.dart';
void main() => run(isEmulator: true);
main.dart
import 'run.dart';
void main() => run();
$ flutter run --target lib/main_emu.dart
これで、ログに
start(isEmulator: true)
と出るはずだが。。出ない。
logger.info('start(isEmulator: $isEmulator)');
で表示された。
Authのエミュレーターが動いてないのかな。
$ firebase init emulators
そういえば初期化の時に、Authのエミュレーターは選択してなかったかも。
選択する
エミュレーター起動中に初期化したらうまくいかなかったので、エミュレーター終了してから
再度初期化。
Authも起動した。
Flutterでは、まだAuthのエミュレーターはうまく使えないのか。
残念。
プルリクが出てて、これマージされたら使えるようになるのかも。
エミュレーターのFirestoreに書き込もうとするもエラー
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
セキュリティルールで、全拒否してる状態だった。そりゃそうだ。
一旦全許可にして
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
再度、書き込み実行で無事Firestoreにデータ生成されることを確認。
このスクラップは2021/01/24にクローズされました