Ошибка появляется только в режиме выпуска, а не в режиме отладки - PullRequest
0 голосов
/ 28 октября 2019

В режиме отладки все работает нормально, но когда я запускаю приложение в режиме выпуска, он выдает такой экран: 1

, и когда я пытаюсь разместить приложение на firebase, я получаю этот экран: 2

Я не уверен, как справиться с этой ошибкой, так как по этому вопросу не так много информации. Но, основываясь на ошибке «No firebase app», я думаю, что ошибка может быть в моем main.dart.

main.dart

void main() {
  assert(() {
    fb.initializeApp(
      apiKey: "",
      authDomain: "",
      databaseURL: "",
      projectId: "",
      storageBucket: "",
      messagingSenderId: "",
    );

    return true;
  }());

  WidgetsFlutterBinding.ensureInitialized();
  BlocSupervisor.delegate = GeneralBlocDelegate();

  runApp(MultiRepositoryProvider(
      providers: [
        RepositoryProvider<UserRepository>(
            builder: (context) => UserRepository()),
      ],
      child: MultiBlocProvider(providers: [
        BlocProvider<AuthBloc>(
          builder: (context) => AuthBloc(
              userRepository: RepositoryProvider.of<UserRepository>(context))
            ..add(AppStarted()),
        ),
      ], child: App())));
}

index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>my website</title>
</head>
<body>
  <script src="main.dart.js" type="application/javascript"></script>

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

  <script src="/__/firebase/7.2.2/firebase-app.js"></script>
  <script src="/__/firebase/7.2.2/firebase-auth.js"></script>
  <script src="/__/firebase/7.2.2/firebase-firestore.js"></script>
  <script src="/__/firebase/init.js"></script>

</body>
</html>

pubspec.yaml

description: A new Flutter project.
version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2

  firebase: ^6.0.0
  flutter_bloc: ^1.0.0
  equatable: ^0.6.1
  font_awesome_flutter: ^8.5.0

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true
  assets:
    - assets/images/

1 Ответ

2 голосов
/ 28 октября 2019

Проблема 1: Использование функции assert() для инициализации приложения

Вы вызываете метод fb.initializeApp() внутри метода assert(), который не будет вызываться в сборке выпуска. Метод assert полезен при разработке для добавления дополнительных проверок. Он не должен содержать или использоваться для обработки какой-либо функциональной / бизнес-логики. Проверьте этот раздел языкового тура дартс. В нем говорится, что метод assert игнорируется в рабочем режиме.

В рабочем коде утверждения игнорируются, а аргументы для assert не оцениваются.

Проблема 2: Отсутствует информация об активах в pupspec.yaml

В вашем index.html я вижу, что вы пытаетесь загрузить некоторые .js файлы, подобные этому /__/firebase/init.js. Сборка Flutter не сохранит ее в папке сборки, пока вы не отметите ее как актив в pubspec.yaml.

Предполагается, что вы поместили все свои файлы .js, необходимые для приложения, в папку с именем /js/init.js, как показано ниже.

В моем случае папка js/ параллельнадо lib/. Это мой выбор, но вы можете выбрать, какой вы хотите.

enter image description here

Вам нужна такая запись в вашем pubspec.yaml.

assets:
  - js/init.js
  - js/firebase-app.js

ИЛИ Просто включите всю папку следующим образом.

assets:
  - js/

То же самое относится ко всем активам, таким как изображения, данные json и т. Д. Проверьтеэта ссылка для более подробной информации.

Возможная проблема 3: Неправильная ссылка на локальный .js файл в Index.html

В вашем index.htmlВы пытаетесь загрузить какой-то локальный файл .js, как упоминалось ранее. Я думаю, что вы должны загрузить эти файлы, как показано ниже, если вы следуете моей предложенной структуре папок. Вероятно, вам следует отредактировать его по собственному выбору.


<script src="assets/js/init.js" type="application/javascript"></script>

<script src="assets/js/firebase-app.js" type="application/javascript"></script>

Надеюсь, он поможетСчастливого порхания.

...