added splash screen

This commit is contained in:
amirrezaghabeli
2025-09-22 16:04:49 +03:30
parent 197ad18618
commit f1214d8a28
14 changed files with 253 additions and 12 deletions
+49
View File
@@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/view_models/auth_view_model.dart';
import '../../../core/constants/assets.dart';
class DesktopSplashPage extends StatefulWidget {
const DesktopSplashPage({super.key});
@override
State<DesktopSplashPage> createState() => _DesktopSplashPageState();
}
class _DesktopSplashPageState extends State<DesktopSplashPage> {
late final AuthViewModel viewModel;
@override
void initState() {
super.initState();
viewModel = context.read<AuthViewModel>();
Future.delayed(const Duration(seconds: 1), () async {
await viewModel.checkIsLoggedIn();
});
viewModel.addListener(_viewModelListener);
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
void _viewModelListener() {
if (viewModel.isLoggedIn) {
Router.neglect(context, () => const HomeRouteData().go(context));
} else {
Router.neglect(context, () => const LoginScreenRoute().go(context));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Image.asset(AssetsManager.logoBigPng, fit: BoxFit.cover),
),
);
}
}
+52
View File
@@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/core/constants/assets.dart';
import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/view_models/auth_view_model.dart';
class MobileSplashPage extends StatefulWidget {
const MobileSplashPage({super.key});
@override
State<MobileSplashPage> createState() => _MobileSplashPageState();
}
class _MobileSplashPageState extends State<MobileSplashPage> {
late final AuthViewModel viewModel;
@override
void initState() {
viewModel = context.read<AuthViewModel>();
Future.delayed(const Duration(seconds: 1), () async {
await viewModel.checkIsLoggedIn();
});
viewModel.addListener(_viewModelListener);
super.initState();
}
void _viewModelListener() {
if (viewModel.isLoggedIn) {
WidgetsBinding.instance.addPostFrameCallback((_) {
Router.neglect(context, () => const HomeRouteData().go(context));
});
} else {
WidgetsBinding.instance.addPostFrameCallback((_) {
Router.neglect(context, () => const LoginScreenRoute().go(context));
});
}
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Image.asset(AssetsManager.logoBigPng, fit: BoxFit.cover),
),
);
}
}
+20
View File
@@ -0,0 +1,20 @@
import 'package:flutter/material.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/views/shared/responsive_builder.dart';
import 'package:tm_app/views/splash/pages/d_splash_page.dart';
import 'package:tm_app/views/splash/pages/m_splash_page.dart';
import 'package:tm_app/views/splash/pages/t_splash_page.dart';
class SplashScreen extends StatelessWidget {
const SplashScreen({super.key});
@override
Widget build(BuildContext context) {
SizeConfig.init(context);
return const ResponsiveBuilder(
mobile: MobileSplashPage(),
tablet: TabletSplashPage(),
desktop: DesktopSplashPage(),
);
}
}
+49
View File
@@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tm_app/view_models/auth_view_model.dart';
import '../../../core/constants/assets.dart';
import '../../../core/routes/app_routes.dart';
class TabletSplashPage extends StatefulWidget {
const TabletSplashPage({super.key});
@override
State<TabletSplashPage> createState() => _TabletSplashPageState();
}
class _TabletSplashPageState extends State<TabletSplashPage> {
late final AuthViewModel viewModel;
@override
void initState() {
viewModel = context.read<AuthViewModel>();
Future.delayed(const Duration(seconds: 1), () async {
await viewModel.checkIsLoggedIn();
});
viewModel.addListener(_viewModelListener);
super.initState();
}
void _viewModelListener() {
if (viewModel.isLoggedIn) {
Router.neglect(context, () => const HomeRouteData().go(context));
} else {
Router.neglect(context, () => const LoginScreenRoute().go(context));
}
}
@override
void dispose() {
viewModel.removeListener(_viewModelListener);
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Image.asset(AssetsManager.logoBigPng, fit: BoxFit.cover),
),
);
}
}