opt.: route

This commit is contained in:
lollipopkit
2023-08-22 21:25:51 +08:00
parent 3475e6ec91
commit ad11b9fcc5
2 changed files with 22 additions and 24 deletions

View File

@@ -1,10 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/core/analysis.dart'; import 'package:toolbox/core/analysis.dart';
import 'package:toolbox/data/model/server/private_key_info.dart'; import 'package:toolbox/data/model/server/private_key_info.dart';
import 'package:toolbox/data/model/server/server_private_info.dart'; import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/locator.dart';
import 'package:toolbox/view/page/backup.dart'; import 'package:toolbox/view/page/backup.dart';
import 'package:toolbox/view/page/docker.dart'; import 'package:toolbox/view/page/docker.dart';
import 'package:toolbox/view/page/home.dart'; import 'package:toolbox/view/page/home.dart';
@@ -32,7 +29,6 @@ import '../view/page/snippet/edit.dart';
import '../view/page/snippet/list.dart'; import '../view/page/snippet/list.dart';
import '../view/page/storage/sftp.dart'; import '../view/page/storage/sftp.dart';
import '../view/page/storage/sftp_mission.dart'; import '../view/page/storage/sftp_mission.dart';
import 'utils/ui.dart';
class AppRoute { class AppRoute {
final Widget page; final Widget page;
@@ -48,17 +44,14 @@ class AppRoute {
); );
} }
Future<T?> checkClientAndGo<T>({ Future<T?> checkGo<T>({
required BuildContext context, required BuildContext context,
required S s, required bool Function() check,
required String id,
}) { }) {
final server = locator<ServerProvider>().servers[id]; if (check()) {
if (server == null || server.client == null) { return go(context);
showSnackBar(context, Text(s.waitConnection));
return Future.value(null);
} }
return go(context); return Future.value(null);
} }
static AppRoute serverDetail({Key? key, required ServerPrivateInfo spi}) { static AppRoute serverDetail({Key? key, required ServerPrivateInfo spi}) {

View File

@@ -36,17 +36,15 @@ class ServerFuncBtns extends StatelessWidget {
) async { ) async {
switch (value) { switch (value) {
case ServerTabMenuType.pkg: case ServerTabMenuType.pkg:
AppRoute.pkg(spi: spi).checkClientAndGo( AppRoute.pkg(spi: spi).checkGo(
context: context, context: context,
s: s, check: () => _checkClient(context, spi.id),
id: spi.id,
); );
break; break;
case ServerTabMenuType.sftp: case ServerTabMenuType.sftp:
AppRoute.sftp(spi: spi).checkClientAndGo( AppRoute.sftp(spi: spi).checkGo(
context: context, context: context,
s: s, check: () => _checkClient(context, spi.id),
id: spi.id,
); );
break; break;
case ServerTabMenuType.snippet: case ServerTabMenuType.snippet:
@@ -80,17 +78,15 @@ class ServerFuncBtns extends StatelessWidget {
} }
break; break;
case ServerTabMenuType.docker: case ServerTabMenuType.docker:
AppRoute.docker(spi: spi).checkClientAndGo( AppRoute.docker(spi: spi).checkGo(
context: context, context: context,
s: s, check: () => _checkClient(context, spi.id),
id: spi.id,
); );
break; break;
case ServerTabMenuType.process: case ServerTabMenuType.process:
AppRoute(ProcessPage(spi: spi), 'process page').checkClientAndGo( AppRoute(ProcessPage(spi: spi), 'process page').checkGo(
context: context, context: context,
s: s, check: () => _checkClient(context, spi.id),
id: spi.id,
); );
break; break;
case ServerTabMenuType.terminal: case ServerTabMenuType.terminal:
@@ -162,4 +158,13 @@ class ServerFuncBtns extends StatelessWidget {
await Future.delayed(const Duration(seconds: 2), file.delete); await Future.delayed(const Duration(seconds: 2), file.delete);
} }
} }
bool _checkClient(BuildContext context, String id) {
final server = locator<ServerProvider>().servers[id];
if (server == null || server.client == null) {
showSnackBar(context, Text(s.waitConnection));
return false;
}
return true;
}
} }