new favourites feature
This commit is contained in:
@@ -8,6 +8,9 @@ final RouteObserver<ModalRoute<void>> appRouteObserver =
|
||||
RouteObserver<ModalRoute<void>>();
|
||||
|
||||
/// Builds via [builder] only when this route is not covered by a pushed page.
|
||||
///
|
||||
/// Uses [ModalRoute.isCurrent] so nested dialogs above a bottom sheet do not
|
||||
/// falsely "uncover" the page when the dialog pops (sheet still open).
|
||||
class SkipBuildWhenCovered extends StatefulWidget {
|
||||
const SkipBuildWhenCovered({
|
||||
super.key,
|
||||
@@ -26,6 +29,13 @@ class _SkipBuildWhenCoveredState extends State<SkipBuildWhenCovered>
|
||||
with RouteAware {
|
||||
var _covered = false;
|
||||
|
||||
void _syncCovered() {
|
||||
final route = ModalRoute.of(context);
|
||||
final covered = route != null && !route.isCurrent;
|
||||
if (covered == _covered) return;
|
||||
setState(() => _covered = covered);
|
||||
}
|
||||
|
||||
@override
|
||||
void didChangeDependencies() {
|
||||
super.didChangeDependencies();
|
||||
@@ -33,6 +43,7 @@ class _SkipBuildWhenCoveredState extends State<SkipBuildWhenCovered>
|
||||
if (route is PageRoute) {
|
||||
appRouteObserver.subscribe(this, route);
|
||||
}
|
||||
_syncCovered();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -42,14 +53,10 @@ class _SkipBuildWhenCoveredState extends State<SkipBuildWhenCovered>
|
||||
}
|
||||
|
||||
@override
|
||||
void didPushNext() {
|
||||
if (!_covered) setState(() => _covered = true);
|
||||
}
|
||||
void didPushNext() => _syncCovered();
|
||||
|
||||
@override
|
||||
void didPopNext() {
|
||||
if (_covered) setState(() => _covered = false);
|
||||
}
|
||||
void didPopNext() => _syncCovered();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
Reference in New Issue
Block a user