import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'auth/auth_screen.dart'; import 'auth/session_store.dart'; import 'camera/camera_screen.dart'; import 'container.dart'; import 'home/home_screen.dart'; import 'payment/paywall_screen.dart'; class ObserverApp extends StatelessWidget { final AppContainer container; const ObserverApp({super.key, required this.container}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ Provider.value(value: container), Provider.value(value: container.sessionStore), ChangeNotifierProvider.value(value: container.authViewModel), ChangeNotifierProvider.value(value: container.homeViewModel), ChangeNotifierProvider.value(value: container.paywallViewModel), ], child: MaterialApp( title: '视野', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.green), ), initialRoute: '/gate', routes: { '/gate': (_) => const StartupGate(), '/login': (_) => const AuthScreen(), '/home': (_) => const HomeScreen(), '/paywall': (_) => const PaywallScreen(), '/camera': (_) => const CameraScreen(), }, ), ); } } /// 启动门卫:无登录 token → 登录页;已登录 → 主界面(到期状态由主界面展示) class StartupGate extends StatefulWidget { const StartupGate({super.key}); @override State createState() => _StartupGateState(); } class _StartupGateState extends State { @override void initState() { super.initState(); _check(); } Future _check() async { final session = context.read(); final token = await session.readToken(); if (!mounted) return; Navigator.of(context) .pushReplacementNamed(token == null ? '/login' : '/home'); } @override Widget build(BuildContext context) { return const Scaffold( body: Center(child: CircularProgressIndicator()), ); } }