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 createState() => _CrashGateState(); } class _CrashGateState extends ConsumerState { @override void initState() { super.initState(); final report = ref.read(pendingCrashProvider); if (report != null) { WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { unawaited( showDialog( context: context, barrierDismissible: false, builder: (_) => CrashDialog(report: report), ), ); } }); } } @override Widget build(BuildContext context) => widget.child; }