Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
fluttertpc_get
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Jonny Borges
2021-08-09 08:18:44 -0300
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
ed9ddcf8e7e5142d5597699a3949c28a1fa24bcf
ed9ddcf8
1 parent
932eb089
fix navigate to same route
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
124 additions
and
36 deletions
lib/get_instance/src/get_instance.dart
lib/get_navigation/src/nav2/get_router_delegate.dart
lib/get_navigation/src/router_report.dart
lib/get_navigation/src/routes/default_route.dart
lib/get_navigation/src/routes/get_route.dart
lib/get_navigation/src/routes/observers/route_observer.dart
lib/get_instance/src/get_instance.dart
View file @
ed9ddcf
...
...
@@ -161,18 +161,31 @@ class GetInstance {
bool
fenix
=
false
,
})
{
final
key
=
_getKey
(
S
,
name
);
_singl
.
putIfAbsent
(
key
,
()
=>
_InstanceBuilderFactory
<
S
>(
if
(
_singl
.
containsKey
(
key
))
{
final
dep
=
_singl
[
key
];
if
(
dep
!=
null
&&
dep
.
isDirty
)
{
_singl
[
key
]
=
_InstanceBuilderFactory
<
S
>(
isSingleton
,
builder
,
permanent
,
false
,
fenix
,
name
,
)
,
lateRemove:
dep
as
_InstanceBuilderFactory
<
S
>
,
);
}
}
else
{
_singl
[
key
]
=
_InstanceBuilderFactory
<
S
>(
isSingleton
,
builder
,
permanent
,
false
,
fenix
,
name
,
);
}
}
/// Initializes the dependencies for a Class Instance [S] (or tag),
/// If its a Controller, it starts the lifecycle process.
...
...
@@ -222,6 +235,16 @@ class GetInstance {
}
}
void
markAsDirty
<
S
>({
String
?
tag
,
String
?
key
})
{
final
newKey
=
key
??
_getKey
(
S
,
tag
);
if
(
_singl
.
containsKey
(
newKey
))
{
final
dep
=
_singl
[
newKey
];
if
(
dep
!=
null
)
{
dep
.
isDirty
=
true
;
}
}
}
/// Initializes the controller
S
_startController
<
S
>({
String
?
tag
})
{
final
key
=
_getKey
(
S
,
tag
);
...
...
@@ -258,7 +281,8 @@ class GetInstance {
S
find
<
S
>({
String
?
tag
})
{
final
key
=
_getKey
(
S
,
tag
);
if
(
isRegistered
<
S
>(
tag:
tag
))
{
if
(
_singl
[
key
]
==
null
)
{
final
dep
=
_singl
[
key
];
if
(
dep
==
null
)
{
if
(
tag
==
null
)
{
throw
'Class "
$S
" is not registered'
;
}
else
{
...
...
@@ -266,11 +290,16 @@ class GetInstance {
}
}
// if (dep.lateRemove != null) {
// dep.isDirty = true;
// if(dep.fenix)
// }
/// although dirty solution, the lifecycle starts inside
/// `initDependencies`, so we have to return the instance from there
/// to make it compatible with `Get.create()`.
final
i
=
_initDependencies
<
S
>(
name:
tag
);
return
i
??
_singl
[
key
]!
.
getDependency
()
as
S
;
return
i
??
dep
.
getDependency
()
as
S
;
}
else
{
// ignore: lines_longer_than_80_chars
throw
'"
$S
" not found. You need to call "Get.put(
$S
())" or "Get.lazyPut(()=>
$S
())"'
;
...
...
@@ -324,7 +353,16 @@ class GetInstance {
return
false
;
}
final
builder
=
_singl
[
newKey
]!;
final
dep
=
_singl
[
newKey
];
if
(
dep
==
null
)
return
false
;
final
_InstanceBuilderFactory
builder
;
if
(
dep
.
isDirty
)
{
builder
=
dep
.
lateRemove
??
dep
;
}
else
{
builder
=
dep
;
}
if
(
builder
.
permanent
&&
!
force
)
{
Get
.
log
(
...
...
@@ -346,8 +384,15 @@ class GetInstance {
}
if
(
builder
.
fenix
)
{
//TODO: Remove if is late remove
builder
.
dependency
=
null
;
builder
.
isInit
=
false
;
return
true
;
}
else
{
if
(
dep
.
lateRemove
!=
null
)
{
dep
.
lateRemove
=
null
;
Get
.
log
(
'"
$newKey
" deleted from memory'
);
return
false
;
}
else
{
_singl
.
remove
(
newKey
);
if
(
_singl
.
containsKey
(
newKey
))
{
...
...
@@ -355,10 +400,10 @@ class GetInstance {
}
else
{
Get
.
log
(
'"
$newKey
" deleted from memory'
);
}
}
return
true
;
}
}
}
/// Delete all registered Class Instances and, closes any open
/// controllers `DisposableInterface`, cleans up the memory
...
...
@@ -382,11 +427,11 @@ class GetInstance {
});
}
void
reload
<
S
>(
{
String
?
tag
,
void
reload
<
S
>({
String
?
tag
,
String
?
key
,
bool
force
=
false
,
bool
closeInstance
=
true
})
{
})
{
final
newKey
=
key
??
_getKey
(
S
,
tag
);
final
builder
=
_getDependency
<
S
>(
tag:
tag
,
key:
newKey
);
...
...
@@ -406,7 +451,7 @@ class GetInstance {
return
;
}
if
(
i
is
GetLifeCycleBase
&&
closeInstance
)
{
if
(
i
is
GetLifeCycleBase
)
{
i
.
onDelete
();
Get
.
log
(
'"
$newKey
" onDelete() called'
);
}
...
...
@@ -467,6 +512,10 @@ class _InstanceBuilderFactory<S> {
bool
isInit
=
false
;
_InstanceBuilderFactory
<
S
>?
lateRemove
;
bool
isDirty
=
false
;
String
?
tag
;
_InstanceBuilderFactory
(
...
...
@@ -475,8 +524,9 @@ class _InstanceBuilderFactory<S> {
this
.
permanent
,
this
.
isInit
,
this
.
fenix
,
this
.
tag
,
);
this
.
tag
,
{
this
.
lateRemove
,
});
void
_showInitLog
()
{
if
(
tag
==
null
)
{
...
...
lib/get_navigation/src/nav2/get_router_delegate.dart
View file @
ed9ddcf
...
...
@@ -319,7 +319,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
return
route
;
}
Future
<
void
>
toNamed
(
Future
<
T
>
toNamed
<
T
>
(
String
page
,
{
dynamic
arguments
,
Map
<
String
,
String
>?
parameters
,
...
...
@@ -332,13 +332,19 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
final
decoder
=
Get
.
routeTree
.
matchRoute
(
page
,
arguments:
arguments
);
decoder
.
replaceArguments
(
arguments
);
await
pushHistory
(
final
completer
=
Completer
<
T
>();
_allCompleters
[
decoder
.
route
!]
=
completer
;
pushHistory
(
GetNavConfig
(
currentTreeBranch:
decoder
.
treeBranch
,
location:
page
,
state:
null
,
//TODO: persist state?
),
);
return
completer
.
future
;
}
Future
<
void
>
offNamed
(
...
...
@@ -400,6 +406,8 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
return
false
;
}
final
_allCompleters
=
<
GetPage
,
Completer
>{};
bool
_onPopVisualRoute
(
Route
<
dynamic
>
route
,
dynamic
result
)
{
final
didPop
=
route
.
didPop
(
result
);
if
(!
didPop
)
{
...
...
lib/get_navigation/src/router_report.dart
View file @
ed9ddcf
...
...
@@ -7,7 +7,7 @@ import '../../get.dart';
class
RouterReportManager
<
T
>
{
/// Holds a reference to `Get.reference` when the Instance was
/// created to manage the memory.
static
final
Map
<
String
,
Route
?
>
_routesKey
=
{};
static
final
Map
<
Route
?,
String
>
_routesKey
=
{};
/// Stores the onClose() references of instances created with `Get.create()`
/// using the `Get.reference`.
...
...
@@ -29,7 +29,7 @@ class RouterReportManager<T> {
/// Links a Class instance [S] (or [tag]) to the current route.
/// Requires usage of `GetMaterialApp`.
static
void
reportDependencyLinkedToRoute
(
String
depedencyKey
)
{
_routesKey
.
putIfAbsent
(
depedencyKey
,
()
=>
_current
)
;
_routesKey
[
_current
]
=
depedencyKey
;
}
static
void
clearRouteKeys
()
{
...
...
@@ -47,9 +47,9 @@ class RouterReportManager<T> {
if
(
Get
.
smartManagement
!=
SmartManagement
.
onlyBuilder
)
{
WidgetsBinding
.
instance
!.
addPostFrameCallback
((
_
)
{
///TODO: Is necessary this comparator?
if
(
_current
!=
disposed
)
{
//
if (_current != disposed) {
_removeDependencyByRoute
(
disposed
);
}
//
}
});
}
}
...
...
@@ -57,8 +57,8 @@ class RouterReportManager<T> {
static
void
reportRouteWillDispose
(
Route
disposed
)
{
final
keysToRemove
=
<
String
>[];
_routesKey
.
forEach
((
key
,
value
)
{
if
(
value
==
disposed
)
{
keysToRemove
.
add
(
key
);
if
(
key
==
disposed
)
{
keysToRemove
.
add
(
value
);
}
});
...
...
@@ -74,7 +74,8 @@ class RouterReportManager<T> {
}
for
(
final
element
in
keysToRemove
)
{
GetInstance
().
reload
(
key:
element
,
closeInstance:
false
);
GetInstance
().
markAsDirty
(
key:
element
);
//_routesKey.remove(element);
}
...
...
@@ -88,8 +89,8 @@ class RouterReportManager<T> {
static
void
_removeDependencyByRoute
(
Route
routeName
)
{
final
keysToRemove
=
<
String
>[];
_routesKey
.
forEach
((
key
,
value
)
{
if
(
value
==
routeName
)
{
keysToRemove
.
add
(
key
);
if
(
key
==
routeName
)
{
keysToRemove
.
add
(
value
);
}
});
...
...
@@ -105,9 +106,11 @@ class RouterReportManager<T> {
}
for
(
final
element
in
keysToRemove
)
{
GetInstance
().
delete
(
key:
element
);
final
value
=
GetInstance
().
delete
(
key:
element
);
if
(
value
)
{
_routesKey
.
remove
(
element
);
}
}
keysToRemove
.
clear
();
}
...
...
lib/get_navigation/src/routes/default_route.dart
View file @
ed9ddcf
...
...
@@ -36,9 +36,11 @@ class GetPageRoute<T> extends PageRoute<T> with GetPageRouteTransitionMixin<T> {
bool
fullscreenDialog
=
false
,
this
.
middlewares
,
})
:
super
(
settings:
settings
,
fullscreenDialog:
fullscreenDialog
)
{
RouterReportManager
.
reportCurrentRoute
(
this
)
;
_bla
=
this
;
}
late
Route
_bla
;
@override
final
Duration
transitionDuration
;
final
GetPageBuilder
?
page
;
...
...
@@ -73,8 +75,17 @@ class GetPageRoute<T> extends PageRoute<T> with GetPageRouteTransitionMixin<T> {
final
bool
maintainState
;
@override
void
install
()
{
super
.
install
();
RouterReportManager
.
reportCurrentRoute
(
this
);
}
@override
void
dispose
()
{
super
.
dispose
();
if
(
_bla
!=
this
)
{
throw
'DJHOSIDS'
;
}
RouterReportManager
.
reportRouteDispose
(
this
);
// if (Get.smartManagement != SmartManagement.onlyBuilder) {
...
...
@@ -85,12 +96,17 @@ class GetPageRoute<T> extends PageRoute<T> with GetPageRouteTransitionMixin<T> {
middlewareRunner
.
runOnPageDispose
();
}
@override
Widget
buildContent
(
BuildContext
context
)
{
Widget
?
_child
;
Widget
_getChild
()
{
if
(
_child
!=
null
)
return
_child
!;
final
middlewareRunner
=
MiddlewareRunner
(
middlewares
);
final
bindingsToBind
=
middlewareRunner
.
runOnBindingsStart
(
bindings
);
binding
?.
dependencies
();
final
localbindings
=
[
if
(
bindings
!=
null
)
...
bindings
!,
if
(
binding
!=
null
)
...[
binding
!]
];
final
bindingsToBind
=
middlewareRunner
.
runOnBindingsStart
(
localbindings
);
if
(
bindingsToBind
!=
null
)
{
for
(
final
binding
in
bindingsToBind
)
{
binding
.
dependencies
();
...
...
@@ -98,7 +114,13 @@ class GetPageRoute<T> extends PageRoute<T> with GetPageRouteTransitionMixin<T> {
}
final
pageToBuild
=
middlewareRunner
.
runOnPageBuildStart
(
page
)!;
return
middlewareRunner
.
runOnPageBuilt
(
pageToBuild
());
_child
=
middlewareRunner
.
runOnPageBuilt
(
pageToBuild
());
return
_child
!;
}
@override
Widget
buildContent
(
BuildContext
context
)
{
return
_getChild
();
}
@override
...
...
lib/get_navigation/src/routes/get_route.dart
View file @
ed9ddcf
import
'dart:async'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/material.dart'
;
...
...
@@ -89,6 +91,8 @@ class GetPage<T> extends Page<T> {
this
.
showCupertinoParallax
=
true
,
this
.
preventDuplicates
=
true
,
})
:
path
=
_nameToRegex
(
name
),
assert
(
name
.
startsWith
(
'/'
),
'It is necessary to start route name [
$name
] with a slash: /
$name
'
),
super
(
key:
ValueKey
(
name
),
name:
name
,
...
...
@@ -175,10 +179,11 @@ class GetPage<T> extends Page<T> {
@override
Route
<
T
>
createRoute
(
BuildContext
context
)
{
// return GetPageRoute<T>(settings: this, page: page);
return
PageRedirect
(
final
_page
=
PageRedirect
(
route:
this
,
settings:
this
,
unknownRoute:
unknownRoute
,
).
getPageToRoute
<
T
>(
this
,
unknownRoute
);
return
_page
;
}
}
...
...
lib/get_navigation/src/routes/observers/route_observer.dart
View file @
ed9ddcf
...
...
@@ -181,8 +181,8 @@ class GetObserver extends NavigatorObserver {
Get
.
log
(
"REPLACE ROUTE
$oldName
"
);
Get
.
log
(
"NEW ROUTE
$newName
"
);
if
(
oldRoute
!=
null
)
{
RouterReportManager
.
reportCurrentRoute
(
oldRoute
);
if
(
newRoute
!=
null
)
{
RouterReportManager
.
reportCurrentRoute
(
newRoute
);
}
_routeSend
?.
update
((
value
)
{
...
...
Please
register
or
login
to post a comment