simplified code across the app and consolidated duplicated helpers
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user