Jonny Borges

add arguments and parameters to getdelegate

... ... @@ -16,6 +16,15 @@ class HomeController extends SuperController<CasesModel> {
append(() => homeRepository.getCases);
}
Country getCountryById(String id) {
final index = int.tryParse(id);
if (index != null) {
return state!.countries[index];
}
return state!.countries.first;
}
@override
void onReady() {
print('The build method is done. '
... ...
... ... @@ -34,8 +34,8 @@ class CountryView extends GetView<HomeController> {
return ListTile(
onTap: () {
//Get.rootDelegate.toNamed('/home/country');
Get.rootDelegate.toNamed('/home/country/details',
arguments: country);
Get.rootDelegate
.offNamed('/home/country/details?id=$index');
},
trailing: CircleAvatar(
backgroundImage: NetworkImage(
... ...
... ... @@ -2,13 +2,13 @@ import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/home_controller.dart';
import '../../domain/entity/cases_model.dart';
class DetailsView extends StatelessWidget {
class DetailsView extends GetView<HomeController> {
@override
Widget build(BuildContext context) {
final country = Get.rootDelegate.arguments<Country>();
final parameter = Get.rootDelegate.parameters;
final country = controller.getCountryById(parameter['id'] ?? '');
return Container(
decoration: BoxDecoration(
image: DecorationImage(
... ...
... ... @@ -32,7 +32,7 @@ class LoginView extends GetView<LoginController> {
onPressed: () {
AuthService.to.login();
final thenTo = Get.rootDelegate.currentConfiguration!
.currentPage!.parameter?['then'];
.currentPage!.parameters?['then'];
Get.rootDelegate.offNamed(thenTo ?? Routes.HOME);
},
),
... ...
... ... @@ -112,6 +112,10 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
return currentConfiguration?.currentPage?.arguments as T;
}
Map<String, String> get parameters {
return currentConfiguration?.currentPage?.parameters ?? {};
}
// void _unsafeHistoryClear() {
// history.clear();
// }
... ... @@ -144,7 +148,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
if (originalEntryIndex >= 0) {
switch (preventDuplicateHandlingMode) {
case PreventDuplicateHandlingMode.PopUntilOriginalRoute:
until(config.location!, popMode: PopMode.Page);
backUntil(config.location!, popMode: PopMode.Page);
break;
case PreventDuplicateHandlingMode.ReorderRoutes:
_unsafeHistoryRemoveAt(originalEntryIndex);
... ... @@ -231,7 +235,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
}
bool _canPopHistory() {
return history.length > 1;
return history.length > 0;
}
Future<bool> canPopHistory() {
... ... @@ -324,7 +328,6 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
}
final decoder = Get.routeTree.matchRoute(page, arguments: arguments);
Get.parameters = decoder.parameters;
decoder.replaceArguments(arguments);
return pushHistory<T>(
... ... @@ -345,7 +348,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
/// Removes routes according to [PopMode]
/// until it reaches the specifc [fullRoute],
/// DOES NOT remove the [fullRoute]
void until(
void backUntil(
String fullRoute, {
PopMode popMode = PopMode.Page,
}) {
... ...
... ... @@ -18,6 +18,14 @@ class RouteDecoder {
treeBranch[index] = _route.copy(arguments: arguments);
}
}
void replaceParameters(Object? arguments) {
final _route = route;
if (_route != null) {
final index = treeBranch.indexOf(_route);
treeBranch[index] = _route.copy(parameters: parameters);
}
}
}
class ParseRouteTree {
... ... @@ -62,8 +70,8 @@ class ParseRouteTree {
final mappedTreeBranch = treeBranch
.map(
(e) => e.value.copy(
parameter: {
if (e.value.parameter != null) ...e.value.parameter!,
parameters: {
if (e.value.parameters != null) ...e.value.parameters!,
...params,
},
name: e.key,
... ...
... ... @@ -30,7 +30,7 @@ class PathDecoded {
class GetPage<T> extends Page<T> {
final GetPageBuilder page;
final bool? popGesture;
final Map<String, String>? parameter;
final Map<String, String>? parameters;
final String? title;
final Transition? transition;
final Curve curve;
... ... @@ -72,7 +72,7 @@ class GetPage<T> extends Page<T> {
this.maintainState = true,
this.curve = Curves.linear,
this.alignment,
this.parameter,
this.parameters,
this.opaque = true,
this.transitionDuration,
this.popGesture,
... ... @@ -119,7 +119,7 @@ class GetPage<T> extends Page<T> {
String? name,
GetPageBuilder? page,
bool? popGesture,
Map<String, String>? parameter,
Map<String, String>? parameters,
String? title,
Transition? transition,
Curve? curve,
... ... @@ -147,7 +147,7 @@ class GetPage<T> extends Page<T> {
name: name ?? this.name,
page: page ?? this.page,
popGesture: popGesture ?? this.popGesture,
parameter: parameter ?? this.parameter,
parameters: parameters ?? this.parameters,
title: title ?? this.title,
transition: transition ?? this.transition,
curve: curve ?? this.curve,
... ...
... ... @@ -196,7 +196,6 @@ class GetObserver extends NavigatorObserver {
value.isDialog = currentRoute.isDialog ? false : value.isDialog;
});
if (oldRoute is GetPageRoute) {
print(oldRoute.reference);
GetInstance().reloadDependencyByRoute(oldRoute.reference);
}
... ... @@ -223,7 +222,6 @@ class GetObserver extends NavigatorObserver {
});
if (route is GetPageRoute) {
print(route.reference);
GetInstance().reloadDependencyByRoute(route.reference);
}
routing?.call(_routeSend);
... ...
... ... @@ -196,7 +196,7 @@ class PageRedirect {
final _r = (isUnknown ? unknownRoute : route)!;
return GetPageRoute<T>(
page: _r.page,
parameter: _r.parameter,
parameter: _r.parameters,
settings: isUnknown
? RouteSettings(
name: _r.name,
... ... @@ -225,7 +225,7 @@ class PageRedirect {
return GetPageRoute<T>(
page: _r.page,
parameter: _r.parameter,
parameter: _r.parameters,
alignment: _r.alignment,
title: _r.title,
maintainState: _r.maintainState,
... ... @@ -277,10 +277,10 @@ class PageRedirect {
}
void addPageParameter(GetPage route) {
if (route.parameter == null) return;
if (route.parameters == null) return;
final parameters = Get.parameters;
parameters.addEntries(route.parameter!.entries);
parameters.addEntries(route.parameters!.entries);
Get.parameters = parameters;
}
}
... ...
... ... @@ -25,7 +25,7 @@ void main() {
GetPage(
name: '/pen',
page: () => Container(),
parameter: testParams,
parameters: testParams,
),
GetPage(name: '/paper', page: () => Container()),
],
... ... @@ -48,7 +48,7 @@ void main() {
final match = tree.matchRoute(searchRoute);
expect(match, isNotNull);
expect(match.route!.name, searchRoute);
final testRouteParam = match.route!.parameter!;
final testRouteParam = match.route!.parameters!;
for (final tParam in testParams.entries) {
expect(testRouteParam[tParam.key], tParam.value);
}
... ...