Я рефакторирую свое приложение для поддержки локализации, используя Это руководство. В какой-то момент мне нужно переключиться с использованием свойства home для использования initialRoute и routes. Соответствующий фрагмент кода выглядит так:

return PlatformApp(
            material: (_, platform) => MaterialAppData(theme: materialThemeData),
            cupertino: (_, platform) => CupertinoAppData(theme: cupertinoTheme),
            onGenerateTitle: (context) {
              return AppLocalizations.of(context).appTitle;
            },
            localizationsDelegates: [
              AppLocalizations.delegate,
              GlobalMaterialLocalizations.delegate,
              GlobalWidgetsLocalizations.delegate,
              GlobalCupertinoLocalizations.delegate,
            ],
            supportedLocales: [
              const Locale('de', ''),
              const Locale('en', ''),
            ],
            initialRoute: '/',
            routes: {
              '/': (context) {
                return MyHomeScreen(title: AppLocalizations.of(context).appTitle);
              },
            },
            // home:MyHomeScreen(title: 'Static Title'),
          );
        }

Когда я пытаюсь запустить это на iOS, возникает следующая ошибка:

======== Exception caught by widgets library =======================================================
The following _CastError was thrown building Builder(dirty):
Null check operator used on a null value

The relevant error-causing widget was: 
  CupertinoApp file:///Users/user/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_platform_widgets-1.7.1/lib/src/platform_app.dart:673:14
When the exception was thrown, this was the stack: 
#0      _WidgetsAppState._onGenerateRoute.<anonymous closure> (package:flutter/src/widgets/app.dart:1196:48)
#1      CupertinoPageRoute.buildContent (package:flutter/src/cupertino/route.dart:359:55)
#2      CupertinoRouteTransitionMixin.buildPage (package:flutter/src/cupertino/route.dart:227:26)
#3      _ModalScopeState.build.<anonymous closure>.<anonymous closure> (package:flutter/src/widgets/routes.dart:840:53)
#4      Builder.build (package:flutter/src/widgets/basic.dart:7555:48)
...
====================================================================================================

Я использую flutter_platform_widgets для этого приложения, и я уже пробовал следующие вещи:

  • Запустите версию Android и посмотрите, произойдет ли то же самое: происходит примерно то же самое, только пакет материалов выдает ошибку вместо купертино
  • Замените локализованный заголовок статическим текстом, но результат такой же

Похоже, мне не хватает чего-то очевидного (я новичок во Flutter). Когда я комментирую initialRoute и routes и использую вместо них home, все работает нормально, но, очевидно, без локализаций. Итак, что мне здесь не хватает?

Вывод Flutter Doctor:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.0.6, on macOS 11.2.3 20D91 darwin-x64, locale en-CH)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.2)
[✓] Connected device (4 available)

• No issues found!
0
lawicko 21 Май 2021 в 18:45
Кто ваш родитель initialRoute? Главный виджет, который вы запускаете.
 – 
Nisanth Reddy
21 Май 2021 в 18:54
Я добавил больше кода, чтобы вы могли видеть больше контекста.
 – 
lawicko
21 Май 2021 в 20:22
1
Вы уезжаете из дома? Это очень странно. Я отследил ошибку в коде флаттера, и похоже, что он каким-то образом считает, что home не равно нулю. Вы пробовали flutter clean перед перезапуском приложения, просто для здравомыслия?
 – 
puelo
21 Май 2021 в 21:23

1 ответ

Лучший ответ

Комментарий от @puelo помог мне в этом разобраться.

Проблема заключалась в том, что в процессе INIT INIT I init The Firebase App, и в зависимости от результата я предоставил другой виджет приложения. Если FireBase все еще загружается или бросил ошибку, я представил простое приложение с набором свойств {home - это была проблема. Теперь я изменил его, чтобы приложение всегда одинаково, но состояние загрузки и ошибки обрабатываются вместо этого навигацию.

0
lawicko 25 Май 2021 в 12:25