mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
109 lines
2.6 KiB
Dart
109 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:venera/pages/categories_page.dart';
|
|
import 'package:venera/pages/search_page.dart';
|
|
import 'package:venera/pages/settings/settings_page.dart';
|
|
import 'package:venera/utils/translations.dart';
|
|
|
|
import '../components/components.dart';
|
|
import '../foundation/app.dart';
|
|
import 'explore_page.dart';
|
|
import 'favorites/favorites_page.dart';
|
|
import 'home_page.dart';
|
|
|
|
class MainPage extends StatefulWidget {
|
|
const MainPage({super.key});
|
|
|
|
@override
|
|
State<MainPage> createState() => _MainPageState();
|
|
}
|
|
|
|
class _MainPageState extends State<MainPage> {
|
|
late final NaviObserver _observer;
|
|
|
|
GlobalKey<NavigatorState>? _navigatorKey;
|
|
|
|
void to(Widget Function() widget, {bool preventDuplicate = false}) async {
|
|
if (preventDuplicate) {
|
|
var page = widget();
|
|
if ("/${page.runtimeType}" == _observer.routes.last.toString()) return;
|
|
}
|
|
_navigatorKey!.currentContext!.to(widget);
|
|
}
|
|
|
|
void back() {
|
|
_navigatorKey!.currentContext!.pop();
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
_observer = NaviObserver();
|
|
_navigatorKey = GlobalKey();
|
|
App.mainNavigatorKey = _navigatorKey;
|
|
super.initState();
|
|
}
|
|
|
|
final _pages = [
|
|
const HomePage(),
|
|
const FavoritesPage(),
|
|
const ExplorePage(),
|
|
const CategoriesPage(),
|
|
];
|
|
|
|
var index = 0;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return NaviPane(
|
|
observer: _observer,
|
|
navigatorKey: _navigatorKey!,
|
|
paneItems: [
|
|
PaneItemEntry(
|
|
label: 'Home'.tl,
|
|
icon: Icons.home_outlined,
|
|
activeIcon: Icons.home,
|
|
),
|
|
PaneItemEntry(
|
|
label: 'Favorites'.tl,
|
|
icon: Icons.local_activity_outlined,
|
|
activeIcon: Icons.local_activity,
|
|
),
|
|
PaneItemEntry(
|
|
label: 'Explore'.tl,
|
|
icon: Icons.explore_outlined,
|
|
activeIcon: Icons.explore,
|
|
),
|
|
PaneItemEntry(
|
|
label: 'Categories'.tl,
|
|
icon: Icons.category_outlined,
|
|
activeIcon: Icons.category,
|
|
),
|
|
],
|
|
onPageChanged: (i) {
|
|
setState(() {
|
|
index = i;
|
|
});
|
|
},
|
|
paneActions: [
|
|
if(index != 0)
|
|
PaneActionEntry(
|
|
icon: Icons.search,
|
|
label: "Search".tl,
|
|
onTap: () {
|
|
to(() => const SearchPage(), preventDuplicate: true);
|
|
},
|
|
),
|
|
PaneActionEntry(
|
|
icon: Icons.settings,
|
|
label: "Settings".tl,
|
|
onTap: () {
|
|
to(() => const SettingsPage(), preventDuplicate: true);
|
|
},
|
|
)
|
|
],
|
|
pageBuilder: (index) {
|
|
return _pages[index];
|
|
},
|
|
);
|
|
}
|
|
}
|