1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import 'dart:async';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'controller.dart';
- class SplashPage extends GetView<SplashController> {
- const SplashPage({super.key});
- @override
- Widget build(BuildContext context) {
- return const ImageAnimation();
- }
- }
- class ImageAnimation extends StatefulWidget {
- const ImageAnimation({super.key});
- @override
- State<ImageAnimation> createState() => _ImageAnimationState();
- }
- class _ImageAnimationState extends State<ImageAnimation>
- with SingleTickerProviderStateMixin {
- late final SplashController _controller;
- late AnimationController _animationController;
- late Animation<double> _animation;
- @override
- void initState() {
- super.initState();
- _controller = Get.find<SplashController>();
- final animationCompleter = Completer<void>();
- Future.wait([
- _controller.loadData(),
- animationCompleter.future,
- ]).then((_) {
- // 等待动画和数据加载,全部完成后跳转路由
- _controller.onRouteTo();
- });
- // 创建动画控制器
- _animationController = AnimationController(
- duration: const Duration(milliseconds: 4200),
- vsync: this,
- );
- // 创建动画
- _animation = Tween<double>(begin: 0, end: 1).animate(_animationController);
- // 启动动画
- _animationController.forward();
- _animationController.addStatusListener((status) {
- if (status == AnimationStatus.completed) {
- // 动画结束
- animationCompleter.complete();
- }
- });
- }
- @override
- void dispose() {
- // 销毁动画控制器
- _animationController.dispose();
- super.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: Theme.of(context).primaryColor,
- body: Center(
- child: AnimatedBuilder(
- animation: _animation,
- builder: (BuildContext context, Widget? child) {
- return Opacity(
- opacity: _animation.value,
- child: Container(
- alignment: Alignment.center,
- // width: 200,
- height: 200,
- padding: const EdgeInsets.only(right: 80),
- child: Image.asset(
- 'assets/images/logo.png',
- fit: BoxFit.fitHeight,
- ),
- ),
- );
- },
- ),
- ),
- );
- }
- }
|