custom filters

This commit is contained in:
davmar
2026-09-10 17:23:07 +02:00
parent 83295439d5
commit 2727f1baf2
15 changed files with 757 additions and 232 deletions
+9 -12
View File
@@ -9,8 +9,9 @@ final RouteObserver<ModalRoute<void>> appRouteObserver =
/// 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).
/// Only [PageRoute]s count as covering (via [RouteAware]). Modal bottom sheets
/// and dialogs must not tear down the subtree — async flows started from Home
/// (e.g. compose widget → name → options) need a mounted context between steps.
class SkipBuildWhenCovered extends StatefulWidget {
const SkipBuildWhenCovered({
super.key,
@@ -29,13 +30,6 @@ 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();
@@ -43,7 +37,6 @@ class _SkipBuildWhenCoveredState extends State<SkipBuildWhenCovered>
if (route is PageRoute) {
appRouteObserver.subscribe(this, route);
}
_syncCovered();
}
@override
@@ -53,10 +46,14 @@ class _SkipBuildWhenCoveredState extends State<SkipBuildWhenCovered>
}
@override
void didPushNext() => _syncCovered();
void didPushNext() {
if (!_covered) setState(() => _covered = true);
}
@override
void didPopNext() => _syncCovered();
void didPopNext() {
if (_covered) setState(() => _covered = false);
}
@override
Widget build(BuildContext context) {