import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:responsive_framework/responsive_framework.dart'; import 'package:umeng_apm_sdk/umeng_apm_sdk.dart'; import 'package:wow_english/common/blocs/cachebloc/cache_bloc.dart'; import 'package:wow_english/common/widgets/hide_keyboard_widget.dart'; import 'package:wow_english/pages/tab/blocs/tab_bloc.dart'; import 'package:wow_english/pages/user/bloc/user_bloc.dart'; import 'package:wow_english/route/route.dart'; class App extends StatelessWidget { const App([this._navigatorObserver]); final NavigatorObserver? _navigatorObserver; @override Widget build(BuildContext context) { return ScreenUtilInit( designSize: const Size(667, 375), builder: (_, __) => MultiBlocProvider( providers: [ BlocProvider(create: (_) => TabBloc()), BlocProvider(create: (_) => CacheBloc()), BlocProvider(create: (_) => UserBloc()), ], child: HideKeyboard( child: MaterialApp( title: 'WowEnglish', theme: ThemeData( fontFamily: 'HannotateSC', colorScheme: ColorScheme.fromSeed(seedColor: Colors.white), useMaterial3: true, ), builder: EasyLoading.init( builder: (context, child) => ResponsiveBreakpoints(breakpoints: const [ Breakpoint(start: 0, end: 450, name: MOBILE), Breakpoint(start: 0, end: 450, name: PHONE), Breakpoint(start: 451, end: 800, name: TABLET), Breakpoint(start: 801, end: 1920, name: DESKTOP), Breakpoint(start: 1921, end: double.infinity, name: '4K'), ], child: child!)), initialRoute: AppRouteName.splash, navigatorKey: AppRouter.navigatorKey, onGenerateRoute: AppRouter.generateRoute, navigatorObservers: [ // 带入ApmNavigatorObserver实例用于路由监听 // 如果不带入SDK监听器将无法获知页面(PV)入栈退栈行为,错误率(Dart异常数/FlutterPV次数)将异常攀升。 _navigatorObserver ?? ApmNavigatorObserver.singleInstance ], ), )), ); } }