Flutter应用UI崩溃堆栈缺失问题求助:如何让堆栈包含问题来源页面信息
Flutter应用UI崩溃堆栈缺失问题求助:如何让堆栈包含问题来源页面信息
各位Flutter开发者们好!我最近遇到一个非常头疼的问题:我的Flutter应用出现了UI崩溃,但崩溃后的堆栈追踪里完全找不到问题来自哪个页面/组件,导致生产环境的崩溃根本没法定位根源,想请教下大家有没有解决办法?
问题复现场景
崩溃的原因是我把一个ListView.separated直接放在了Column内部,没有设置shrinkWrap: true,复现的代码如下:
ListView.separated( // shrinkWrap: true, padding: EdgeInsets.zero, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { return Padding( padding: context.symmetricInsets(vertical: Spacing.space16), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('title', style: theme.textTheme.suisse15Regular), Text('subtitle', style: theme.textTheme.suisse15Regula), // 这里还有个拼写错误suisse15Regula ], ), ); }, separatorBuilder: (context, index) => const UIDivider(), itemCount: 10, ),
现有堆栈的问题
崩溃后,控制台和Crashlytics里的堆栈追踪只显示Flutter框架层的调用,完全没有我自己代码里的页面或组件信息,比如下面这段截取的堆栈:
#0 debugCheckHasBoundedAxis.<anonymous closure> (package:flutter/src/rendering/debug.dart:328:13) #1 debugCheckHasBoundedAxis (package:flutter/src/rendering/debug.dart:387:4) #2 RenderViewport.computeDryLayout (package:flutter/src/rendering/viewport.dart:1372:12) #3 RenderBox.performResize (package:flutter/src/rendering/box.dart:2397:12) #4 RenderObject.layout (package:flutter/src/rendering/object.dart:2374:9) ... #173 _drawFrame (dart:ui/hooks.dart:112:31)
(完整堆栈太长,这里只展示了开头部分)
我已经尝试过的方案
- 试过使用
stack_trace包来格式化堆栈,但没有得到预期效果,还是看不到自己代码的调用信息 - 目前我在
main.dart里是这样捕获全局错误的:
final logger = LoggerGateway(); PlatformDispatcher.instance.onError = (error, stackTrace) { logger.logError(error, stackTrace); return true; }; runApp(AppRoot()); FlutterError.onError = (details) => Zone.current.handleUncaughtError(details.exception, details.stack ?? StackTrace.current);
我的求助需求
现在生产环境里出现这类崩溃时,我完全没法知道是哪个页面触发的问题,想请教各位:有没有办法让崩溃的堆栈追踪里包含我自己代码的调用信息,比如具体是哪个页面的哪个组件导致的这次崩溃?
备注:内容来源于stack exchange,提问作者GGirotto
相关产品推荐
相关产品推荐

