diff --git a/lib/app/router/unit_router.dart b/lib/app/router/unit_router.dart index a47ecab..068468d 100644 --- a/lib/app/router/unit_router.dart +++ b/lib/app/router/unit_router.dart @@ -1,29 +1,28 @@ import 'package:flutter/material.dart'; import 'package:flutter_unit/model/category_model.dart'; import 'package:flutter_unit/model/widget_model.dart'; -import 'package:flutter_unit/views/pages/app/unit_navigation.dart'; -import 'package:flutter_unit/views/pages/about/about_me_page.dart'; +import 'package:flutter_unit/user_system/pages/login/login_page.dart'; +import 'package:flutter_unit/user_system/pages/register/register_page.dart'; import 'package:flutter_unit/views/pages/about/about_app_page.dart'; +import 'package:flutter_unit/views/pages/about/about_me_page.dart'; import 'package:flutter_unit/views/pages/about/version_info.dart'; +import 'package:flutter_unit/views/pages/app/unit_navigation.dart'; import 'package:flutter_unit/views/pages/category/category_detail.dart'; import 'package:flutter_unit/views/pages/category/collect_page.dart'; import 'package:flutter_unit/views/pages/data_manage/data_manage_page.dart'; import 'package:flutter_unit/views/pages/gallery/gallery_page.dart'; import 'package:flutter_unit/views/pages/issues_point/issues_detail.dart'; import 'package:flutter_unit/views/pages/issues_point/issues_point_page.dart'; -import 'package:flutter_unit/user_system/pages/login/login_page.dart'; -import 'package:flutter_unit/user_system/pages/register/register_page.dart'; import 'package:flutter_unit/views/pages/search/serach_page.dart'; import 'package:flutter_unit/views/pages/setting/code_style_setting.dart'; import 'package:flutter_unit/views/pages/setting/font_setting.dart'; import 'package:flutter_unit/views/pages/setting/item_style_setting.dart'; +import 'package:flutter_unit/views/pages/setting/setting_page.dart'; import 'package:flutter_unit/views/pages/setting/theme_color_setting.dart'; import 'package:flutter_unit/views/pages/unit_todo/attr_unit_page.dart'; -import 'package:flutter_unit/views/pages/unit_todo/point_unit_page.dart'; - -import 'package:flutter_unit/views/pages/widget_detail/widget_detail_page.dart'; import 'package:flutter_unit/views/pages/unit_todo/layout_unit_page.dart'; -import 'package:flutter_unit/views/pages/setting/setting_page.dart'; +import 'package:flutter_unit/views/pages/unit_todo/point_unit_page.dart'; +import 'package:flutter_unit/views/pages/widget_detail/widget_detail_page.dart'; import 'router_utils.dart'; @@ -63,7 +62,7 @@ class UnitRouter { switch (settings.name) { // case nav: - return Left2RightRouter(child: UnitNavigation()); + return Left2RightRouter(child: const UnitNavigation()); // 组件详情页 case widget_detail: diff --git a/lib/blocs/like/like_event.dart b/lib/blocs/like/like_event.dart index 8593aad..f5b1d9a 100644 --- a/lib/blocs/like/like_event.dart +++ b/lib/blocs/like/like_event.dart @@ -4,16 +4,20 @@ import 'package:equatable/equatable.dart'; /// contact me by email 1981462002@qq.com /// 说明: -abstract class LikeWidgetEvent extends Equatable {} +abstract class LikeWidgetEvent extends Equatable { + const LikeWidgetEvent(); +} class EventLoadLikeData extends LikeWidgetEvent { + const EventLoadLikeData(); + List get props => []; } class ToggleLikeWidgetEvent extends LikeWidgetEvent { final int id; - ToggleLikeWidgetEvent({required this.id}); + const ToggleLikeWidgetEvent({required this.id}); @override // TODO: implement props @@ -21,6 +25,8 @@ class ToggleLikeWidgetEvent extends LikeWidgetEvent { } class LoadCollectEvent extends LikeWidgetEvent { + const LoadCollectEvent(); + @override List get props => []; } diff --git a/lib/blocs/widgets/widgets_event.dart b/lib/blocs/widgets/widgets_event.dart index a5280cf..d8c539a 100644 --- a/lib/blocs/widgets/widgets_event.dart +++ b/lib/blocs/widgets/widgets_event.dart @@ -15,7 +15,7 @@ abstract class WidgetsEvent extends Equatable { class EventTabTap extends WidgetsEvent { final WidgetFamily family; - EventTabTap(this.family); + const EventTabTap(this.family); } diff --git a/lib/views/pages/app/flutter_unit.dart b/lib/views/pages/app/flutter_unit.dart index 6d6b494..1b074bc 100644 --- a/lib/views/pages/app/flutter_unit.dart +++ b/lib/views/pages/app/flutter_unit.dart @@ -13,19 +13,18 @@ import 'package:flutter_unit/views/pages/splash/unit_splash.dart'; class FlutterUnit extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocBuilder(builder: (_, state) { - return MaterialApp( - showPerformanceOverlay: state.showPerformanceOverlay, - title: StrUnit.appName, - debugShowCheckedModeBanner: false, - onGenerateRoute: UnitRouter.generateRoute, - theme: ThemeData( - primarySwatch: state.themeColor, - fontFamily: state.fontFamily, - ), - home: UnitSplash(), - ); - }); + return BlocBuilder( + builder: (_, state) => MaterialApp( + showPerformanceOverlay: state.showPerformanceOverlay, + title: StrUnit.appName, + debugShowCheckedModeBanner: false, + onGenerateRoute: UnitRouter.generateRoute, + theme: ThemeData( + primarySwatch: state.themeColor, + fontFamily: state.fontFamily, + ), + home: const UnitSplash(), + )); } } diff --git a/lib/views/pages/app/unit_navigation.dart b/lib/views/pages/app/unit_navigation.dart index 2eaa99f..9ce0b56 100644 --- a/lib/views/pages/app/unit_navigation.dart +++ b/lib/views/pages/app/unit_navigation.dart @@ -17,6 +17,8 @@ import 'package:flutter_unit/views/pages/widget_home/home_page.dart'; class UnitNavigation extends StatefulWidget { + const UnitNavigation(); + @override _UnitNavigationState createState() => _UnitNavigationState(); } @@ -26,7 +28,7 @@ class _UnitNavigationState extends State { final PageController _controller = PageController(); // 禁止 PageView 滑动 - final ScrollPhysics neverScroll = const NeverScrollableScrollPhysics(); + final ScrollPhysics _neverScroll = const NeverScrollableScrollPhysics(); @override void dispose() { @@ -45,7 +47,7 @@ class _UnitNavigationState extends State { floatingActionButton: _buildSearchButton(context), body: wrapOverlayTool( child: PageView( - physics: neverScroll, + physics: _neverScroll, controller: _controller, children: [ HomePage(), diff --git a/lib/views/pages/splash/splash_bottom.dart b/lib/views/pages/splash/splash_bottom.dart index 9fee644..7662d79 100644 --- a/lib/views/pages/splash/splash_bottom.dart +++ b/lib/views/pages/splash/splash_bottom.dart @@ -3,6 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_unit/app/res/style/unit_text_style.dart'; class SplashBottom extends StatefulWidget { + const SplashBottom(); + @override _SplashBottomState createState() => _SplashBottomState(); } diff --git a/lib/views/pages/splash/unit_splash.dart b/lib/views/pages/splash/unit_splash.dart index 42d35ac..64f6ab2 100644 --- a/lib/views/pages/splash/unit_splash.dart +++ b/lib/views/pages/splash/unit_splash.dart @@ -16,12 +16,14 @@ import 'unit_paint.dart'; /// 说明: app 闪屏页 class UnitSplash extends StatefulWidget { + const UnitSplash(); + @override _UnitSplashState createState() => _UnitSplashState(); } class _UnitSplashState extends State with TickerProviderStateMixin { - late AnimationController _controller; + late AnimationController _controller; ValueNotifier _animEnd = ValueNotifier(false); @@ -29,26 +31,49 @@ class _UnitSplashState extends State with TickerProviderStateMixin { final Duration delayTime = const Duration(milliseconds: 500); final Duration fadeInTime = const Duration(milliseconds: 600); + late Animation logoOffsetAnim; + late Animation headOffsetAnim; + late Animation logoScaleAnim; + + late UnitPainter unitPainter = UnitPainter(repaint: _controller); + @override void initState() { super.initState(); - SystemUiOverlayStyle systemUiOverlayStyle = - const SystemUiOverlayStyle(statusBarColor: Colors.transparent); - SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); + SystemChrome.setSystemUIOverlayStyle( + const SystemUiOverlayStyle( + statusBarColor: Colors.transparent, + ), + ); _controller = AnimationController(duration: animTime, vsync: this) ..addStatusListener(_listenStatus) ..forward(); - Future.delayed(delayTime).then((e) { - _animEnd.value = true; - }); + initAnimation(); + + Future.delayed(delayTime).then((e) => _animEnd.value = true); + } + + void initAnimation() { + logoOffsetAnim = Tween( + begin: const Offset(0, 0), + end: const Offset(0, -1.5), + ).animate(_controller); + + headOffsetAnim = Tween( + end: const Offset(0, 0), + begin: const Offset(0, -5), + ).animate(_controller); + + logoScaleAnim = Tween(begin: 2.0, end: 1.0).animate(_controller); } @override void dispose() { _controller.dispose(); + _animEnd.dispose(); super.dispose(); } @@ -62,26 +87,21 @@ class _UnitSplashState extends State with TickerProviderStateMixin { @override Widget build(BuildContext context) { - final double winH = MediaQuery.of(context).size.height; - final double winW = MediaQuery.of(context).size.width; - - return BlocListener( - listener: _listenStart, - child: Scaffold( - body: Stack( + final Size winSize = MediaQuery.of(context).size; + return Material( + child: BlocListener( + listener: _listenStart, + child: Stack( alignment: Alignment.center, children: [ _buildFlutterLogo(), - Container( - width: winW, - height: winH, - child: CustomPaint( - painter: UnitPainter(repaint: _controller), - ), + CustomPaint( + painter: unitPainter, + size: winSize, ), - _buildFlutterUnitText(winH, winW), + _buildFlutterUnitText(winSize.height, winSize.width), _buildHead(), - Positioned(bottom: 15, child: SplashBottom()) + const Positioned(bottom: 15, child: SplashBottom()) ], ), ), @@ -89,34 +109,30 @@ class _UnitSplashState extends State with TickerProviderStateMixin { } Widget _buildFlutterUnitText(double winH, double winW) { - return Positioned( top: winH / 1.4, child: ValueListenableBuilder( + child: FlutterUnitText( + text: StrUnit.appName, + color: Theme.of(context).primaryColor, + ), valueListenable: _animEnd, - builder: (_,bool value, __) => value - ? FlutterUnitText( - text: StrUnit.appName, - color: Theme.of(context).primaryColor, - ) - : SizedBox(), + builder: (_, bool value, Widget? child) => value + ? child! : const SizedBox(), ), ); } Widget _buildFlutterLogo() { return SlideTransition( - position: Tween( - begin: const Offset(0, 0), - end: const Offset(0, -1.5), - ).animate(_controller), + position: logoOffsetAnim, child: RotationTransition( turns: _controller, child: ScaleTransition( - scale: Tween(begin: 2.0, end: 1.0).animate(_controller), + scale: logoScaleAnim, child: FadeTransition( opacity: _controller, - child: Container( + child: SizedBox( height: 120, child: const FlutterLogo( size: 60, @@ -127,20 +143,18 @@ class _UnitSplashState extends State with TickerProviderStateMixin { } Widget _buildHead() => SlideTransition( - position: Tween( - end: const Offset(0, 0), - begin: const Offset(0, -5), - ).animate(_controller), - child: Container( - height: 45, - width: 45, - child: Image.asset('assets/images/icon_head.webp'), - )); + position: headOffsetAnim, + child: Image.asset( + 'assets/images/icon_head.webp', + width: 45, + height: 45, + ), + ); // 监听资源加载完毕,启动,触发事件 void _listenStart(BuildContext context, GlobalState state) { - BlocProvider.of(context).add(EventTabTap(WidgetFamily.statelessWidget)); - BlocProvider.of(context).add(EventLoadLikeData()); - BlocProvider.of(context).add(EventLoadCategory()); + BlocProvider.of(context).add(const EventTabTap(WidgetFamily.statelessWidget)); + BlocProvider.of(context).add(const EventLoadLikeData()); + BlocProvider.of(context).add(const EventLoadCategory()); } }