bytedance/flutter_ume

debug模式enable为false时重建导致app异常卡死

Jensonss opened this issue · 0 comments

Steps to Reproduce 复现步骤

  1. debug模式未启动ume:
    final openUme = false.obs;
    runApp(Obx(() { return UMEWidget( child: MyApp(), enable: openUme.value, ); }));
  2. 使用Get.updateLocale(Locale.fromSubtags(languageCode: val));切换语言

Error log 错误日志

异常原因:'package:flutter/src/widgets/overlay.dart': Failed assertion: line 147 pos 12: '_overlay != null': is not true.

原因

未启动ume时,_UMEWidgetStateOverlayEntry _overlayEntry = OverlayEntry(builder: (ctx) => Container());
虽然有值,但是没有插入显示,所以_overlayEntry属性OverlayState? _overlay;为空的。
但是当重建时执行了void _removeOverlay() => _overlayEntry.remove();
然后调用了assert(_overlay != null);这里debug模式断言失败导致app异常卡死。
我本地修改_overlayEntry为可空就没问题了。

class _UMEWidgetState extends State<UMEWidget> {
//  OverlayEntry _overlayEntry = OverlayEntry(builder: (ctx) => Container());
OverlayEntry?  _overlayEntry ;


}