Template
chore: 初始化脚手架 — sunny_mochi 企业级 Flutter 模板
Core 基础设施:Flavor 三包体系、Drift+SQLCipher 加密数据库 7 拦截器 Dio 网络栈、CrashReporter 崩溃日志、Sealed Failure 错误体系 5 色板主题系统、Auth 认证骨架(Clean Architecture)、Dev Panel、Mock Adapter 通过验证:flutter analyze(0 errors)、flutter test(全绿)、staging APK 74.8MB
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:sunny_mochi/core/crash/crash_dialog.dart';
|
||||
import 'package:sunny_mochi/core/crash/crash_reporter.dart';
|
||||
|
||||
/// 应用根部崩溃检测门(wraps AppRoot)。
|
||||
///
|
||||
/// 在第一帧渲染完成后检查 [pendingCrashProvider],若非 null 则强制弹出
|
||||
/// [CrashDialog](barrierDismissible: false)。
|
||||
class CrashGate extends ConsumerStatefulWidget {
|
||||
const CrashGate({super.key, required this.child});
|
||||
final Widget child;
|
||||
|
||||
@override
|
||||
ConsumerState<CrashGate> createState() => _CrashGateState();
|
||||
}
|
||||
|
||||
class _CrashGateState extends ConsumerState<CrashGate> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
final report = ref.read(pendingCrashProvider);
|
||||
if (report != null) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (mounted) {
|
||||
unawaited(
|
||||
showDialog<void>(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (_) => CrashDialog(report: report),
|
||||
),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => widget.child;
|
||||
}
|
||||
Reference in New Issue
Block a user