feat: Enhance admin panel navigation and UI by implementing tab management and improving layout structure
Test Suite / test (24.15.0) (push) Has been cancelled
Test Suite / test (24.15.0) (push) Has been cancelled
This commit is contained in:
@@ -1,50 +1,35 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import '../../../core/l10n/l10n.dart';
|
||||
import 'admin_database_panel.dart';
|
||||
import 'admin_users_panel.dart';
|
||||
|
||||
class AdminScreen extends ConsumerStatefulWidget {
|
||||
const AdminScreen({super.key});
|
||||
enum AdminViewTab { users, database }
|
||||
|
||||
@override
|
||||
ConsumerState<AdminScreen> createState() => _AdminScreenState();
|
||||
extension AdminViewTabX on AdminViewTab {
|
||||
static AdminViewTab fromQuery(String? value) {
|
||||
return switch (value) {
|
||||
'database' => AdminViewTab.database,
|
||||
_ => AdminViewTab.users,
|
||||
};
|
||||
}
|
||||
|
||||
String get queryValue => this == AdminViewTab.database ? 'database' : 'users';
|
||||
}
|
||||
|
||||
class _AdminScreenState extends ConsumerState<AdminScreen> {
|
||||
class AdminScreen extends StatelessWidget {
|
||||
final AdminViewTab initialTab;
|
||||
|
||||
const AdminScreen({super.key, this.initialTab = AdminViewTab.users});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultTabController(
|
||||
length: 2,
|
||||
child: Column(
|
||||
children: [
|
||||
Material(
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
child: TabBar(
|
||||
isScrollable: true,
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
tabs: [
|
||||
Tab(text: context.l10n.profileUsersTab, icon: const Icon(Icons.people_outline)),
|
||||
const Tab(text: 'Databas', icon: Icon(Icons.storage_outlined)),
|
||||
],
|
||||
),
|
||||
),
|
||||
const Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.fromLTRB(12, 8, 12, 8),
|
||||
child: AdminUsersPanel(embedded: true),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.fromLTRB(12, 8, 12, 8),
|
||||
child: AdminDatabasePanel(embedded: true),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
final activePanel = switch (initialTab) {
|
||||
AdminViewTab.users => const AdminUsersPanel(embedded: true),
|
||||
AdminViewTab.database => const AdminDatabasePanel(embedded: true),
|
||||
};
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(12, 8, 12, 8),
|
||||
child: activePanel,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user