Untitled

 avatar
unknown
plain_text
4 months ago
3.3 kB
4
Indexable
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:trl_audio/constants/colors.dart';
import 'package:trl_audio/di.dart';
import 'package:trl_audio/extensions/number_ext.dart';
import 'package:trl_audio/libraries/toasts_popups.dart';
import 'package:trl_audio/services/auth_service.dart';
import 'package:trl_audio/services/routes.dart';
import 'package:trl_audio/services/storage_service.dart';
import 'package:trl_audio/utils/assets.dart';
import 'package:trl_audio/utils/size_config.dart';
import 'package:trl_audio/widgets/core/pop_scope_navigator.dart';
import 'package:trl_audio/widgets/library/svg_image.dart';

const _DURATION = Duration(milliseconds: 1200);

class SplashScreen extends StatefulWidget {
  @override
  State<SplashScreen> createState() => _SplashScreenState();
}

class _SplashScreenState extends State<SplashScreen> with TickerProviderStateMixin {
  late AnimationController _progressAnimController;
  late Animation<double> _progressAnimation;

  @override
  void initState() {
    super.initState();
    _progressAnimController = AnimationController(duration: _DURATION, vsync: this);
    _progressAnimation = Tween<double>(begin: 0, end: 1).animate(_progressAnimController);
    _progressAnimController.forward();

    WidgetsBinding.instance.addPostFrameCallback((_) => _navigateAfterDelay());
  }

  Future<void> _navigateAfterDelay() async {
    await Future.delayed(_DURATION);
    sl<ToastPopup>().onToast(message: 'Step 1', isTop: true);

    var authStatus = sl<AuthService>().authStatus ?? false;
    var user = sl<StorageService>().user;

    sl<ToastPopup>().onToast(message: 'Step 2', isTop: true);

    if (!authStatus || user?.id == null) {
      await sl<Routes>().mail().pushAndRemoveUntil();
    } else {
      sl<ToastPopup>().onToast(message: 'Step 4', isTop: true);
      await sl<Routes>().landing(index: 0).push();
    }
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    SizeConfig.initMediaQuery(context);
  }

  @override
  void dispose() {
    _progressAnimController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return PopScopeNavigator(
      canPop: false,
      child: Scaffold(
        body: Container(
          color: dark,
          width: SizeConfig.width,
          height: SizeConfig.height,
          child: Column(
            children: [
              SizedBox(height: 37.height),
              SvgImage(image: Assets.app_icon.app_logo, height: SizeConfig.isMobile ? 48 : 80),
              SizedBox(height: SizeConfig.isMobile ? 24 : 32),
              AnimatedBuilder(
                animation: _progressAnimation,
                builder: (context, child) => Container(
                  width: 40.width,
                  child: _progressIndicator(),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Widget _progressIndicator() {
    return LinearProgressIndicator(
      minHeight: SizeConfig.isMobile ? 4 : 8,
      value: _progressAnimation.value,
      backgroundColor: const Color(0xFF454A58),
      valueColor: const AlwaysStoppedAnimation<Color>(Color(0xFFd1d7e9)),
      borderRadius: BorderRadius.circular(4),
    );
  }
}
Editor is loading...
Leave a Comment