diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index f1c2074..7496d4a 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -16,6 +16,10 @@ enum PageType { settings, } +mixin HomePageStateRef { + void refreshData(); +} + class HomePage extends StatefulWidget { const HomePage({super.key}); @@ -23,7 +27,7 @@ class HomePage extends StatefulWidget { State createState() => _HomePageState(); } -class _HomePageState extends State { +class _HomePageState extends State with HomePageStateRef { final apiClient = Get.find(); TablesListModel tables = TablesListModel([]); @@ -34,7 +38,7 @@ class _HomePageState extends State { void initState() { super.initState(); - _refreshData(); + refreshData(); } var currentPage = PageType.none; @@ -56,7 +60,7 @@ class _HomePageState extends State { ), IconButton( icon: const Icon(Icons.refresh), - onPressed: _refreshData, + onPressed: refreshData, ), ], ); @@ -136,7 +140,7 @@ class _HomePageState extends State { child: Builder(builder: (context) { switch (currentPage) { case PageType.tables: - return TablesListPanel(tables: tables); + return TablesListPanel(parent: this, tables: tables); case PageType.users: return const UsersListPanel(); case PageType.settings: @@ -152,7 +156,8 @@ class _HomePageState extends State { ); } - void _refreshData() { + @override + void refreshData() { apiClient.tablesList().then( (value) => value.unfold( (tables) { diff --git a/lib/pages/home_panels/tables_list_panel.dart b/lib/pages/home_panels/tables_list_panel.dart index fb7d47c..b83a7e3 100644 --- a/lib/pages/home_panels/tables_list_panel.dart +++ b/lib/pages/home_panels/tables_list_panel.dart @@ -6,11 +6,17 @@ import 'package:tuuli_app/api/api_client.dart'; import 'package:tuuli_app/api/model/tables_list_model.dart'; import 'package:tuuli_app/c.dart'; import 'package:tuuli_app/pages/bottomsheers/edit_table_bottomsheet.dart'; +import 'package:tuuli_app/pages/home_page.dart'; class TablesListPanel extends StatefulWidget { final TablesListModel tables; + final HomePageStateRef parent; - const TablesListPanel({super.key, required this.tables}); + const TablesListPanel({ + super.key, + required this.tables, + required this.parent, + }); @override State createState() => _TablesListPanelState(); @@ -157,20 +163,24 @@ class _TablesListPanelState extends State { await apiClient .createTable(result.tableName, result.fields) - .then((e) => e.unfold((_) { - Get.snackbar( - "Success", - "Table created", - colorText: Colors.white, - ); - }, (error) { - Get.defaultDialog( - title: "Error", - middleText: error.toString(), - textConfirm: "OK", - onConfirm: () => Get.back(), - ); + .then((e) => WidgetsBinding.instance.addPostFrameCallback((_) { + e.unfold((_) { + Get.snackbar( + "Success", + "Table created", + colorText: Colors.white, + ); + }, (error) { + Get.defaultDialog( + title: "Error", + middleText: error.toString(), + textConfirm: "OK", + onConfirm: () => Get.back(), + ); + }); })); + + widget.parent.refreshData(); } void _openTable(TableModel table) async {