Handle dashboard right layout toggle.

This commit is contained in:
Igor Kulikov
2021-06-04 19:26:13 +03:00
parent 5be1d5491f
commit e0ad700188
3 changed files with 67 additions and 2 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -15,6 +15,9 @@ import 'package:url_launcher/url_launcher.dart';
class DashboardController {
final ValueNotifier<bool> canGoBack = ValueNotifier(false);
final ValueNotifier<bool> hasRightLayout = ValueNotifier(false);
final ValueNotifier<bool> rightLayoutOpened = ValueNotifier(false);
final _DashboardState dashboardState;
DashboardController(this.dashboardState);
@@ -30,6 +33,18 @@ class DashboardController {
canGoBack.value = await canGoBackFuture;
}
onHasRightLayout(bool _hasRightLayout) {
hasRightLayout.value = _hasRightLayout;
}
onRightLayoutOpened(bool _rightLayoutOpened) {
rightLayoutOpened.value = _rightLayoutOpened;
}
Future<void> toggleRightLayout() async {
await dashboardState._toggleRightLayout();
}
Future<void> activateDashboard() async {
await dashboardState._activateDashboard();
}
@@ -40,6 +55,8 @@ class DashboardController {
dispose() {
canGoBack.dispose();
hasRightLayout.dispose();
rightLayoutOpened.dispose();
}
}
@@ -187,6 +204,15 @@ class _DashboardState extends TbContextState<Dashboard, _DashboardState> {
await controller.postWebMessage(message: webMessage, targetOrigin: Uri.parse('*'));
}
Future<void> _toggleRightLayout() async {
var controller = await _controller.future;
var windowMessage = <String, dynamic>{
'type': 'toggleDashboardLayout'
};
var webMessage = WebMessage(data: jsonEncode(windowMessage));
await controller.postWebMessage(message: webMessage, targetOrigin: Uri.parse('*'));
}
@override
Widget build(BuildContext context) {
return WillPopScope(
@@ -217,9 +243,18 @@ class _DashboardState extends TbContextState<Dashboard, _DashboardState> {
onWebViewCreated: (webViewController) {
log.debug("onWebViewCreated");
webViewController.addJavaScriptHandler(handlerName: "tbMobileDashboardLoadedHandler", callback: (args) async {
log.debug("Invoked tbMobileDashboardLoadedHandler");
bool hasRightLayout = args[0];
bool rightLayoutOpened = args[1];
log.debug("Invoked tbMobileDashboardLoadedHandler: hasRightLayout: $hasRightLayout, rightLayoutOpened: $rightLayoutOpened");
_dashboardController.onHasRightLayout(hasRightLayout);
_dashboardController.onRightLayoutOpened(rightLayoutOpened);
dashboardLoading.value = false;
});
webViewController.addJavaScriptHandler(handlerName: "tbMobileDashboardLayoutHandler", callback: (args) async {
bool rightLayoutOpened = args[0];
log.debug("Invoked tbMobileDashboardLayoutHandler: rightLayoutOpened: $rightLayoutOpened");
_dashboardController.onRightLayoutOpened(rightLayoutOpened);
});
webViewController.addJavaScriptHandler(handlerName: "tbMobileDashboardStateNameHandler", callback: (args) async {
log.debug("Invoked tbMobileDashboardStateNameHandler: $args");
if (args.isNotEmpty && args[0] is String) {

View File

@@ -63,6 +63,9 @@ class MainDashboardPage extends TbContextWidget<MainDashboardPage, _MainDashboar
class _MainDashboardPageState extends TbContextState<MainDashboardPage, _MainDashboardPageState> {
late ValueNotifier<String> dashboardTitleValue;
final ValueNotifier<bool> hasRightLayout = ValueNotifier(false);
final ValueNotifier<bool> rightLayoutOpened = ValueNotifier(false);
DashboardController? _dashboardController;
@override
void initState() {
@@ -104,7 +107,27 @@ class _MainDashboardPageState extends TbContextState<MainDashboardPage, _MainDas
child: Text(title)
);
},
)
),
actions: [
ValueListenableBuilder<bool>(
valueListenable: hasRightLayout,
builder: (context, _hasRightLayout, widget) {
if (_hasRightLayout) {
return IconButton(
onPressed: () => _dashboardController?.toggleRightLayout(),
icon: ValueListenableBuilder<bool>(
valueListenable: rightLayoutOpened,
builder: (context, _rightLayoutOpened, widget) {
return Icon(_rightLayoutOpened ? Icons.arrow_back : Icons.menu);
}
)
);
} else {
return SizedBox.shrink();
}
}
)
],
),
body: Dashboard(
tbContext,
@@ -113,8 +136,15 @@ class _MainDashboardPageState extends TbContextState<MainDashboardPage, _MainDas
dashboardTitleValue.value = title;
},
controllerCallback: (controller) {
_dashboardController = controller;
if (widget._controller != null) {
widget._controller!._setDashboardController(controller);
controller.hasRightLayout.addListener(() {
hasRightLayout.value = controller.hasRightLayout.value;
});
controller.rightLayoutOpened.addListener(() {
rightLayoutOpened.value = controller.rightLayoutOpened.value;
});
}
}
)