Ahmed Fwela

Merge branch 'fix-router-outlet'

@@ -71,9 +71,7 @@ class HomeView extends GetView<HomeController> { @@ -71,9 +71,7 @@ class HomeView extends GetView<HomeController> {
71 shape: StadiumBorder(), 71 shape: StadiumBorder(),
72 ), 72 ),
73 onPressed: () async { 73 onPressed: () async {
74 - final data =  
75 - await Get.rootDelegate.toNamed('/home/country');  
76 - print('DATA: $data'); 74 + await Get.rootDelegate.toNamed('/home/country');
77 }, 75 },
78 child: Text( 76 child: Text(
79 'fetch_country'.tr, 77 'fetch_country'.tr,
  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 // ),
@@ -2,8 +2,6 @@ @@ -2,8 +2,6 @@
2 // Generated file. Do not edit. 2 // Generated file. Do not edit.
3 // 3 //
4 4
5 -// clang-format off  
6 -  
7 #include "generated_plugin_registrant.h" 5 #include "generated_plugin_registrant.h"
8 6
9 7
@@ -2,8 +2,6 @@ @@ -2,8 +2,6 @@
2 // Generated file. Do not edit. 2 // Generated file. Do not edit.
3 // 3 //
4 4
5 -// clang-format off  
6 -  
7 #ifndef GENERATED_PLUGIN_REGISTRANT_ 5 #ifndef GENERATED_PLUGIN_REGISTRANT_
8 #define GENERATED_PLUGIN_REGISTRANT_ 6 #define GENERATED_PLUGIN_REGISTRANT_
9 7
@@ -56,5 +56,5 @@ class GetNavConfig extends RouteInformation { @@ -56,5 +56,5 @@ class GetNavConfig extends RouteInformation {
56 56
57 @override 57 @override
58 String toString() => ''' 58 String toString() => '''
59 -======GetNavConfig=====\ncurrentTreeBranch: $currentTreeBranch\ncurrentPage: $currentPage\n======GetNavConfig====='''; 59 +======GetNavConfig=====\nlocation: $location\ncurrentTreeBranch: $currentTreeBranch\n======GetNavConfig=====''';
60 } 60 }
@@ -311,7 +311,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -311,7 +311,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
311 return route; 311 return route;
312 } 312 }
313 313
314 - Future<T> toNamed<T>( 314 + Future<void> toNamed(
315 String page, { 315 String page, {
316 dynamic arguments, 316 dynamic arguments,
317 Map<String, String>? parameters, 317 Map<String, String>? parameters,
@@ -324,10 +324,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -324,10 +324,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
324 final decoder = Get.routeTree.matchRoute(page, arguments: arguments); 324 final decoder = Get.routeTree.matchRoute(page, arguments: arguments);
325 decoder.replaceArguments(arguments); 325 decoder.replaceArguments(arguments);
326 326
327 - final completer = Completer<T>();  
328 -  
329 if (decoder.route != null) { 327 if (decoder.route != null) {
330 - _allCompleters[decoder.route!] = completer;  
331 await pushHistory( 328 await pushHistory(
332 GetNavConfig( 329 GetNavConfig(
333 currentTreeBranch: decoder.treeBranch, 330 currentTreeBranch: decoder.treeBranch,
@@ -335,8 +332,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -335,8 +332,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
335 state: null, //TODO: persist state? 332 state: null, //TODO: persist state?
336 ), 333 ),
337 ); 334 );
338 -  
339 - return completer.future;  
340 } else { 335 } else {
341 ///TODO: IMPLEMENT ROUTE NOT FOUND 336 ///TODO: IMPLEMENT ROUTE NOT FOUND
342 337
@@ -344,7 +339,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -344,7 +339,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
344 } 339 }
345 } 340 }
346 341
347 - Future<T?>? offAndToNamed<T>( 342 + Future<void>? offAndToNamed(
348 String page, { 343 String page, {
349 dynamic arguments, 344 dynamic arguments,
350 int? id, 345 int? id,
@@ -361,13 +356,13 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -361,13 +356,13 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
361 return toNamed(page, arguments: arguments, parameters: parameters); 356 return toNamed(page, arguments: arguments, parameters: parameters);
362 } 357 }
363 358
364 - Future<T> offNamed<T>( 359 + Future<void> offNamed(
365 String page, { 360 String page, {
366 dynamic arguments, 361 dynamic arguments,
367 Map<String, String>? parameters, 362 Map<String, String>? parameters,
368 }) async { 363 }) async {
369 history.removeLast(); 364 history.removeLast();
370 - return toNamed<T>(page, arguments: arguments, parameters: parameters); 365 + return toNamed(page, arguments: arguments, parameters: parameters);
371 } 366 }
372 367
373 /// Removes routes according to [PopMode] 368 /// Removes routes according to [PopMode]
@@ -375,7 +370,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -375,7 +370,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
375 /// DOES NOT remove the [fullRoute] 370 /// DOES NOT remove the [fullRoute]
376 Future<void> backUntil( 371 Future<void> backUntil(
377 String fullRoute, { 372 String fullRoute, {
378 - PopMode popMode = PopMode.Page, 373 + PopMode popMode = PopMode.History,
379 }) async { 374 }) async {
380 // remove history or page entries until you meet route 375 // remove history or page entries until you meet route
381 var iterator = currentConfiguration; 376 var iterator = currentConfiguration;
@@ -406,7 +401,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -406,7 +401,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
406 @override 401 @override
407 Future<bool> popRoute({ 402 Future<bool> popRoute({
408 Object? result, 403 Object? result,
409 - PopMode popMode = PopMode.Page, 404 + PopMode popMode = PopMode.History,
410 }) async { 405 }) async {
411 //Returning false will cause the entire app to be popped. 406 //Returning false will cause the entire app to be popped.
412 final wasPopup = await handlePopupRoutes(result: result); 407 final wasPopup = await handlePopupRoutes(result: result);
@@ -420,8 +415,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -420,8 +415,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
420 return false; 415 return false;
421 } 416 }
422 417
423 - final _allCompleters = <GetPage, Completer>{};  
424 -  
425 bool _onPopVisualRoute(Route<dynamic> route, dynamic result) { 418 bool _onPopVisualRoute(Route<dynamic> route, dynamic result) {
426 final didPop = route.didPop(result); 419 final didPop = route.didPop(result);
427 if (!didPop) { 420 if (!didPop) {
@@ -436,9 +429,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig> @@ -436,9 +429,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
436 if (config != null) { 429 if (config != null) {
437 _removeHistoryEntry(config); 430 _removeHistoryEntry(config);
438 } 431 }
439 - if (_allCompleters.containsKey(settings)) {  
440 - _allCompleters[settings]?.complete(route.popped);  
441 - }  
442 } 432 }
443 refresh(); 433 refresh();
444 434
@@ -467,7 +457,7 @@ class GetNavigator extends Navigator { @@ -467,7 +457,7 @@ class GetNavigator extends Navigator {
467 } 457 }
468 return true; 458 return true;
469 }, 459 },
470 - onGenerateRoute: (RouteSettings settings) { 460 + onGenerateRoute: (settings) {
471 final selectedPageList = 461 final selectedPageList =
472 pages.where((element) => element.name == settings.name); 462 pages.where((element) => element.name == settings.name);
473 if (selectedPageList.isNotEmpty) { 463 if (selectedPageList.isNotEmpty) {