diff --git a/flutter/lib/mobile/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart index 07a81f8de..36cc43ebb 100644 --- a/flutter/lib/mobile/pages/server_page.dart +++ b/flutter/lib/mobile/pages/server_page.dart @@ -170,6 +170,35 @@ class ServerInfo extends StatelessWidget { @override Widget build(BuildContext context) { final isPermanent = model.verificationMethod == kUsePermanentPassword; + final serverModel = Provider.of(context); + + // @todo Theming + Widget Notification() { + const Color colorPositive = Colors.greenAccent; + const Color colorNegative = Colors.redAccent; + const double paddingRight = 15; + + if (serverModel.connectStatus == -1) { + return Row(children: [ + const Icon(Icons.warning_amber_sharp, color: colorNegative, size: 24) + .marginOnly(right: paddingRight), + Expanded(child: Text(translate('not_ready_status'))) + ]); + } else if (serverModel.connectStatus == 0) { + return Row(children: [ + SizedBox(width: 20, height: 20, child: CircularProgressIndicator()) + .marginOnly(left: 4, right: paddingRight), + Expanded(child: Text(translate('connecting_status'))) + ]); + } else { + return Row(children: [ + const Icon(Icons.check, color: colorPositive, size: 24) + .marginOnly(right: paddingRight), + Expanded(child: Text(translate('Ready'))) + ]); + } + } + return model.isStart ? PaddingCard( child: Column( @@ -210,14 +239,14 @@ class ServerInfo extends StatelessWidget { bind.mainUpdateTemporaryPassword())), onSaved: (String? value) {}, ), + Notification().marginOnly(top: 20) ], )) : PaddingCard( child: Column( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Center( - child: Row( + Row( children: [ const Icon(Icons.warning_amber_sharp, color: Colors.redAccent, size: 24), @@ -229,17 +258,18 @@ class ServerInfo extends StatelessWidget { fontFamily: 'WorkSans', fontWeight: FontWeight.bold, fontSize: 18, - color: MyTheme.accent, ), )) ], - )), - const SizedBox(height: 5), - Center( - child: Text( - translate("android_start_service_tip"), - style: const TextStyle(fontSize: 12, color: MyTheme.darkGray), - )) + ).marginOnly(bottom: 8), + Text(translate("android_start_service_tip"), + style: const TextStyle( + fontSize: 12, color: MyTheme.darkGray)) + .marginOnly(bottom: 8), + ElevatedButton.icon( + icon: const Icon(Icons.play_arrow), + onPressed: serverModel.toggleService, + label: Text(translate("Start Service"))) ], )); } @@ -257,51 +287,19 @@ class _PermissionCheckerState extends State { Widget build(BuildContext context) { final serverModel = Provider.of(context); final hasAudioPermission = androidVersion >= 30; - final String status; - if (serverModel.connectStatus == -1) { - status = 'not_ready_status'; - } else if (serverModel.connectStatus == 0) { - status = 'connecting_status'; - } else { - status = 'Ready'; - } - - // @todo Theming - Widget ServerStateMessage() { - if (!serverModel.mediaOk) { - return Row(children: [ - const Icon(Icons.warning_amber_outlined, - color: Colors.redAccent, size: 24) - .marginOnly(right: 10), - Expanded(child: Text(translate('Service is not running'))) - ]); - } - - if (serverModel.connectStatus == -1) { - return Row(children: [ - const Icon(Icons.warning_amber_sharp, - color: Colors.redAccent, size: 24) - .marginOnly(right: 10), - Expanded(child: Text(translate('not_ready_status'))) - ]); - } else if (serverModel.connectStatus == 0) { - return Row(children: [ - SizedBox(width: 20, height: 20, child: CircularProgressIndicator()) - .marginOnly(left: 4, right: 10), - Expanded(child: Text(translate('connecting_status'))) - ]); - } else { - return Row(children: [ - const Icon(Icons.check, color: Colors.greenAccent, size: 24) - .marginOnly(right: 10), - Expanded(child: Text(translate('Ready'))) - ]); - } - } - return PaddingCard( title: translate("Permissions"), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + serverModel.mediaOk + ? ElevatedButton.icon( + style: ButtonStyle( + backgroundColor: + MaterialStateProperty.all(Colors.red)), + icon: const Icon(Icons.stop), + onPressed: serverModel.toggleService, + label: Text(translate("Stop service"))) + .marginOnly(bottom: 8) + : SizedBox.shrink(), PermissionRow(translate("Screen Capture"), serverModel.mediaOk, serverModel.toggleService), PermissionRow(translate("Input Control"), serverModel.inputOk, @@ -314,23 +312,7 @@ class _PermissionCheckerState extends State { : Text( "* ${translate("android_version_audio_tip")}", style: const TextStyle(color: MyTheme.darkGray), - ), - const SizedBox(height: 8), - serverModel.mediaOk - ? ElevatedButton.icon( - style: ButtonStyle( - backgroundColor: - MaterialStateProperty.all(Colors.red)), - icon: const Icon(Icons.stop), - onPressed: serverModel.toggleService, - label: Text(translate("Stop service"))) - .marginOnly(bottom: 8) - : ElevatedButton.icon( - icon: const Icon(Icons.play_arrow), - onPressed: serverModel.toggleService, - label: Text(translate("Start Service"))) - .marginOnly(bottom: 8), - ServerStateMessage() + ) ])); } }