Dar*_*ght 8 dart flutter dart-null-safety
在首次使用Dart/Flutter时,我创建了一个非常简单的演示应用程序,其中包含Drawer. 该应用程序在Android 模拟器中编译并启动,但不久后就中止并显示错误消息Null check operator used on a null value。在 之外Drawer,本地化工作完美无缺。
我到底做错了什么以及如何解决?
\n版本:
\nFlutter 2.2.0 \xe2\x80\xa2 channel stable \xe2\x80\xa2 https://github.com/flutter/flutter.git\nFramework \xe2\x80\xa2 revision b22742018b (12 days ago) \xe2\x80\xa2 2021-05-14 19:12:57 -0700\nEngine \xe2\x80\xa2 revision a9d88a4d18\nTools \xe2\x80\xa2 Dart 2.13.0\nRun Code Online (Sandbox Code Playgroud)\nGitHub 上提供了该应用程序的完整源代码:https://github.com/DarkPurpleKnight/null_issue
\n主要.dart:
\nimport \'package:flutter/material.dart\';\nimport \'package:flutter_localizations/flutter_localizations.dart\';\nimport \'package:flutter_gen/gen_l10n/app_localizations.dart\';\n\n\nvoid main() {\n runApp(NullIssueApp());\n}\n\nclass NullIssueApp extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n title: \'Null issue\',\n localizationsDelegates: [\n AppLocalizations.delegate,\n GlobalMaterialLocalizations.delegate,\n GlobalWidgetsLocalizations.delegate,\n GlobalCupertinoLocalizations.delegate,\n ],\n supportedLocales: [\n const Locale(\'en\', \'\'),\n const Locale(\'de\', \'\'),\n ],\n home: Scaffold(\n drawer: Drawer(\n child: Row(\n children: [Text(AppLocalizations.of(context)!.helloWorld)],\n ),\n ),\n ),\n );\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\n日志:
\nLaunching lib/main.dart on sdk gphone x86 in debug mode...\nRunning Gradle task \'assembleDebug\'...\n\xe2\x9c\x93 Built build/app/outputs/flutter-apk/app-debug.apk.\nDebug service listening on ws://127.0.0.1:40233/5JFMCufV37s=/ws\nSyncing files to device sdk gphone x86...\nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \n\n======== Exception caught by widgets library =======================================================\nThe following _CastError was thrown building NullIssueApp(dirty):\nNull check operator used on a null value\n\nThe relevant error-causing widget was: \n NullIssueApp file:///home/dpk/source/Android/null_issue/lib/main.dart:7:10\nWhen the exception was thrown, this was the stack: \n#0 NullIssueApp.build (package:percent_clock/main.dart:28:57)\n#1 StatelessElement.build (package:flutter/src/widgets/framework.dart:4648:28)\n#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)\n#3 Element.rebuild (package:flutter/src/widgets/framework.dart:4267:5)\n#4 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4553:5)\n...\n====================================================================================================\nD/skia (20273): 1 Shader compilation error\nD/skia (20273): 2 ------------------------\nD/skia (20273): 3 Errors:\nD/skia (20273): 4 \n\nRun Code Online (Sandbox Code Playgroud)\n
这是因为此时您的应用程序AppLocalization尚未完全初始化,因此AppLocalizations.of(context)返回一个null值,当您使用 null 检查运算符时会导致崩溃!。
您需要将您的部件包装Scaffold在一个小部件中,以便在这个新部件中context您AppLocalization准备就绪。
这是我的代码示例,效果很好:
class NullIssueApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Null issue',
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('de', ''),
],
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
drawer: Drawer(
child: Row(
children: [Text(AppLocalizations.of(context)!.helloWorld)],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
截屏
| 归档时间: |
|
| 查看次数: |
4560 次 |
| 最近记录: |