Skip to content

Commit f4fb145

Browse files
committed
优化闪屏页
1 parent 5806f35 commit f4fb145

File tree

7 files changed

+95
-73
lines changed

7 files changed

+95
-73
lines changed

lib/app/router/unit_router.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_unit/model/category_model.dart';
33
import 'package:flutter_unit/model/widget_model.dart';
4-
import 'package:flutter_unit/views/pages/app/unit_navigation.dart';
5-
import 'package:flutter_unit/views/pages/about/about_me_page.dart';
4+
import 'package:flutter_unit/user_system/pages/login/login_page.dart';
5+
import 'package:flutter_unit/user_system/pages/register/register_page.dart';
66
import 'package:flutter_unit/views/pages/about/about_app_page.dart';
7+
import 'package:flutter_unit/views/pages/about/about_me_page.dart';
78
import 'package:flutter_unit/views/pages/about/version_info.dart';
9+
import 'package:flutter_unit/views/pages/app/unit_navigation.dart';
810
import 'package:flutter_unit/views/pages/category/category_detail.dart';
911
import 'package:flutter_unit/views/pages/category/collect_page.dart';
1012
import 'package:flutter_unit/views/pages/data_manage/data_manage_page.dart';
1113
import 'package:flutter_unit/views/pages/gallery/gallery_page.dart';
1214
import 'package:flutter_unit/views/pages/issues_point/issues_detail.dart';
1315
import 'package:flutter_unit/views/pages/issues_point/issues_point_page.dart';
14-
import 'package:flutter_unit/user_system/pages/login/login_page.dart';
15-
import 'package:flutter_unit/user_system/pages/register/register_page.dart';
1616
import 'package:flutter_unit/views/pages/search/serach_page.dart';
1717
import 'package:flutter_unit/views/pages/setting/code_style_setting.dart';
1818
import 'package:flutter_unit/views/pages/setting/font_setting.dart';
1919
import 'package:flutter_unit/views/pages/setting/item_style_setting.dart';
20+
import 'package:flutter_unit/views/pages/setting/setting_page.dart';
2021
import 'package:flutter_unit/views/pages/setting/theme_color_setting.dart';
2122
import 'package:flutter_unit/views/pages/unit_todo/attr_unit_page.dart';
23+
import 'package:flutter_unit/views/pages/unit_todo/layout_unit_page.dart';
2224
import 'package:flutter_unit/views/pages/unit_todo/point_unit_page.dart';
23-
2425
import 'package:flutter_unit/views/pages/widget_detail/widget_detail_page.dart';
25-
import 'package:flutter_unit/views/pages/unit_todo/layout_unit_page.dart';
26-
import 'package:flutter_unit/views/pages/setting/setting_page.dart';
2726

2827
import 'router_utils.dart';
2928

@@ -63,7 +62,7 @@ class UnitRouter {
6362
switch (settings.name) {
6463
//
6564
case nav:
66-
return Left2RightRouter(child: UnitNavigation());
65+
return Left2RightRouter(child: const UnitNavigation());
6766

6867
// 组件详情页
6968
case widget_detail:

lib/blocs/like/like_event.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,29 @@ import 'package:equatable/equatable.dart';
44
/// contact me by email [email protected]
55
/// 说明:
66
7-
abstract class LikeWidgetEvent extends Equatable {}
7+
abstract class LikeWidgetEvent extends Equatable {
8+
const LikeWidgetEvent();
9+
}
810

911
class EventLoadLikeData extends LikeWidgetEvent {
12+
const EventLoadLikeData();
13+
1014
List<Object> get props => [];
1115
}
1216

1317
class ToggleLikeWidgetEvent extends LikeWidgetEvent {
1418
final int id;
1519

16-
ToggleLikeWidgetEvent({required this.id});
20+
const ToggleLikeWidgetEvent({required this.id});
1721

1822
@override
1923
// TODO: implement props
2024
List<Object> get props => [id];
2125
}
2226

2327
class LoadCollectEvent extends LikeWidgetEvent {
28+
const LoadCollectEvent();
29+
2430
@override
2531
List<Object> get props => [];
2632
}

lib/blocs/widgets/widgets_event.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ abstract class WidgetsEvent extends Equatable {
1515
class EventTabTap extends WidgetsEvent {
1616
final WidgetFamily family;
1717

18-
EventTabTap(this.family);
18+
const EventTabTap(this.family);
1919

2020
}
2121

lib/views/pages/app/flutter_unit.dart

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,18 @@ import 'package:flutter_unit/views/pages/splash/unit_splash.dart';
1313
class FlutterUnit extends StatelessWidget {
1414
@override
1515
Widget build(BuildContext context) {
16-
return BlocBuilder<GlobalBloc, GlobalState>(builder: (_, state) {
17-
return MaterialApp(
18-
showPerformanceOverlay: state.showPerformanceOverlay,
19-
title: StrUnit.appName,
20-
debugShowCheckedModeBanner: false,
21-
onGenerateRoute: UnitRouter.generateRoute,
22-
theme: ThemeData(
23-
primarySwatch: state.themeColor,
24-
fontFamily: state.fontFamily,
25-
),
26-
home: UnitSplash(),
27-
);
28-
});
16+
return BlocBuilder<GlobalBloc, GlobalState>(
17+
builder: (_, state) => MaterialApp(
18+
showPerformanceOverlay: state.showPerformanceOverlay,
19+
title: StrUnit.appName,
20+
debugShowCheckedModeBanner: false,
21+
onGenerateRoute: UnitRouter.generateRoute,
22+
theme: ThemeData(
23+
primarySwatch: state.themeColor,
24+
fontFamily: state.fontFamily,
25+
),
26+
home: const UnitSplash(),
27+
));
2928
}
3029

3130
}

lib/views/pages/app/unit_navigation.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import 'package:flutter_unit/views/pages/widget_home/home_page.dart';
1717
1818

1919
class UnitNavigation extends StatefulWidget {
20+
const UnitNavigation();
21+
2022
@override
2123
_UnitNavigationState createState() => _UnitNavigationState();
2224
}
@@ -26,7 +28,7 @@ class _UnitNavigationState extends State<UnitNavigation> {
2628
final PageController _controller = PageController();
2729

2830
// 禁止 PageView 滑动
29-
final ScrollPhysics neverScroll = const NeverScrollableScrollPhysics();
31+
final ScrollPhysics _neverScroll = const NeverScrollableScrollPhysics();
3032

3133
@override
3234
void dispose() {
@@ -45,7 +47,7 @@ class _UnitNavigationState extends State<UnitNavigation> {
4547
floatingActionButton: _buildSearchButton(context),
4648
body: wrapOverlayTool(
4749
child: PageView(
48-
physics: neverScroll,
50+
physics: _neverScroll,
4951
controller: _controller,
5052
children: <Widget>[
5153
HomePage(),

lib/views/pages/splash/splash_bottom.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
33
import 'package:flutter_unit/app/res/style/unit_text_style.dart';
44

55
class SplashBottom extends StatefulWidget {
6+
const SplashBottom();
7+
68
@override
79
_SplashBottomState createState() => _SplashBottomState();
810
}

lib/views/pages/splash/unit_splash.dart

Lines changed: 61 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,64 @@ import 'unit_paint.dart';
1616
/// 说明: app 闪屏页
1717
1818
class UnitSplash extends StatefulWidget {
19+
const UnitSplash();
20+
1921
@override
2022
_UnitSplashState createState() => _UnitSplashState();
2123
}
2224

2325
class _UnitSplashState extends State<UnitSplash> with TickerProviderStateMixin {
24-
late AnimationController _controller;
26+
late AnimationController _controller;
2527

2628
ValueNotifier<bool> _animEnd = ValueNotifier<bool>(false);
2729

2830
final Duration animTime = const Duration(milliseconds: 1000);
2931
final Duration delayTime = const Duration(milliseconds: 500);
3032
final Duration fadeInTime = const Duration(milliseconds: 600);
3133

34+
late Animation<Offset> logoOffsetAnim;
35+
late Animation<Offset> headOffsetAnim;
36+
late Animation<double> logoScaleAnim;
37+
38+
late UnitPainter unitPainter = UnitPainter(repaint: _controller);
39+
3240
@override
3341
void initState() {
3442
super.initState();
3543

36-
SystemUiOverlayStyle systemUiOverlayStyle =
37-
const SystemUiOverlayStyle(statusBarColor: Colors.transparent);
38-
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
44+
SystemChrome.setSystemUIOverlayStyle(
45+
const SystemUiOverlayStyle(
46+
statusBarColor: Colors.transparent,
47+
),
48+
);
3949

4050
_controller = AnimationController(duration: animTime, vsync: this)
4151
..addStatusListener(_listenStatus)
4252
..forward();
4353

44-
Future.delayed(delayTime).then((e) {
45-
_animEnd.value = true;
46-
});
54+
initAnimation();
55+
56+
Future.delayed(delayTime).then((e) => _animEnd.value = true);
57+
}
58+
59+
void initAnimation() {
60+
logoOffsetAnim = Tween<Offset>(
61+
begin: const Offset(0, 0),
62+
end: const Offset(0, -1.5),
63+
).animate(_controller);
64+
65+
headOffsetAnim = Tween<Offset>(
66+
end: const Offset(0, 0),
67+
begin: const Offset(0, -5),
68+
).animate(_controller);
69+
70+
logoScaleAnim = Tween(begin: 2.0, end: 1.0).animate(_controller);
4771
}
4872

4973
@override
5074
void dispose() {
5175
_controller.dispose();
76+
_animEnd.dispose();
5277
super.dispose();
5378
}
5479

@@ -62,61 +87,52 @@ class _UnitSplashState extends State<UnitSplash> with TickerProviderStateMixin {
6287

6388
@override
6489
Widget build(BuildContext context) {
65-
final double winH = MediaQuery.of(context).size.height;
66-
final double winW = MediaQuery.of(context).size.width;
67-
68-
return BlocListener<GlobalBloc, GlobalState>(
69-
listener: _listenStart,
70-
child: Scaffold(
71-
body: Stack(
90+
final Size winSize = MediaQuery.of(context).size;
91+
return Material(
92+
child: BlocListener<GlobalBloc, GlobalState>(
93+
listener: _listenStart,
94+
child: Stack(
7295
alignment: Alignment.center,
7396
children: <Widget>[
7497
_buildFlutterLogo(),
75-
Container(
76-
width: winW,
77-
height: winH,
78-
child: CustomPaint(
79-
painter: UnitPainter(repaint: _controller),
80-
),
98+
CustomPaint(
99+
painter: unitPainter,
100+
size: winSize,
81101
),
82-
_buildFlutterUnitText(winH, winW),
102+
_buildFlutterUnitText(winSize.height, winSize.width),
83103
_buildHead(),
84-
Positioned(bottom: 15, child: SplashBottom())
104+
const Positioned(bottom: 15, child: SplashBottom())
85105
],
86106
),
87107
),
88108
);
89109
}
90110

91111
Widget _buildFlutterUnitText(double winH, double winW) {
92-
93112
return Positioned(
94113
top: winH / 1.4,
95114
child: ValueListenableBuilder(
115+
child: FlutterUnitText(
116+
text: StrUnit.appName,
117+
color: Theme.of(context).primaryColor,
118+
),
96119
valueListenable: _animEnd,
97-
builder: (_,bool value, __) => value
98-
? FlutterUnitText(
99-
text: StrUnit.appName,
100-
color: Theme.of(context).primaryColor,
101-
)
102-
: SizedBox(),
120+
builder: (_, bool value, Widget? child) => value
121+
? child! : const SizedBox(),
103122
),
104123
);
105124
}
106125

107126
Widget _buildFlutterLogo() {
108127
return SlideTransition(
109-
position: Tween<Offset>(
110-
begin: const Offset(0, 0),
111-
end: const Offset(0, -1.5),
112-
).animate(_controller),
128+
position: logoOffsetAnim,
113129
child: RotationTransition(
114130
turns: _controller,
115131
child: ScaleTransition(
116-
scale: Tween(begin: 2.0, end: 1.0).animate(_controller),
132+
scale: logoScaleAnim,
117133
child: FadeTransition(
118134
opacity: _controller,
119-
child: Container(
135+
child: SizedBox(
120136
height: 120,
121137
child: const FlutterLogo(
122138
size: 60,
@@ -127,20 +143,18 @@ class _UnitSplashState extends State<UnitSplash> with TickerProviderStateMixin {
127143
}
128144

129145
Widget _buildHead() => SlideTransition(
130-
position: Tween<Offset>(
131-
end: const Offset(0, 0),
132-
begin: const Offset(0, -5),
133-
).animate(_controller),
134-
child: Container(
135-
height: 45,
136-
width: 45,
137-
child: Image.asset('assets/images/icon_head.webp'),
138-
));
146+
position: headOffsetAnim,
147+
child: Image.asset(
148+
'assets/images/icon_head.webp',
149+
width: 45,
150+
height: 45,
151+
),
152+
);
139153

140154
// 监听资源加载完毕,启动,触发事件
141155
void _listenStart(BuildContext context, GlobalState state) {
142-
BlocProvider.of<WidgetsBloc>(context).add(EventTabTap(WidgetFamily.statelessWidget));
143-
BlocProvider.of<LikeWidgetBloc>(context).add(EventLoadLikeData());
144-
BlocProvider.of<CategoryBloc>(context).add(EventLoadCategory());
156+
BlocProvider.of<WidgetsBloc>(context).add(const EventTabTap(WidgetFamily.statelessWidget));
157+
BlocProvider.of<LikeWidgetBloc>(context).add(const EventLoadLikeData());
158+
BlocProvider.of<CategoryBloc>(context).add(const EventLoadCategory());
145159
}
146160
}

0 commit comments

Comments
 (0)