Files
syncrow-app/lib/features/splash/view/splash_view.dart
2024-03-13 13:52:22 +03:00

87 lines
2.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_app/features/auth/model/token.dart';
import 'package:syncrow_app/generated/assets.dart';
import 'package:syncrow_app/navigation/routing_constants.dart';
class SplashView extends StatelessWidget {
const SplashView({super.key});
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getTokenAndValidate(context),
builder: (context, snapshot) {
if (snapshot.hasData) {
if (snapshot.data ?? false) {
Future.delayed(const Duration(seconds: 1), () {
Navigator.pushReplacementNamed(context, Routes.homeRoute);
});
} else {
Future.delayed(const Duration(seconds: 1), () {
Navigator.pushReplacementNamed(context, Routes.authLogin);
});
}
}
return Scaffold(
body: Stack(
alignment: Alignment.center,
children: [
Container(
width: MediaQuery.sizeOf(context).width,
height: MediaQuery.sizeOf(context).height,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
Assets.imagesBackground,
),
fit: BoxFit.cover,
),
),
),
Container(
width: MediaQuery.sizeOf(context).width,
height: MediaQuery.sizeOf(context).height,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(Assets.imagesVector),
fit: BoxFit.cover,
opacity: 0.9,
),
),
),
SvgPicture.asset(
Assets.imagesLogo,
width: 240,
)
],
),
);
},
);
}
Future<bool> getTokenAndValidate(BuildContext context) async {
return await const FlutterSecureStorage()
.read(key: Token.loginAccessTokenKey)
.then((value) {
if (value == null) {
return false;
}
print("Decoding token Started");
var tokenData = Token.decodeToken(value ?? "");
print("checking token data");
if (tokenData.containsKey('exp')) {
var exp = tokenData['exp'] ?? 0;
var currentTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
print('time: $currentTime exp: $exp');
return currentTime < exp;
} else {
return false;
}
});
}
}