ForestG
ForestG

Reputation: 18123

Flutter build web builds without sound null safety and runs on error

Running flutter build web gives the following error:

flutter build web
Changing current working directory to: /home/forest/projects/icell/i_cell_parking_manager

Building without sound null safety
For more information see https://dart.dev/null-safety/unsound-null-safety

Target dart2js failed: Exception: ../../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore_web-1.0.1/lib/src/interop/utils/utils.dart:15:41:
Error: The argument type 'Object? Function(Object)' can't be assigned to the parameter type 'Object? Function(Object?)?' because 'Object?' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  return core_interop.dartify(jsObject, (Object object) {
                                        ^
../../../snap/flutter/common/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore_web-1.0.1/lib/src/interop/utils/utils.dart:39:41:
Error: The argument type 'dynamic Function(Object)' can't be assigned to the parameter type 'Object? Function(Object?)?' because 'Object?' is nullable and 'Object' isn't.
 - 'Object' is from 'dart:core'.
  return core_interop.jsify(dartObject, (Object object) {
                                        ^
Error: Compilation failed.


Compiling lib/main.dart for the Web...                              8.3s
Exception: Failed to compile application for the Web.

Building for android works without any error (flutter build apk).

flutter doctor

Flutter 2.0.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 4d7946a68d (10 days ago) • 2021-03-18 17:24:33 -0700
Engine • revision 3459eb2436
Tools • Dart 2.12.2

Running flutter doctor...
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.3, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Chrome - develop for the web
[!] Android Studio (not installed)
[✓] IntelliJ IDEA Ultimate Edition (version 2020.2)
[✓] Connected device (2 available)
! Doctor found issues in 1 category.

(The Androd studio not installed is quite strange, as I am running the project from it, and I use a virtual device from AVD with no problem...)

my index.html has the latest lib imported:

...

  <script src="https://www.gstatic.com/firebasejs/7.8.0/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-app.js"></script>

relevant pubspec.yaml parts:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  flutter_spinkit: "^4.1.2"
  cloud_firestore: ^1.0.1
  cloud_functions: "^1.0.2"
  provider: ^5.0.0
  google_sign_in: ^5.0.0
  firebase_core: ^1.0.1
  firebase_messaging: ^9.0.0
  firebase_auth: ^1.0.1

Upvotes: 2

Views: 8815

Answers (3)

ccpizza
ccpizza

Reputation: 31756

To make a release build without null safety use:

flutter build web --no-sound-null-safety

The generated files will be placed under build/web.

NOTE: The --no-sound-null-safety must be passed as a flag to the web subcommand, and not to build or flutter.


NOTE2: The build sets <base href="/"> therefore unless you serve your app from the webserver root you'll need to adjust the value to the correct path. There is a github issue to make the base href configurable via a command line parameter. The current docs recommend to set the base href by hand. UPDATE: the corresponding pull request is now merged to the master branch.

Upvotes: 6

U Sai Ko
U Sai Ko

Reputation: 11

Type in your terminal if you are using mac or linux, to export this EXTRA_FRONT_END_OPTIONS variable as below

export EXTRA_FRONT_END_OPTIONS=--no-sound-null-safety

Upvotes: 0

ForestG
ForestG

Reputation: 18123

Solution was to run

flutter pub upgrade and flutter pub outdated then flutter pub get and it solved the issue.

I suspect something got cached and not all the new dependencies were used in web build at start, but has no idea why did it work all of a sudden :\

Upvotes: 1

Related Questions