Ahmed Fwela

Added splash screen example

import 'dart:async';
import 'package:get/get.dart';
import 'package:async/async.dart';
class SplashService extends GetxService {
final welcomeStr = ['GetX', 'Rules!'];
final activeStr = 0.obs;
final memo = AsyncMemoizer<void>();
Future<void> init() {
return memo.runOnce(_initFunction);
}
void _changeActiveString() {
activeStr.value = (activeStr.value + 1) % welcomeStr.length;
}
Future<void> _initFunction() async {
final t = Timer.periodic(
Duration(milliseconds: 500),
(t) => _changeActiveString(),
);
//simulate some long running operation
await Future.delayed(Duration(seconds: 5));
//cancel the timer once we are done
t.cancel();
}
}
... ...
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/splash_service.dart';
class SplashView extends GetView<SplashService> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Obx(
() => Text(
controller.welcomeStr[controller.activeStr.value],
style: TextStyle(fontSize: 20),
),
),
CircularProgressIndicator(),
],
),
),
);
}
}
... ...
import 'package:example_nav2/app/modules/splash/controllers/splash_service.dart';
import 'package:example_nav2/app/modules/splash/views/splash_view.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
... ... @@ -10,10 +12,23 @@ void main() {
title: "Application",
initialBinding: BindingsBuilder(
() {
Get.put(SplashService());
Get.put(AuthService());
},
),
getPages: AppPages.routes,
builder: (context, child) {
return FutureBuilder<void>(
key: ValueKey('initFuture'),
future: Get.find<SplashService>().init(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return child ?? SizedBox.shrink();
}
return SplashView();
},
);
},
// routeInformationParser: GetInformationParser(
// // initialRoute: Routes.HOME,
// ),
... ...