diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 255cb564c..8544fc240 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -43,6 +43,9 @@ var version = ""; int androidVersion = 0; DesktopType? desktopType; +/// * debug or test only, DO NOT enable in release build +bool isTest = false; + typedef F = String Function(String); typedef FMethod = String Function(String, dynamic); diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 87ac9c8ea..c37af81f5 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -92,6 +92,7 @@ class ServerModel with ChangeNotifier { _serverId = IDTextEditingController(text: _emptyIdShow); Timer.periodic(Duration(seconds: 1), (timer) async { + if (isTest) return timer.cancel(); var status = await bind.mainGetOnlineStatue(); if (status > 0) { status = 1; @@ -343,6 +344,7 @@ class ServerModel with ChangeNotifier { // force updateClientState([String? json]) async { + if (isTest) return; var res = await bind.cmGetClientsState(); try { final List clientsJson = jsonDecode(res); diff --git a/flutter/test/cm_test.dart b/flutter/test/cm_test.dart index 704124781..c709d618a 100644 --- a/flutter/test/cm_test.dart +++ b/flutter/test/cm_test.dart @@ -2,26 +2,63 @@ import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/desktop/pages/server_page.dart'; +import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/models/server_model.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:get/get.dart'; import 'package:window_manager/window_manager.dart'; +final testClients = [ + Client(0, false, false, "UserAAAAAA", "123123123", true, false, false), + Client(1, false, false, "UserBBBBB", "221123123", true, false, false), + Client(2, false, false, "UserC", "331123123", true, false, false), + Client(3, false, false, "UserDDDDDDDDDDDd", "441123123", true, false, false) +]; + /// -t lib/cm_main.dart to test cm void main(List args) async { + isTest = true; WidgetsFlutterBinding.ensureInitialized(); await windowManager.ensureInitialized(); await windowManager.setSize(const Size(400, 600)); await windowManager.setAlignment(Alignment.topRight); await initEnv(kAppTypeMain); - gFFI.serverModel.clients - .add(Client(0, false, false, "UserA", "123123123", true, false, false)); - gFFI.serverModel.clients - .add(Client(1, false, false, "UserB", "221123123", true, false, false)); - gFFI.serverModel.clients - .add(Client(2, false, false, "UserC", "331123123", true, false, false)); - gFFI.serverModel.clients - .add(Client(3, false, false, "UserD", "441123123", true, false, false)); - runApp(const GetMaterialApp( - debugShowCheckedModeBanner: false, home: DesktopServerPage())); + for (var client in testClients) { + gFFI.serverModel.clients.add(client); + gFFI.serverModel.tabController.add( + TabInfo( + key: client.id.toString(), + label: client.name, + closable: false, + page: buildConnectionCard(client)), + authorized: client.authorized); + } + + runApp(GetMaterialApp( + debugShowCheckedModeBanner: false, + theme: MyTheme.lightTheme, + darkTheme: MyTheme.darkTheme, + themeMode: MyTheme.currentThemeMode(), + localizationsDelegates: const [ + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + supportedLocales: supportedLocales, + home: const DesktopServerPage())); + WindowOptions windowOptions = + getHiddenTitleBarWindowOptions(size: kConnectionManagerWindowSize); + windowManager.waitUntilReadyToShow(windowOptions, () async { + await windowManager.show(); + // ensure initial window size to be changed + await windowManager.setSize(kConnectionManagerWindowSize); + await Future.wait([ + windowManager.setAlignment(Alignment.topRight), + windowManager.focus(), + windowManager.setOpacity(1) + ]); + // ensure + windowManager.setAlignment(Alignment.topRight); + }); }