diff --git a/.github/workflows/firestore_tests.yml b/.github/workflows/firestore_tests.yml new file mode 100644 index 00000000..273b3e2b --- /dev/null +++ b/.github/workflows/firestore_tests.yml @@ -0,0 +1,199 @@ +name: Run unit/integration/testlab + +on: + workflow_dispatch: + pull_request: + types: [opened, reopened, synchronize] + paths: + - "firestore/**" + push: + paths-ignore: + - "**.md" + +jobs: + unit_tests: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: "checkout" + uses: actions/checkout@v2 + - name: "install flutter" + uses: subosito/flutter-action@v2 + - name: "Run widget tests" + working-directory: firestore + run: flutter test + test_lab: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + # FIXME need to build the app here + - name: "Test lab run" + id: ftl_test # removed - here + uses: FirebaseExtended/github-actions/firebase-test-lab@v1.2 + with: + credentials_json: ${{ secrets.TEST_LAB }} # FIXME test this + test_type: "robo" # FIXME instrumentation better + testapp_dir: firestore/testapp + test_devices: model=redfin,version=30 + - run: echo '${{ steps.ftl_test.outputs.test_summary }}' + + +# firebase-ios-sdk .github/workflows/dynamiclinks.yml +# See also .github/workflows/crashlytics.yml + # env: + # plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} + # signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }} + # runs-on: macos-12 + # steps: + # - uses: actions/checkout@v3 + # - uses: ruby/setup-ruby@v1 + # - name: Setup quickstart + # run: scripts/setup_quickstart.sh DynamicLinks + # - name: Install Secret GoogleService-Info.plist + # run: scripts/decrypt_gha_secret.sh scripts/gha-encrypted/qs-dynamiclinks.plist.gpg \ + # quickstart-ios/dynamiclinks/GoogleService-Info.plist "$plist_secret" + # - name: Update Environment Variable For DynamicLinks + # run: | + # sed -i '' 's#DYNAMIC_LINK_DOMAIN#https://qpf6m.app.goo.gl#' quickstart-ios/dynamiclinks/DynamicLinksExample/DynamicLinksExample.entitlements + # sed -i '' 's#YOUR_DOMAIN_URI_PREFIX";#https://qpf6m.app.goo.gl";#' quickstart-ios/dynamiclinks/DynamicLinksExample/ViewController.m + # sed -i '' 's#YOUR_DOMAIN_URI_PREFIX";#https://qpf6m.app.goo.gl";#' quickstart-ios/dynamiclinks/DynamicLinksExampleSwift/ViewController.swift + # # - name: Build objc quickstart + # # run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart_ftl.sh DynamicLinks) + # - name: Build swift quickstart + # if: ${{ always() }} + # run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart_ftl.sh DynamicLinks swift) + # - id: ftl_test + # uses: FirebaseExtended/github-actions/firebase-test-lab@v1.2 + # with: + # credentials_json: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_CREDENTIALS }} + # testapp_dir: quickstart-ios/build-for-testing + # test_type: "xctest" + + + # firebase-cpp-sdk + # test_android: + # name: test-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }} + # needs: [check_and_prepare, build_android] + # runs-on: macos-12 + # if: contains(needs.check_and_prepare.outputs.matrix_platform, 'Android') && needs.check_and_prepare.outputs.apis != '' && !cancelled() + # strategy: + # fail-fast: false + # matrix: + # build_os: ${{ fromJson(needs.check_and_prepare.outputs.matrix_os) }} + # android_device: ${{ fromJson(needs.check_and_prepare.outputs.android_device) }} + # test_type: ["gameloop"] + # exclude: + # - android_device: "android_target" + # test_type: "uitest" + # - android_device: "android_latest" + # test_type: "uitest" + # steps: + # - uses: actions/checkout@v3 + # with: + # ref: ${{needs.check_and_prepare.outputs.github_ref}} + # - name: Download Android integration tests artifact + # uses: actions/download-artifact@v3 + # with: + # path: testapps/testapps-android-${{ matrix.build_os }} + # name: testapps-android-${{ matrix.build_os }} + # - name: Setup python + # uses: actions/setup-python@v4 + # with: + # python-version: ${{ env.pythonVersion }} + # - name: Install prerequisites for testing + # uses: nick-invision/retry@v2 + # with: + # shell: bash + # timeout_minutes: 5 + # max_attempts: 3 + # command: scripts/gha/install_test_workflow_prereqs.sh -p Android -t true + # - name: Get Device Info + # id: device-info + # run: | + # echo "device_type=$( python scripts/gha/print_matrix_configuration.py -k ${{ matrix.android_device }} -get_device_type)" >> $GITHUB_OUTPUT + # echo "device=$( python scripts/gha/print_matrix_configuration.py -k ${{ matrix.android_device }} -get_ftl_device)" >> $GITHUB_OUTPUT + # - name: Setup java 8 for test_simulator.py + # uses: actions/setup-java@v3 + # with: + # distribution: 'temurin' + # java-version: '8' + # - name: Run Android integration tests on Emulator locally + # timeout-minutes: 150 + # if: steps.device-info.outputs.device_type == 'virtual' + # run: | + # python scripts/gha/test_simulator.py --testapp_dir testapps \ + # --test_type "${{ matrix.test_type }}" \ + # --android_device "${{ matrix.android_device }}" \ + # --logfile_name "android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}" \ + # --ci + # - id: ftl_test + # if: steps.device-info.outputs.device_type == 'ftl' + # uses: FirebaseExtended/github-actions/firebase-test-lab@v1.2 + # timeout-minutes: 90 + # with: + # credentials_json: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_CREDENTIALS }} + # testapp_dir: testapps + # test_type: "game-loop" + # test_devices: ${{ steps.device-info.outputs.device }} + # max_attempts: 3 + # validator: ${GITHUB_WORKSPACE}/scripts/gha/integration_testing/ftl_gha_validator.py + # - name: Read FTL Test Result + # if: ${{ steps.device-info.outputs.device_type == 'ftl' && !cancelled() }} + # shell: bash + # run: | + # python scripts/gha/read_ftl_test_result.py --test_result '${{ steps.ftl_test.outputs.test_summary }}' \ + # --output_path testapps/test-results-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}.log + # - name: Prepare results summary artifact + # if: ${{ !cancelled() }} + # shell: bash + # run: | + # # If testapps do not exist, then it's a build error not test error. + # if [ -d "testapps/testapps-android-${{ matrix.build_os }}" ] && [ ! -f "testapps/test-results-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}.log.json" ]; then + # mkdir -p testapps && echo "__SUMMARY_MISSING__" > "testapps/test-results-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}.log.json" + # fi + # - name: Upload Android test results artifact + # if: ${{ !cancelled() }} + # uses: actions/upload-artifact@v3 + # with: + # name: log-artifact + # path: testapps/test-results-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}* + # retention-days: ${{ env.artifactRetentionDays }} + # - name: Upload Android test video artifact + # if: ${{ steps.device-info.outputs.device_type == 'virtual' && !cancelled() }} + # uses: actions/upload-artifact@v3 + # with: + # name: mobile-simulator-test-video-artifact + # path: testapps/video-*-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}.mp4 + # retention-days: ${{ env.artifactRetentionDays }} + # - name: Upload Android test logcat artifact + # if: ${{ steps.device-info.outputs.device_type == 'virtual' && !cancelled() }} + # uses: actions/upload-artifact@v3 + # with: + # name: mobile-simulator-test-logcat-artifact + # path: testapps/logcat-*-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}.txt + # retention-days: ${{ env.artifactRetentionDays }} + # - name: Download log artifacts + # if: ${{ needs.check_and_prepare.outputs.pr_number && failure() && !cancelled() }} + # uses: actions/download-artifact@v3 + # with: + # path: test_results + # name: log-artifact + # - name: Update PR label and comment + # if: ${{ needs.check_and_prepare.outputs.pr_number && failure() && !cancelled() }} + # shell: bash + # run: | + # python scripts/gha/it_workflow.py --stage progress \ + # --token ${{github.token}} \ + # --issue_number ${{needs.check_and_prepare.outputs.pr_number}}\ + # --actor ${{github.actor}} \ + # --commit ${{needs.check_and_prepare.outputs.github_ref}} \ + # --run_id ${{github.run_id}} + # - name: Summarize test results + # if: ${{ !cancelled() }} + # shell: bash + # run: | + # cat "testapps/test-results-android-${{ matrix.build_os }}-${{ matrix.android_device }}-${{ matrix.test_type }}.log" + # if [[ "${{ job.status }}" != "success" ]]; then + # exit 1 + # fi \ No newline at end of file diff --git a/firestore/README.md b/firestore/README.md index 6edf0fd0..a4772ac3 100644 --- a/firestore/README.md +++ b/firestore/README.md @@ -48,6 +48,11 @@ service cloud.firestore { **Add Some** from the overflow menu to add some new entries. +### Run the App Web + +In order to display images without a CORS exception, use the --web-renderer html flag: +`flutter run -d chrome --web-renderer html` + ### Result diff --git a/firestore/android/app/build.gradle b/firestore/android/app/build.gradle index 7715865e..ded18ffb 100644 --- a/firestore/android/app/build.gradle +++ b/firestore/android/app/build.gradle @@ -22,6 +22,9 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +// START: FlutterFire Configuration +apply plugin: 'com.google.gms.google-services' +// END: FlutterFire Configuration apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" diff --git a/firestore/android/app/google-services.json b/firestore/android/app/google-services.json new file mode 100644 index 00000000..0b7783c5 --- /dev/null +++ b/firestore/android/app/google-services.json @@ -0,0 +1,46 @@ +{ + "project_info": { + "project_number": "905001072058", + "project_id": "ctflutterquickstart", + "storage_bucket": "ctflutterquickstart.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:905001072058:android:6b4d615e68771837801983", + "android_client_info": { + "package_name": "com.example.firestore" + } + }, + "oauth_client": [ + { + "client_id": "905001072058-o40uoh0mn4staje7e49gudg3rl8b1723.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyBeYHWDZI-VYzraflj-GJ9Yj-5vKdqd1uE" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "905001072058-o40uoh0mn4staje7e49gudg3rl8b1723.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "905001072058-58k5uvhubqhj8loen93npuv833qqnte5.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.example.firestore" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/firestore/android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java b/firestore/android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java new file mode 100644 index 00000000..752fc185 --- /dev/null +++ b/firestore/android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java @@ -0,0 +1,25 @@ +// Generated file. +// +// If you wish to remove Flutter's multidex support, delete this entire file. +// +// Modifications to this file should be done in a copy under a different name +// as this file may be regenerated. + +package io.flutter.app; + +import android.app.Application; +import android.content.Context; +import androidx.annotation.CallSuper; +import androidx.multidex.MultiDex; + +/** + * Extension of {@link android.app.Application}, adding multidex support. + */ +public class FlutterMultiDexApplication extends Application { + @Override + @CallSuper + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + MultiDex.install(this); + } +} diff --git a/firestore/android/build.gradle b/firestore/android/build.gradle index 4256f917..56cce25e 100644 --- a/firestore/android/build.gradle +++ b/firestore/android/build.gradle @@ -6,7 +6,10 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.4.1' + // START: FlutterFire Configuration + classpath 'com.google.gms:google-services:4.3.14' + // END: FlutterFire Configuration classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -26,6 +29,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/firestore/android/gradle/wrapper/gradle-wrapper.properties b/firestore/android/gradle/wrapper/gradle-wrapper.properties index bc6a58af..6b665338 100644 --- a/firestore/android/gradle/wrapper/gradle-wrapper.properties +++ b/firestore/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/firestore/lib/firebase_options.dart b/firestore/lib/firebase_options.dart index 42cd91ad..10e649c9 100644 --- a/firestore/lib/firebase_options.dart +++ b/firestore/lib/firebase_options.dart @@ -35,21 +35,20 @@ class DefaultFirebaseOptions { } static const FirebaseOptions web = FirebaseOptions( - apiKey: 'AIzaSyAfj_GOB5yKD6lPaVS9hSskKITPuquzpZQ', - appId: '1:993083111617:web:380d3567efd5f99a67bc40', - messagingSenderId: '993083111617', - projectId: 'friendlyeats-flutter-68d79', - authDomain: 'friendlyeats-flutter-68d79.firebaseapp.com', - storageBucket: 'friendlyeats-flutter-68d79.appspot.com', - measurementId: 'G-FSYS2SH1N4', + apiKey: 'AIzaSyC8VCwBMvvfKAqnXC5vxBvgEmEISz1N5XA', + appId: '1:905001072058:web:e25193a00a843ca7801983', + messagingSenderId: '905001072058', + projectId: 'ctflutterquickstart', + authDomain: 'ctflutterquickstart.firebaseapp.com', + storageBucket: 'ctflutterquickstart.appspot.com', ); static const FirebaseOptions android = FirebaseOptions( - apiKey: 'AIzaSyAiC9yhzOEeMcP6dIuKEZCfOdknTzNtYGM', - appId: '1:993083111617:android:a1aded9943e3dd0367bc40', - messagingSenderId: '993083111617', - projectId: 'friendlyeats-flutter-68d79', - storageBucket: 'friendlyeats-flutter-68d79.appspot.com', + apiKey: 'AIzaSyBeYHWDZI-VYzraflj-GJ9Yj-5vKdqd1uE', + appId: '1:905001072058:android:6b4d615e68771837801983', + messagingSenderId: '905001072058', + projectId: 'ctflutterquickstart', + storageBucket: 'ctflutterquickstart.appspot.com', ); static const FirebaseOptions ios = FirebaseOptions( @@ -58,7 +57,8 @@ class DefaultFirebaseOptions { messagingSenderId: '993083111617', projectId: 'friendlyeats-flutter-68d79', storageBucket: 'friendlyeats-flutter-68d79.appspot.com', - iosClientId: '993083111617-a9q0thbihk8tl0487gfem1hm1ahaieab.apps.googleusercontent.com', + iosClientId: + '993083111617-a9q0thbihk8tl0487gfem1hm1ahaieab.apps.googleusercontent.com', iosBundleId: 'friendlyeats.example.app', ); @@ -68,7 +68,8 @@ class DefaultFirebaseOptions { messagingSenderId: '993083111617', projectId: 'friendlyeats-flutter-68d79', storageBucket: 'friendlyeats-flutter-68d79.appspot.com', - iosClientId: '993083111617-lh0dmnumalopnegi244kmfm2o0brl7dg.apps.googleusercontent.com', + iosClientId: + '993083111617-lh0dmnumalopnegi244kmfm2o0brl7dg.apps.googleusercontent.com', iosBundleId: 'friendlyears.example.app', ); } diff --git a/firestore/lib/src/data/restaurant_provider.dart b/firestore/lib/src/data/restaurant_provider.dart index 9fc0f8d0..ad7ac3b3 100644 --- a/firestore/lib/src/data/restaurant_provider.dart +++ b/firestore/lib/src/data/restaurant_provider.dart @@ -18,7 +18,7 @@ import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; -import '../model/filter.dart'; +import '../model/filter.dart' as modelFilter; import '../model/restaurant.dart'; import '../model/review.dart'; @@ -29,7 +29,7 @@ abstract class RestaurantProvider { {required String restaurantId, required Review review}); void addRestaurantsBatch(List restaurants); void loadAllRestaurants(); - void loadFilteredRestaurants(Filter filter); + void loadFilteredRestaurants(modelFilter.Filter filter); Future getRestaurantById(String restaurantId); void dispose(); } @@ -116,7 +116,7 @@ class FirestoreRestaurantProvider implements RestaurantProvider { } @override - void loadFilteredRestaurants(Filter filter) { + void loadFilteredRestaurants(modelFilter.Filter filter) { Query collection = FirebaseFirestore.instance.collection('restaurants'); if (filter.category != null) { collection = collection.where('category', isEqualTo: filter.category); diff --git a/firestore/pubspec.lock b/firestore/pubspec.lock index ed78b8f5..c47480e9 100644 --- a/firestore/pubspec.lock +++ b/firestore/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "2f428053492f92303e42c9afa8e3a78ad1886760e7b594e2b5a6b6ee47376360" + sha256: "1a5e13736d59235ce0139621b4bbe29bc89839e202409081bc667eb3cd20674c" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.3.5" async: dependency: transitive description: @@ -45,26 +45,26 @@ packages: dependency: "direct main" description: name: cloud_firestore - sha256: "9194bf1845ee073bea64ec94e72c9dcf5d15f755e96496d8ccfee9def38b666f" + sha256: "0ff0baec167e308df192398dbd81ec13c1799635885c6aa6ed9ab8b5ed61f52c" url: "https://pub.dev" source: hosted - version: "3.5.1" + version: "4.9.1" cloud_firestore_platform_interface: dependency: transitive description: name: cloud_firestore_platform_interface - sha256: d023142c18c28b2610c23c196e829c96976569cc2aa2f8e45328ae8a64c428d1 + sha256: "5749b81aea93afdce220e02d34369162010d210011054ac494b2c38c4e9ebeb7" url: "https://pub.dev" source: hosted - version: "5.7.7" + version: "5.16.0" cloud_firestore_web: dependency: transitive description: name: cloud_firestore_web - sha256: "3d7d4fa8c1dc5a1f7cb33985ae0ab9924d33d76d4959fe26aed84b7d282887e3" + sha256: fef99ad0599e983092adb1bb01f14a596dba601a7a8efaaffd7b2721d64e2c51 url: "https://pub.dev" source: hosted - version: "2.8.10" + version: "3.7.0" collection: dependency: transitive description: @@ -93,34 +93,34 @@ packages: dependency: "direct main" description: name: firebase_auth - sha256: ca3034d35d6ca894487ec80aa1162a135fef7c5d0abef8154789cbeea3a6deaf + sha256: "6d9be853426ab686d68076b8007ac29b2c31e7d549444a45b5c3fe1abc249fb0" url: "https://pub.dev" source: hosted - version: "3.11.2" + version: "4.9.0" firebase_auth_platform_interface: dependency: transitive description: name: firebase_auth_platform_interface - sha256: ab20ecbc411726e139250a49fa03fe1ae0105fd990c5330b2a148ec08dfb140b + sha256: "2946cfdc17f925fa9771dd0ba3ce9dd2d019100a8685d0557c161f7786ea9b14" url: "https://pub.dev" source: hosted - version: "6.10.1" + version: "6.18.0" firebase_auth_web: dependency: transitive description: name: firebase_auth_web - sha256: bbe4f4fffcc378ca05c3d8ff33853be86dd27d0fafc85a953acaf5190531b6f9 + sha256: d8972d754702a3f4881184706b8056e2837d0dae91613a43b988c960b8e0d988 url: "https://pub.dev" source: hosted - version: "4.6.1" + version: "5.8.0" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "4f1d7c13a909e82ff026679c9b8493cdeb35a9c76bc46c42bf9e2240c9e57e80" + sha256: c78132175edda4bc532a71e01a32964e4b4fcf53de7853a422d96dac3725f389 url: "https://pub.dev" source: hosted - version: "1.24.0" + version: "2.15.1" firebase_core_platform_interface: dependency: transitive description: @@ -133,10 +133,10 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "839f1b48032a61962792cea1225fae030d4f27163867f181d6d2072dd40acbee" + sha256: "4cf4d2161530332ddc3c562f19823fb897ff37a9a774090d28df99f47370e973" url: "https://pub.dev" source: hosted - version: "1.7.3" + version: "2.7.0" flutter: dependency: "direct main" description: flutter @@ -160,14 +160,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" - intl: - dependency: transitive - description: - name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" - source: hosted - version: "0.17.0" js: dependency: transitive description: diff --git a/firestore/pubspec.yaml b/firestore/pubspec.yaml index 89f32d45..59290665 100644 --- a/firestore/pubspec.yaml +++ b/firestore/pubspec.yaml @@ -11,9 +11,9 @@ dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 - firebase_core: ^1.15.0 - firebase_auth: ^3.3.15 - cloud_firestore: ^3.1.13 + firebase_core: ^2.15.1 + firebase_auth: ^4.9.0 + cloud_firestore: ^4.9.1 dev_dependencies: pedantic: ^1.9.0 diff --git a/firestore/test/widget_test.dart b/firestore/test/widget_test.dart index e69de29b..0056c6c6 100644 --- a/firestore/test/widget_test.dart +++ b/firestore/test/widget_test.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('Test fails', (WidgetTester tester) async { + // autopass + }); +} diff --git a/firestore/testapp/app-release.apk b/firestore/testapp/app-release.apk new file mode 100644 index 00000000..0d01121d Binary files /dev/null and b/firestore/testapp/app-release.apk differ diff --git a/firestore/windows/flutter/generated_plugin_registrant.cc b/firestore/windows/flutter/generated_plugin_registrant.cc index 8b6d4680..1a82e7d0 100644 --- a/firestore/windows/flutter/generated_plugin_registrant.cc +++ b/firestore/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); } diff --git a/firestore/windows/flutter/generated_plugins.cmake b/firestore/windows/flutter/generated_plugins.cmake index b93c4c30..fa8a39ba 100644 --- a/firestore/windows/flutter/generated_plugins.cmake +++ b/firestore/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + firebase_core ) list(APPEND FLUTTER_FFI_PLUGIN_LIST