重现步骤
- 在Flutter Web和Android上运行提供的代码示例
- 点击按钮触发错误
- 检查错误日志
描述:
我遇到了一个问题,即在Flutter Web中错误消息不再正确显示。最初,在使用Flutter版本3.10.6时,错误消息可以正确显示。然而,它们突然停止显示,没有任何对代码的更改。我升级到最新版本3.22.2,但问题仍然存在。错误消息在Android上仍然可以正确显示。
预期结果
Web应用程序中的错误消息应与初始版本3.10.6中的错误消息一样正确显示。
实际结果
Web应用程序中的错误消息在Flutter版本3.10.6和3.22.2中以不同的方式显示。这个问题不影响在Android上正确显示错误消息的版本。
代码示例
代码示例
Future<void> main() async {
runApp(MaterialApp(
initialRoute: "/",
routes: {
"/": (context) => const Home(),
},
));
}
class Home extends StatefulWidget {
const Home({super.key});
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
String? nullableString;
void _triggerError() {
// This will cause a "Null check operator used on a null value" error
String nonNullableString = nullableString!;
print(nonNullableString);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Flutter Null Check Error Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _triggerError,
child: const Text('Trigger Error'),
),
),
);
}
}
截图或视频
截图/视频演示
[上传媒体在这里]
日志
日志
Android
The following _TypeError was thrown while handling a gesture:
Null check operator used on a null value
When the exception was thrown, this was the stack:
#0 _HomeState._triggerError (package:design_studio/main_billdesk.dart:61:46)
#1 _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1171:21)
#2 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:344:24)
#3 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:652:11)
#4 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:309:5)
#5 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:242:7)
#6 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:696:9)
#7 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)
#8 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:143:9)
#9 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13)
#10 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)
#11 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)
#12 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:495:19)
#13 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:475:22)
#14 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:425:11)
#15 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:420:7)
#16 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:383:5)
#17 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:330:7)
#18 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:299:9)
#19 _invoke1 (dart:ui/hooks.dart:328:13)
#20 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:442:7)
#21 _dispatchPointerDataPacket (dart:ui/hooks.dart:262:31)
Handler: "onTap"
Recognizer: TapGestureRecognizer#8cc5e
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(203.9, 454.6)
finalLocalPosition: Offset(84.0, 28.7)
button: 1
sent tap down
Web
The following TypeErrorImpl was thrown while handling a gesture:
Unexpected null value.
When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 296:3 throw_
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 586:18 nullCheck
packages/design_studio/main_billdesk.dart 61:46 [_triggerError]
packages/flutter/src/material/ink_well.dart 1171:21 handleTap
packages/flutter/src/gestures/recognizer.dart 344:24 invokeCallback
packages/flutter/src/gestures/tap.dart 652:11 handleTapUp
packages/flutter/src/gestures/tap.dart 309:5 [_checkUp]
packages/flutter/src/gestures/tap.dart 242:7 handlePrimaryPointer
packages/flutter/src/gestures/recognizer.dart 696:9 handleEvent
packages/flutter/src/gestures/pointer_router.dart 98:7 [_dispatch]
packages/flutter/src/gestures/pointer_router.dart 143:9 <fn>
dart-sdk/lib/_internal/js_dev_runtime/private/linked_hash_map.dart 21:7 forEach
packages/flutter/src/gestures/pointer_router.dart 141:17 [_dispatchEventToRoutes]
packages/flutter/src/gestures/pointer_router.dart 127:7 route
packages/flutter/src/gestures/binding.dart 495:5 handleEvent
packages/flutter/src/gestures/binding.dart 475:14 dispatchEvent
packages/flutter/src/rendering/binding.dart 425:11 dispatchEvent
packages/flutter/src/gestures/binding.dart 420:7 [_handlePointerEventImmediately]
packages/flutter/src/gestures/binding.dart 383:5 handlePointerEvent
packages/flutter/src/gestures/binding.dart 330:7 [_flushPointerEventQueue]
packages/flutter/src/gestures/binding.dart 299:9 [_handlePointerDataPacket]
lib/_engine/engine/platform_dispatcher.dart 1419:5 invoke1
lib/_engine/engine/platform_dispatcher.dart 333:5 invokeOnPointerDataPacket
lib/_engine/engine/pointer_binding.dart 398:30 [_sendToFramework]
lib/_engine/engine/pointer_binding.dart 224:7 onPointerData
lib/_engine/engine/pointer_binding.dart 1001:20 <fn>
lib/_engine/engine/pointer_binding.dart 930:7 <fn>
lib/_engine/engine/pointer_binding.dart 531:9 loggedHandler
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 426:37 _checkAndCall
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 431:39 dcall
Handler: "onTap"
Recognizer: TapGestureRecognizer#d525f
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(930.0, 504.0)
finalLocalPosition: Offset(33.3, 19.5)
button: 1
sent tap down
Flutter Doctor输出
Doctor输出
3.10.6
[√] Flutter (Channel stable, 3.10.6, on Microsoft Windows [Version 10.0.22621.3593], locale en-IN)
• Flutter version 3.10.6 on channel stable at C:\src\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision f468f3366c (11 months ago), 2023-07-12 15:19:05 -0700
• Engine revision cdbeda788a
• Dart version 3.0.6
• DevTools version 2.23.1
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
• Android SDK at C:\Users\Admin\AppData\Local\Android\sdk
• Platform android-34, build-tools 33.0.1
• Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
• Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.9.1)
• Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
• Visual Studio Community 2022 version 17.9.34616.47
• Windows 10 SDK version 10.0.22621.0
[√] Android Studio (version 2022.2)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin can be installed from:
[√] Connected device (4 available)
• CPH2467 (mobile) • 1a715d74 • android-arm64 • Android 14 (API 34)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.22621.3593]
• Chrome (web) • chrome • web-javascript • Google Chrome 126.0.6478.61
• Edge (web) • edge • web-javascript • Microsoft Edge 126.0.2592.56
[√] Network resources
• All expected network resources are available.
• No issues found!
3.22.2
[√] Flutter (Channel stable, 3.22.2, on Microsoft Windows [Version 10.0.22621.3593], locale en-IN)
• Flutter version 3.22.2 on channel stable at C:\Users\Admin\fvm\versions\3.22.2
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 761747bfc5 (12 days ago), 2024-06-05 22:15:13 +0200
• Engine revision edd8546116
• Dart version 3.4.3
• DevTools version 2.34.3
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
• Android SDK at C:\Users\Admin\AppData\Local\Android\sdk
• Platform android-34, build-tools 33.0.1
• Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
• Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.1)
• Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community
• Visual Studio Community 2022 version 17.9.34616.47
• Windows 10 SDK version 10.0.22621.0
[√] Android Studio (version 2022.2)
• Android Studio at C:\Program Files\Android\Android Studio
• Flutter plugin can be installed from:
https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694)
[√] VS Code (version 1.89.1)
• VS Code at C:\Users\Admin\AppData\Local\Programs\Microsoft VS Code
• Flutter extension version 3.90.0
[√] Connected device (4 available)
• CPH2467 (mobile) • 1a715d74 • android-arm64 • Android 14 (API 34)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.22621.3593]
• Chrome (web) • chrome • web-javascript • Google Chrome 126.0.6478.61
• Edge (web) • edge • web-javascript • Microsoft Edge 126.0.2592.56
[√] Network resources
• All expected network resources are available.
• No issues found!
9条答案
按热度按时间2w3kk1z51#
@KaushikGupta007
您希望在web中看到的预期控制台日志或行为是什么?目前web显示异常的方式似乎与android同步,例如:
如果您仔细观察,类名与在android中抛出的相同。
col17t5w2#
$x\in{1,2,3,4}$
A
zqdjd7g93#
Facing similar issue
I recently updated to 3.22.2, since then i stopped getting details of any error. Just shows 'Error'.
jvidinwx4#
我得到了最新稳定版本的以下内容:
sxissh065#
我最近更新到了3.22.2版本,从那时起我就不再收到任何错误的详细信息了。只显示“错误”。
是的,我也遇到了同样的问题。遗憾的是,这就是升级的结果。根据Flutter的经验法则,每发布一个新稳定版本,就会有一个新的不稳定版本出现。
我也尝试过3.16.9和3.19.3版本。
g0czyy6m6#
我最近更新到了3.22.2版本,从那以后我就不再收到任何错误的详细信息了。只显示“错误”。
是的,我也遇到了同样的问题。遗憾的是,这就是升级后的结果。根据Flutter的经验法则,每发布一个新稳定版本,就会有一个新的不稳定版本出现。
我还尝试了3.16.9和3.19.3版本,但在运行Web时仍然显示“错误”,而在Android上运行时却能显示正确的消息。
oiopk7p57#
我在最新的稳定版本(3.22.3)和主分支上运行时遇到了以下问题:
这不是唯一的术语,所以我想我们现在看到的异常是意料之中的?
yvgpqqbh8#
由于Flutter在不同平台(Android和Web)处理异常和堆栈跟踪的方式不同,因此出现了不同的错误。然而,根本问题是相同的:在一个空值上使用了空值检查操作符(!)。
wd2eg0qa9#
感谢您的更新。根据报告和行为,我将保持这个问题对团队的关注/跟踪。