Ahmed Fwela

Added splash screen example

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