Оператор проверки на нулевое значение, используемый для нулевого значения при использовании маршрутов
С помощью этого руководства я реорганизую свое приложение для поддержки локализаций . В какой-то момент мне нужно переключиться с использования свойства на использование и. Соответствующий фрагмент кода выглядит так:
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!
1 ответ
Комментарий от @puelo помог мне в этом разобраться.
Проблема заключалась в том, что ранее в процессе инициализации я запускал приложение Firebase и в зависимости от результата предоставлял другой виджет приложения. Если firebase все еще загружается или выдает ошибку, я представил простое приложение с
home
набор свойств - это была проблема. Теперь я изменил его так, чтобы приложение всегда было одинаковым, но вместо этого для обработки состояния загрузки и ошибки используется навигация.