拼图游戏
home_screen ,随后再触发 AppLovin 原生的全屏合规弹窗(Terms & Conditions),导致游戏观感被生硬打断;同时应用中存在 flutter_native_splash 原生闪屏与内部自定义 Loading 页相互交叠的问题。home_screen,彻底移除侵入性的第三方 SDK 初始化代码(解耦业务与基础服务),并去除了多余的内部过渡页逻辑。main.dart 启动时,使用 FlutterNativeSplash.preserve() 从底层主动接管并冻结设备的原生闪屏。FlutterNativeSplash.remove(),瞬间露出加载完备的游戏大厅。board 对象Null check operator used on a null value at board_play.dart:580board == null 检查
_moveAnimationListener()_successAnimationListener()_dealingAnimationListener() / _dealingAnimationStatusListener()_flipAnimationListener() / _flipAnimationStatusListener()_mergeAnimationListener() / _mergeAnimationStatusListener()_prepareAnimationListener() / _prepareAnimationStatusListener()_totalDealingDuration 空指针崩溃 (Crashlytics Fix)board_play.dart 中,发牌动画启动 Timer.periodic 播放音效,闭包异步引用了 _totalDealingDuration。当用户在动画期间退出关卡导致页面销毁、board 置空时,获取 board!.pieces.length 抛出 Null check operator used on a null value。Null check operator used on a null value at _BoardPlayState._totalDealingDuration(board_play.dart:709)Timer.periodic 前,用局部变量缓存计算结果,隔离由于计时器异步执行导致的对上下文内生命周期的访问。!mounted 判断并立刻 timer.cancel()。_totalDealingDuration 的 get 方法中增加 board == null 兼容。kotlin.UninitializedPropertyAccessException: lateinit property context has not been initializedImageStreamCompleter 抛出异常,进而被 FlutterError.onError 无差别捕获并上报为致命崩溃(Fatal Exception)FlutterError: ClientException: Software caused connection abort / Exception: Downloaded data is too smallisEnvIssue() 网络探针逻辑'Software caused connection abort' 与 'Downloaded data is too small' 字眼的豁免判断FlutterError.onError,将渲染层级捕获到的网络/资源加载异常过滤并只记为 Warning,阻止其调用 recordFlutterFatalError。新增 Remote Config 参数:
ad_crash_prone_devices # Crash 高发设备(完全禁用广告)
ad_anr_prone_devices # ANR 高发设备(禁用广告以防主线程阻塞)
non_phone_devices # 非手机设备(限制某些广告功能)
默认黑名单(可通过 Firebase Console 远程更新):
ad_crash_prone_devices=
"samsung a21s,samsung a31,samsung a12,redmi lancelot,oppo op4efdl1,vivo 2015,vivo 2111,huawei,infinix,motorola borag,motorola hawaiip"
ad_anr_prone_devices=
"hornor hngfy-m,zuum covet,vivo 1820"
non_phone_devices=
"jvc,tcl,transformer"
ApplovinAdsController 增强:
_isAnrProneDevice 标记_isNonPhoneDevice 标记_shouldSkipAds() 逻辑,统一判断是否跳过所有广告预期影响:
性能优化