simplified code across the app and consolidated duplicated helpers

This commit is contained in:
2026-09-27 17:29:54 +02:00
parent 3e856d0b1c
commit ee1240f71a
155 changed files with 1772 additions and 2546 deletions
+19 -26
View File
@@ -127,9 +127,9 @@ class _TickerScaffoldState extends State<TickerScaffold> {
void initState() {
super.initState();
final initial = widget.initialSlug;
if (initial != null && _isSelectable(widget.sections, initial)) {
if (initial != null && _isSelectable(initial)) {
_selectedSlug = initial;
_selectedTitle = _titleForSlug(initial);
_selectedTitle = _pageFor(initial)?.title;
} else if (initial != null) {
// Remembered page is gone (deleted/hidden) → drop the stale slug once
// mounted and stay on "Aktuelles".
@@ -155,7 +155,7 @@ class _TickerScaffoldState extends State<TickerScaffold> {
// A fresh nav can drop the open page (deleted/hidden/unpublished server
// side) → fall back to "Aktuelles".
final slug = _selectedSlug;
if (slug != null && !_isSelectable(widget.sections, slug)) _selectHome();
if (slug != null && !_isSelectable(slug)) _selectHome();
}
@override
@@ -165,13 +165,18 @@ class _TickerScaffoldState extends State<TickerScaffold> {
super.dispose();
}
bool _isSelectable(List<TickerNavSection> sections, String slug) {
for (final section in sections) {
TickerNavPage? _pageFor(String slug) {
for (final section in widget.sections) {
for (final page in section.pages) {
if (page.slug == slug) return page.kind != TickerPageKind.redirect;
if (page.slug == slug) return page;
}
}
return false;
return null;
}
bool _isSelectable(String slug) {
final page = _pageFor(slug);
return page != null && page.kind != TickerPageKind.redirect;
}
void _ensureBackEntry() {
@@ -236,12 +241,14 @@ class _TickerScaffoldState extends State<TickerScaffold> {
_removeBackEntry();
}
void _selectPage(TickerNavPage page) {
void _selectPage(TickerNavPage page) => _select(page.slug, page.title);
void _select(String slug, String? title) {
setState(() {
_selectedSlug = page.slug;
_selectedTitle = page.title;
_selectedSlug = slug;
_selectedTitle = title;
});
widget.onSelectionChanged?.call(page.slug);
widget.onSelectionChanged?.call(slug);
_ensureBackEntry();
}
@@ -255,26 +262,12 @@ class _TickerScaffoldState extends State<TickerScaffold> {
void _onLinkTap(String href) {
final slug = AppRoutes.tickerSlugOf(href);
if (slug != null && slug.isNotEmpty) {
setState(() {
_selectedSlug = slug;
_selectedTitle = _titleForSlug(slug);
});
widget.onSelectionChanged?.call(slug);
_ensureBackEntry();
_select(slug, _pageFor(slug)?.title);
return;
}
unawaited(UrlOpener.openUrl(href));
}
String? _titleForSlug(String slug) {
for (final section in widget.sections) {
for (final page in section.pages) {
if (page.slug == slug) return page.title;
}
}
return null;
}
@override
Widget build(BuildContext context) => LayoutBuilder(
builder: (context, constraints) {