lundi 1 mars 2021

Flutter Web Firestore error: Expected a value of type '((Object?) => Object)?', but got one of type '(Object) => Object?'

I simplified code for reproducing this error. It works with Android Emulator, but fails when getting collection data from Firestore, when running on Web.

Error Message:

Error: [cloud_firestore/unknown] Expected a value of type '((Object?) => Object)?', but got one of type '(Object) => Object?'
    at Object.throw_ [as throw] (http://localhost:58066/dart_sdk.js:5028:11)
    at collection_reference_web.CollectionReferenceWeb.new.get (http://localhost:58066/packages/cloud_firestore_web/src/write_batch_web.dart.lib.js:370:23)
    at get.next (<anonymous>)
    at http://localhost:58066/dart_sdk.js:37206:33
    at _RootZone.runUnary (http://localhost:58066/dart_sdk.js:37077:59)
    at _FutureListener.thenAwait.handleValue (http://localhost:58066/dart_sdk.js:32333:29)
    at handleValueCallback (http://localhost:58066/dart_sdk.js:32860:49)
    at Function._propagateToListeners (http://localhost:58066/dart_sdk.js:32898:17)
    at _Future.new.[_completeWithValue] (http://localhost:58066/dart_sdk.js:32746:23)
    at async._AsyncCallbackEntry.new.callback (http://localhost:58066/dart_sdk.js:32767:35)
    at Object._microtaskLoop (http://localhost:58066/dart_sdk.js:37329:13)
    at _startMicrotaskLoop (http://localhost:58066/dart_sdk.js:37335:13)
    at http://localhost:58066/dart_sdk.js:33106:9


Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, 1.26.0-17.6.pre, on Microsoft Windows [Version 10.0.18363.1379], locale ru-RU)
[√] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
[√] Chrome - develop for the web
[√] Android Studio (version 4.1.0)
[√] IntelliJ IDEA Ultimate Edition (version 2020.1)
[√] VS Code (version 1.53.2)
[√] Connected device (2 available)

main.dart: (MyApp() is just an empty page)

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';

List<String> departments = List.empty(growable: true);

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  await FirebaseAuth.instance.signInWithEmailAndPassword(email: "user1@gmail.com", password: "111111");
  CollectionReference departmentsRef = FirebaseFirestore.instance.collection("Departments");
  QuerySnapshot qsDepartments = await departmentsRef.get(); //HERE I GET AN ERROR
  qsDepartments.docs.forEach((element) {
    Map<String, dynamic>? map = element.data();
    print(map!['name']);
    departments.add(map['name']);
  });
  runApp(MyApp());
}

web/index.html:

<!DOCTYPE html>
<html>
<head>
  <base href="/">

  <meta charset="UTF-8">
  <meta content="IE=Edge" http-equiv="X-UA-Compatible">
  <meta name="description" content="A new Flutter application.">

  <!-- iOS meta tags & icons -->
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="apple-mobile-web-app-title" content="test_web_firestore">
  <link rel="apple-touch-icon" href="icons/Icon-192.png">

  <!-- Favicon -->
  <link rel="icon" type="image/png" href="favicon.png"/>

  <title>test_web_firestore</title>
  <link rel="manifest" href="manifest.json">
</head>
<body>
  <script>
    if ('serviceWorker' in navigator) {
      window.addEventListener('flutter-first-frame', function () {
        navigator.serviceWorker.register('flutter_service_worker.js');
      });
    }
  </script>
  <script src="main.dart.js" type="application/javascript"></script>
  <!-- The core Firebase JS SDK is always required and must be listed first -->
  <script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.2.9/firebase-firestore.js"></script>

  <script>
  // Your web app's Firebase configuration
  var firebaseConfig = {
    apiKey: "AIzaSyA6BARqtxEwWAvYG9etXXz9iknq6PviJCU",
    authDomain: "testwebfirestore.firebaseapp.com",
    projectId: "testwebfirestore",
    storageBucket: "testwebfirestore.appspot.com",
    messagingSenderId: "604806481003",
    appId: "1:604806481003:web:9fe9c74feaceb71ee91d2e"
  };
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
</script>
</body>
</html>

pubspec.yaml:

name: test_web_firestore
description: A new Flutter application.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
  sdk: ">=2.12.0-0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^0.8.0-1.0.nullsafety.1
  firebase_auth: ^0.21.0-1.1.nullsafety.1
  cloud_firestore: ^0.17.0-1.0.nullsafety.0



  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

When running with flutter run --no-sound-null-safety i get another error:

Error: [cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges'
    at Object.throw_ [as throw] (http://localhost:62031/dart_sdk.js:5331:11)
    at collection_reference_web.CollectionReferenceWeb.new.get (http://localhost:62031/packages/cloud_firestore_web/src/write_batch_web.dart.lib.js:370:23)
    at get.next (<anonymous>)
    at http://localhost:62031/dart_sdk.js:39029:33
    at _RootZone.runUnary (http://localhost:62031/dart_sdk.js:38886:58)
    at _FutureListener.thenAwait.handleValue (http://localhost:62031/dart_sdk.js:33872:29)
    at handleValueCallback (http://localhost:62031/dart_sdk.js:34432:49)
    at Function._propagateToListeners (http://localhost:62031/dart_sdk.js:34470:17)
    at _Future.new.[_completeWithValue] (http://localhost:62031/dart_sdk.js:34312:23)
    at async._AsyncCallbackEntry.new.callback (http://localhost:62031/dart_sdk.js:34335:35)
    at Object._microtaskLoop (http://localhost:62031/dart_sdk.js:39173:13)
    at _startMicrotaskLoop (http://localhost:62031/dart_sdk.js:39179:13)
    at http://localhost:62031/dart_sdk.js:34686:9



Aucun commentaire:

Enregistrer un commentaire