User panel fully functional
This commit is contained in:
parent
e562216658
commit
f67e947f8b
16 changed files with 1346 additions and 641 deletions
|
|
@ -1,8 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get_storage/get_storage.dart';
|
||||
import 'package:tuuli_app/api/api_client.dart';
|
||||
import 'package:tuuli_app/api/model/tables_list_model.dart';
|
||||
import 'package:tuuli_app/api_controller.dart';
|
||||
import 'package:tuuli_app/c.dart';
|
||||
import 'package:tuuli_app/pages/home_panels/none_panel.dart';
|
||||
import 'package:tuuli_app/pages/home_panels/settings_panel.dart';
|
||||
|
|
@ -16,35 +15,13 @@ enum PageType {
|
|||
settings,
|
||||
}
|
||||
|
||||
mixin HomePageStateRef {
|
||||
void refreshData();
|
||||
}
|
||||
class HomePageController extends GetxController {
|
||||
final _currentPage = PageType.none.obs;
|
||||
PageType get currentPage => _currentPage.value;
|
||||
set currentPage(PageType value) => _currentPage.value = value;
|
||||
|
||||
class HomePage extends StatefulWidget {
|
||||
const HomePage({super.key});
|
||||
String get currentPageName => pageNames[currentPage]!;
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() => _HomePageState();
|
||||
}
|
||||
|
||||
class _HomePageState extends State<HomePage> with HomePageStateRef {
|
||||
final apiClient = Get.find<ApiClient>();
|
||||
TablesListModel tables = TablesListModel([]);
|
||||
|
||||
TableModel get usersTable =>
|
||||
tables.tables.firstWhere((element) => element.tableName == "users");
|
||||
|
||||
bool get isNarrow =>
|
||||
(MediaQuery.of(context).size.width - C.materialDrawerWidth) <= 600;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
refreshData();
|
||||
}
|
||||
|
||||
var currentPage = PageType.none;
|
||||
final pageNames = {
|
||||
PageType.none: "Home",
|
||||
PageType.tables: "Tables",
|
||||
|
|
@ -52,8 +29,41 @@ class _HomePageState extends State<HomePage> with HomePageStateRef {
|
|||
PageType.settings: "Settings",
|
||||
};
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
Get.lazyPut<TablesListPanelController>(
|
||||
() => TablesListPanelController(),
|
||||
fenix: true,
|
||||
);
|
||||
Get.lazyPut<UserListPanelController>(
|
||||
() => UserListPanelController(),
|
||||
fenix: true,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
ApiController.to.token = "";
|
||||
|
||||
await Future.wait([
|
||||
Get.delete<TablesListPanelController>(),
|
||||
Get.delete<UserListPanelController>(),
|
||||
Get.delete<HomePageController>(),
|
||||
]);
|
||||
|
||||
Get.offAllNamed("/");
|
||||
}
|
||||
}
|
||||
|
||||
class HomePage extends GetView<HomePageController> {
|
||||
const HomePage({super.key});
|
||||
|
||||
bool get isNarrow =>
|
||||
(Get.mediaQuery.size.width - C.materialDrawerWidth) <= 600;
|
||||
|
||||
AppBar get appBar => AppBar(
|
||||
title: Text(pageNames[currentPage]!),
|
||||
title: Obx(() => Text(controller.currentPageName)),
|
||||
actions: [
|
||||
IconButton(
|
||||
icon: const Icon(Icons.home),
|
||||
|
|
@ -62,51 +72,49 @@ class _HomePageState extends State<HomePage> with HomePageStateRef {
|
|||
},
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.refresh),
|
||||
onPressed: refreshData,
|
||||
icon: const Icon(Icons.logout),
|
||||
onPressed: () => controller.logout(),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
ListView get drawerOptions => ListView(
|
||||
children: [
|
||||
ListTile(
|
||||
leading: const Icon(Icons.table_chart),
|
||||
title: const Text("Tables"),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
currentPage = PageType.tables;
|
||||
});
|
||||
},
|
||||
Obx(
|
||||
() => ListTile(
|
||||
leading: const Icon(Icons.table_chart),
|
||||
title: const Text("Tables"),
|
||||
onTap: () {
|
||||
controller.currentPage = PageType.tables;
|
||||
},
|
||||
selected: controller.currentPage == PageType.tables,
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.person),
|
||||
title: const Text("Users"),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
currentPage = PageType.users;
|
||||
});
|
||||
},
|
||||
Obx(
|
||||
() => ListTile(
|
||||
leading: const Icon(Icons.person),
|
||||
title: const Text("Users"),
|
||||
onTap: () {
|
||||
controller.currentPage = PageType.users;
|
||||
},
|
||||
selected: controller.currentPage == PageType.users,
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.settings),
|
||||
title: const Text("Settings"),
|
||||
onTap: () {
|
||||
setState(() {
|
||||
currentPage = PageType.settings;
|
||||
});
|
||||
},
|
||||
Obx(
|
||||
() => ListTile(
|
||||
leading: const Icon(Icons.settings),
|
||||
title: const Text("Settings"),
|
||||
onTap: () {
|
||||
controller.currentPage = PageType.settings;
|
||||
},
|
||||
selected: controller.currentPage == PageType.settings,
|
||||
),
|
||||
),
|
||||
const Divider(),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.logout),
|
||||
title: const Text("Logout"),
|
||||
onTap: () {
|
||||
GetStorage().erase().then((value) {
|
||||
GetStorage().save();
|
||||
Get.offAllNamed("/");
|
||||
});
|
||||
},
|
||||
onTap: () => controller.logout(),
|
||||
),
|
||||
],
|
||||
);
|
||||
|
|
@ -140,12 +148,12 @@ class _HomePageState extends State<HomePage> with HomePageStateRef {
|
|||
),
|
||||
LimitedBox(
|
||||
maxWidth: MediaQuery.of(context).size.width - C.materialDrawerWidth,
|
||||
child: Builder(builder: (context) {
|
||||
switch (currentPage) {
|
||||
child: Obx(() {
|
||||
switch (controller.currentPage) {
|
||||
case PageType.tables:
|
||||
return TablesListPanel(parent: this, tables: tables);
|
||||
return const TablesListPanel();
|
||||
case PageType.users:
|
||||
return UsersListPanel(usersTable: usersTable);
|
||||
return const UsersListPanel();
|
||||
case PageType.settings:
|
||||
return const SettingsPanel();
|
||||
case PageType.none:
|
||||
|
|
@ -158,25 +166,4 @@ class _HomePageState extends State<HomePage> with HomePageStateRef {
|
|||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void refreshData() {
|
||||
apiClient.tablesList().then(
|
||||
(value) => value.unfold(
|
||||
(tables) {
|
||||
setState(() {
|
||||
this.tables = tables;
|
||||
});
|
||||
},
|
||||
(error) {
|
||||
ScaffoldMessenger.of(context).hideCurrentSnackBar();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(error.toString()),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue