From ff297ff9e9fda21d49253b039660fe958202376e Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Wed, 20 Mar 2024 12:34:26 -0700 Subject: [PATCH] Flutter 3.19.3 Upgrade + Theme Fixes --- .gitignore | 1 + lib/controllers/open_link_modal.dart | 2 +- lib/cwtch/cwtchNotifier.dart | 1 - lib/l10n/custom_material_delegate.dart | 16 + lib/models/message_draft.dart | 2 + lib/themes/opaque.dart | 27 +- .../connectivity_plus/pubspec.lock | 673 ++++++++++++++++++ .../connectivity_plus/pubspec.yaml | 1 + lib/third_party/linkify/flutter_linkify.dart | 8 +- lib/views/addeditprofileview.dart | 4 +- lib/views/contactsview.dart | 4 +- lib/views/doublecolview.dart | 1 + lib/views/globalsettingsaboutview.dart | 154 ++-- lib/views/globalsettingsappearanceview.dart | 394 +++++----- lib/views/globalsettingsbehaviourview.dart | 198 +++--- lib/views/globalsettingsexperimentsview.dart | 359 +++++----- lib/views/groupsettingsview.dart | 4 +- lib/views/messageview.dart | 37 +- lib/views/peersettingsview.dart | 4 +- lib/views/profilemgrview.dart | 1 + lib/widgets/contactrow.dart | 6 +- lib/widgets/profilerow.dart | 3 +- macos/Flutter/GeneratedPluginRegistrant.swift | 2 +- pubspec.lock | 278 ++++---- pubspec.yaml | 9 +- 25 files changed, 1456 insertions(+), 733 deletions(-) create mode 100644 lib/third_party/connectivity_plus/connectivity_plus/pubspec.lock diff --git a/.gitignore b/.gitignore index 48117da2..611204b2 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ test_home .pub-cache/ .pub/ /build/ +./lib/gen/ # Web related lib/generated_plugin_registrant.dart diff --git a/lib/controllers/open_link_modal.dart b/lib/controllers/open_link_modal.dart index 10d81697..d0baacf3 100644 --- a/lib/controllers/open_link_modal.dart +++ b/lib/controllers/open_link_modal.dart @@ -37,7 +37,7 @@ void modalOpenLink(BuildContext ctx, LinkableElement link) { final snackBar = SnackBar( content: Text( AppLocalizations.of(bcontext)!.copiedToClipboardNotification, - style: Provider.of(bcontext).scaleFonts(defaultTextButtonStyle), + style: Provider.of(bcontext, listen: false).scaleFonts(defaultTextButtonStyle), ), ); diff --git a/lib/cwtch/cwtchNotifier.dart b/lib/cwtch/cwtchNotifier.dart index d0a153fe..96c0d5a2 100644 --- a/lib/cwtch/cwtchNotifier.dart +++ b/lib/cwtch/cwtchNotifier.dart @@ -3,7 +3,6 @@ import 'package:cwtch/cwtch/cwtch.dart'; import 'package:cwtch/main.dart'; import 'package:cwtch/models/appstate.dart'; import 'package:cwtch/models/contact.dart'; -import 'package:cwtch/models/message.dart'; import 'package:cwtch/models/profilelist.dart'; import 'package:cwtch/models/remoteserver.dart'; import 'package:cwtch/models/servers.dart'; diff --git a/lib/l10n/custom_material_delegate.dart b/lib/l10n/custom_material_delegate.dart index 59041c9c..963749f6 100644 --- a/lib/l10n/custom_material_delegate.dart +++ b/lib/l10n/custom_material_delegate.dart @@ -648,4 +648,20 @@ class MaterialLocalizationLu extends MaterialLocalizations { @override // TODO: implement scanTextButtonLabel String get scanTextButtonLabel => throw UnimplementedError(); + + @override + // TODO: implement lookUpButtonLabel + String get lookUpButtonLabel => throw UnimplementedError(); + + @override + // TODO: implement menuDismissLabel + String get menuDismissLabel => throw UnimplementedError(); + + @override + // TODO: implement searchWebButtonLabel + String get searchWebButtonLabel => throw UnimplementedError(); + + @override + // TODO: implement shareButtonLabel + String get shareButtonLabel => throw UnimplementedError(); } diff --git a/lib/models/message_draft.dart b/lib/models/message_draft.dart index 1a1188db..bd483e73 100644 --- a/lib/models/message_draft.dart +++ b/lib/models/message_draft.dart @@ -49,6 +49,8 @@ class MessageDraft extends ChangeNotifier { void clearDraft() { this._quotedReference = null; this.ctrlCompose.clear(); + this.ctrlCompose.clearComposing(); + this.ctrlCompose.text = ""; this._inviteHandle = null; notifyListeners(); } diff --git a/lib/themes/opaque.dart b/lib/themes/opaque.dart index 3cccbc2a..a8d39fdb 100644 --- a/lib/themes/opaque.dart +++ b/lib/themes/opaque.dart @@ -15,7 +15,11 @@ const mode_dark = "dark"; final TextStyle defaultSmallTextStyle = TextStyle(fontFamily: "Inter", fontWeight: FontWeight.normal, fontSize: 10); final TextStyle defaultMessageTextStyle = TextStyle(fontFamily: "Inter", fontWeight: FontWeight.w400, fontSize: 13, fontFamilyFallback: [Platform.isWindows ? 'Segoe UI Emoji' : "Noto Color Emoji"]); -final TextStyle defaultFormLabelTextStyle = TextStyle(fontFamily: "Inter", fontWeight: FontWeight.bold, fontSize: 20); +final TextStyle defaultFormLabelTextStyle = TextStyle( + fontFamily: "Inter", + fontWeight: FontWeight.bold, + fontSize: 20, +); final TextStyle defaultTextStyle = TextStyle(fontFamily: "Inter", fontWeight: FontWeight.w500, fontSize: 12); final TextStyle defaultTextButtonStyle = defaultTextStyle.copyWith(fontWeight: FontWeight.bold); final TextStyle defaultDropDownMenuItemTextStyle = TextStyle(fontFamily: "Inter", fontWeight: FontWeight.bold, fontSize: 16); @@ -186,6 +190,12 @@ ThemeData mkThemeData(Settings opaque) { color: opaque.current().toolbarIconColor, ), cardColor: opaque.current().backgroundMainColor, + bottomSheetTheme: BottomSheetThemeData( + backgroundColor: opaque.current().backgroundPaneColor, + constraints: const BoxConstraints( + maxWidth: double.infinity, + ), + ), appBarTheme: AppBarTheme( systemOverlayStyle: SystemUiOverlayStyle( // Status bar color @@ -202,7 +212,8 @@ ThemeData mkThemeData(Settings opaque) { actionsIconTheme: IconThemeData( color: opaque.current().mainTextColor, )), - + listTileTheme: ListTileThemeData(titleTextStyle: defaultFormLabelTextStyle, subtitleTextStyle: defaultMessageTextStyle), + iconButtonTheme: IconButtonThemeData(style: ButtonStyle(textStyle: MaterialStateProperty.all(defaultFormLabelTextStyle))), //bottomNavigationBarTheme: BottomNavigationBarThemeData(type: BottomNavigationBarType.fixed, backgroundColor: opaque.current().backgroundHilightElementColor), // Can't determine current use textButtonTheme: TextButtonThemeData( style: ButtonStyle( @@ -231,12 +242,12 @@ ThemeData mkThemeData(Settings opaque) { ), scrollbarTheme: ScrollbarThemeData(thumbVisibility: MaterialStateProperty.all(false), thumbColor: MaterialStateProperty.all(opaque.current().scrollbarDefaultColor)), tabBarTheme: TabBarTheme( - labelColor: opaque.current().mainTextColor, - unselectedLabelColor: opaque.current().mainTextColor, - indicator: UnderlineTabIndicator(borderSide: BorderSide(color: opaque.current().defaultButtonActiveColor)), - labelStyle: opaque.scaleFonts(defaultTextButtonStyle), - unselectedLabelStyle: opaque.scaleFonts(defaultTextStyle), - ), + labelColor: opaque.current().mainTextColor, + unselectedLabelColor: opaque.current().mainTextColor, + indicator: UnderlineTabIndicator(borderSide: BorderSide(color: opaque.current().defaultButtonActiveColor)), + labelStyle: opaque.scaleFonts(defaultTextButtonStyle), + unselectedLabelStyle: opaque.scaleFonts(defaultTextStyle), + tabAlignment: TabAlignment.center), dialogTheme: DialogTheme( backgroundColor: opaque.current().backgroundPaneColor, titleTextStyle: TextStyle(fontFamily: "Inter", fontWeight: FontWeight.bold, color: opaque.current().mainTextColor), diff --git a/lib/third_party/connectivity_plus/connectivity_plus/pubspec.lock b/lib/third_party/connectivity_plus/connectivity_plus/pubspec.lock new file mode 100644 index 00000000..6810418d --- /dev/null +++ b/lib/third_party/connectivity_plus/connectivity_plus/pubspec.lock @@ -0,0 +1,673 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" + url: "https://pub.dev" + source: hosted + version: "4.0.1" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" + url: "https://pub.dev" + source: hosted + version: "2.4.8" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" + url: "https://pub.dev" + source: hosted + version: "7.3.0" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e + url: "https://pub.dev" + source: hosted + version: "8.9.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + connectivity_plus_platform_interface: + dependency: "direct main" + description: + path: "../connectivity_plus_platform_interface" + relative: true + source: path + version: "1.2.4" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + coverage: + dependency: transitive + description: + name: coverage + sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76" + url: "https://pub.dev" + source: hosted + version: "1.7.2" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + dbus: + dependency: "direct dev" + description: + name: dbus + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" + url: "https://pub.dev" + source: hosted + version: "0.7.10" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: "direct main" + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + meta: + dependency: "direct main" + description: + name: meta + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + mime: + dependency: transitive + description: + name: mime + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + mockito: + dependency: "direct dev" + description: + name: mockito + sha256: "6841eed20a7befac0ce07df8116c8b8233ed1f4486a7647c7fc5a02ae6163917" + url: "https://pub.dev" + source: hosted + version: "5.4.4" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + plugin_platform_interface: + dependency: "direct dev" + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 + url: "https://pub.dev" + source: hosted + version: "1.2.3" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" + source: hosted + version: "1.1.2" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" + source: hosted + version: "0.10.12" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test: + dependency: "direct dev" + description: + name: test + sha256: a1f7595805820fcc05e5c52e3a231aedd0b72972cb333e8c738a8b1239448b6f + url: "https://pub.dev" + source: hosted + version: "1.24.9" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + test_core: + dependency: transitive + description: + name: test_core + sha256: a757b14fc47507060a162cc2530d9a4a2f92f5100a952c7443b5cad5ef5b106a + url: "https://pub.dev" + source: hosted + version: "0.5.9" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2" + url: "https://pub.dev" + source: hosted + version: "2.4.4" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.7.0" diff --git a/lib/third_party/connectivity_plus/connectivity_plus/pubspec.yaml b/lib/third_party/connectivity_plus/connectivity_plus/pubspec.yaml index 980638be..d1770f0f 100644 --- a/lib/third_party/connectivity_plus/connectivity_plus/pubspec.yaml +++ b/lib/third_party/connectivity_plus/connectivity_plus/pubspec.yaml @@ -34,6 +34,7 @@ dependencies: js: ^0.6.3 meta: ^1.8.0 + cwtch: any dev_dependencies: flutter_test: sdk: flutter diff --git a/lib/third_party/linkify/flutter_linkify.dart b/lib/third_party/linkify/flutter_linkify.dart index 210b634b..06a64090 100644 --- a/lib/third_party/linkify/flutter_linkify.dart +++ b/lib/third_party/linkify/flutter_linkify.dart @@ -126,7 +126,7 @@ class SelectableLinkify extends StatelessWidget { /// Called when the user changes the selection of text (including the cursor location). final SelectionChangedCallback? onSelectionChanged; - final BoxConstraints constraints; + final BoxConstraints? constraints; const SelectableLinkify({ Key? key, @@ -161,7 +161,7 @@ class SelectableLinkify extends StatelessWidget { this.cursorHeight, this.selectionControls, this.onSelectionChanged, - required this.constraints, + this.constraints, }) : super(key: key); @override @@ -235,7 +235,7 @@ TextSpan buildTextSpan( LinkCallback? onOpen, required BuildContext context, bool useMouseRegion = false, - required BoxConstraints constraints, + BoxConstraints? constraints, }) { // Ok, so the problem here is that Flutter really wants to optimize this function // out of the rebuild process. This is fine when the screen gets smaller because @@ -247,7 +247,7 @@ TextSpan buildTextSpan( // (I tried a few other things, including the docs-sanctioned MediaQuery.sizeOf(context) - which promises a rebuild // but Flutter is pretty good at optimizing "useless" checks out) String inlineText = "\u0020"; - if (constraints.maxWidth % 2 == 0) { + if (constraints != null && constraints.maxWidth % 2 == 0) { inlineText = "\u00A0"; } elements.add(TextElement(inlineText)); diff --git a/lib/views/addeditprofileview.dart b/lib/views/addeditprofileview.dart index 1103e149..6e015302 100644 --- a/lib/views/addeditprofileview.dart +++ b/lib/views/addeditprofileview.dart @@ -92,8 +92,8 @@ class _AddEditProfileViewState extends State { child: Form( key: _formKey, child: Container( - margin: EdgeInsets.all(30), - padding: EdgeInsets.all(20), + color: theme.theme.backgroundPaneColor, + padding: EdgeInsets.all(50), child: Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ Visibility( visible: Provider.of(context).onion.isNotEmpty, diff --git a/lib/views/contactsview.dart b/lib/views/contactsview.dart index eeb2e3ff..14b5b6fa 100644 --- a/lib/views/contactsview.dart +++ b/lib/views/contactsview.dart @@ -69,9 +69,6 @@ void selectConversation(BuildContext context, int handle, int? messageIndex) { // triggers update in Double/TripleColumnView Provider.of(context, listen: false).hoveredIndex = -1; Provider.of(context, listen: false).selectedConversation = handle; - if (index != null) { - Provider.of(context, listen: false).initialScrollIndex = unread; - } // if in singlepane mode, push to the stack var isLandscape = Provider.of(context, listen: false).isLandscape(context); @@ -124,6 +121,7 @@ class _ContactsViewState extends State { return ScaffoldMessenger( key: scaffoldKey, child: Scaffold( + backgroundColor: Provider.of(context).theme.backgroundMainColor, endDrawerEnableOpenDragGesture: false, drawerEnableOpenDragGesture: false, appBar: AppBar( diff --git a/lib/views/doublecolview.dart b/lib/views/doublecolview.dart index 2b3d458a..def92c33 100644 --- a/lib/views/doublecolview.dart +++ b/lib/views/doublecolview.dart @@ -35,6 +35,7 @@ class _DoubleColumnViewState extends State { color: Provider.of(context).theme.backgroundMainColor, child: Card( margin: EdgeInsets.all(0.0), + color: Provider.of(context).theme.backgroundMainColor, shape: new RoundedRectangleBorder(side: new BorderSide(color: Provider.of(context).theme.defaultButtonColor, width: 4.0), borderRadius: BorderRadius.circular(4.0)), child: Center(child: Text(AppLocalizations.of(context)!.addContactFirst)))) : //dev diff --git a/lib/views/globalsettingsaboutview.dart b/lib/views/globalsettingsaboutview.dart index 1240399e..bdf69104 100644 --- a/lib/views/globalsettingsaboutview.dart +++ b/lib/views/globalsettingsaboutview.dart @@ -31,90 +31,89 @@ class _GlobalSettingsAboutViewState extends State { child: SingleChildScrollView( clipBehavior: Clip.antiAlias, controller: settingsListScrollController, - padding: EdgeInsets.symmetric(vertical: 0, horizontal: 20), child: ConstrainedBox( - constraints: BoxConstraints( - minHeight: viewportConstraints.maxHeight, - ), - child: Column(children: [ - AboutListTile( - icon: appIcon, - applicationIcon: Padding(padding: EdgeInsets.all(5), child: Icon(CwtchIcons.cwtch_knott)), - applicationName: "Cwtch UI", - applicationLegalese: '\u{a9} 2021-2023 Open Privacy Research Society', - aboutBoxChildren: [ - Padding( - padding: EdgeInsets.fromLTRB(24.0 + 10.0 + (appIcon.size ?? 24.0), 16.0, 0.0, 0.0), - // About has 24 padding (ln 389) and there appears to be another 10 of padding in the widget - child: SelectableText(AppLocalizations.of(context)!.versionBuilddate.replaceAll("%1", EnvironmentConfig.BUILD_VER).replaceAll("%2", EnvironmentConfig.BUILD_DATE)), - ) - ]), - SwitchListTile( - // TODO: Translate, Remove, OR Hide Prior to Release - title: Text(AppLocalizations.of(context)!.settingsExperimentsShowPerformanceTitle), - subtitle: Text(AppLocalizations.of(context)!.settingsExperimentsShowPerformanceDescription), - value: settings.profileMode, - onChanged: (bool value) { - setState(() { - if (value) { - settings.profileMode = value; - } else { - settings.profileMode = value; - } - }); - }, - activeTrackColor: settings.theme.defaultButtonActiveColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.bar_chart, color: settings.current().mainTextColor), - ), - Visibility( - visible: EnvironmentConfig.BUILD_VER == dev_version && !Platform.isAndroid, - child: SwitchListTile( - title: Text("Show Semantic Debugger"), - subtitle: Text("Show Accessibility Debugging View"), - value: settings.useSemanticDebugger, + constraints: BoxConstraints(minHeight: viewportConstraints.maxHeight, maxWidth: viewportConstraints.maxWidth), + child: Container( + color: settings.theme.backgroundPaneColor, + child: Column(children: [ + AboutListTile( + icon: appIcon, + applicationIcon: Padding(padding: EdgeInsets.all(5), child: Icon(CwtchIcons.cwtch_knott)), + applicationName: "Cwtch UI", + applicationLegalese: '\u{a9} 2021-2023 Open Privacy Research Society', + aboutBoxChildren: [ + Padding( + padding: EdgeInsets.fromLTRB(24.0 + 10.0 + (appIcon.size ?? 24.0), 16.0, 0.0, 0.0), + // About has 24 padding (ln 389) and there appears to be another 10 of padding in the widget + child: SelectableText(AppLocalizations.of(context)!.versionBuilddate.replaceAll("%1", EnvironmentConfig.BUILD_VER).replaceAll("%2", EnvironmentConfig.BUILD_DATE)), + ) + ]), + SwitchListTile( + // TODO: Translate, Remove, OR Hide Prior to Release + title: Text(AppLocalizations.of(context)!.settingsExperimentsShowPerformanceTitle), + subtitle: Text(AppLocalizations.of(context)!.settingsExperimentsShowPerformanceDescription), + value: settings.profileMode, onChanged: (bool value) { - if (value) { - settings.useSemanticDebugger = value; - } else { - settings.useSemanticDebugger = value; - } - saveSettings(context); + setState(() { + if (value) { + settings.profileMode = value; + } else { + settings.profileMode = value; + } + }); }, activeTrackColor: settings.theme.defaultButtonActiveColor, inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.settings_accessibility, color: settings.current().mainTextColor), - )), - Visibility( - visible: EnvironmentConfig.BUILD_VER == dev_version && !Platform.isAndroid, - child: FutureBuilder( - future: EnvironmentConfig.BUILD_VER != dev_version || Platform.isAndroid ? null : Provider.of(context).cwtch.GetDebugInfo(), - builder: (context, snapshot) { - if (snapshot.hasData) { - return Column( - children: [ - Text("libCwtch Debug Info: " + snapshot.data.toString()), - Text("Message Cache Size (Mb): " + (Provider.of(context).profs.cacheMemUsage() / (1024 * 1024)).toString()) - ], - ); - } else { - return Container(); - } - }, - ), - ), - Visibility( - visible: EnvironmentConfig.BUILD_VER == dev_version, - child: FutureBuilder( - future: Provider.of(context).cwtch.PlatformChannelInfo(), + secondary: Icon(Icons.bar_chart, color: settings.current().mainTextColor), + ), + Visibility( + visible: EnvironmentConfig.BUILD_VER == dev_version && !Platform.isAndroid, + child: SwitchListTile( + title: Text("Show Semantic Debugger"), + subtitle: Text("Show Accessibility Debugging View"), + value: settings.useSemanticDebugger, + onChanged: (bool value) { + if (value) { + settings.useSemanticDebugger = value; + } else { + settings.useSemanticDebugger = value; + } + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonActiveColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.settings_accessibility, color: settings.current().mainTextColor), + )), + Visibility( + visible: EnvironmentConfig.BUILD_VER == dev_version && !Platform.isAndroid, + child: FutureBuilder( + future: EnvironmentConfig.BUILD_VER != dev_version || Platform.isAndroid ? null : Provider.of(context).cwtch.GetDebugInfo(), builder: (context, snapshot) { if (snapshot.hasData) { - HashMap data = snapshot.data as HashMap; - return getPlatformInfo(settings, data); + return Column( + children: [ + Text("libCwtch Debug Info: " + snapshot.data.toString()), + Text("Message Cache Size (Mb): " + (Provider.of(context).profs.cacheMemUsage() / (1024 * 1024)).toString()) + ], + ); + } else { + return Container(); } - return Container(); - })) - ])))); + }, + ), + ), + Visibility( + visible: EnvironmentConfig.BUILD_VER == dev_version, + child: FutureBuilder( + future: Provider.of(context).cwtch.PlatformChannelInfo(), + builder: (context, snapshot) { + if (snapshot.hasData) { + HashMap data = snapshot.data as HashMap; + return getPlatformInfo(settings, data); + } + return Container(); + })) + ]))))); }); }); } @@ -138,9 +137,6 @@ class _GlobalSettingsAboutViewState extends State { // TODO: deprecated ? /// Construct a version string from Package Info String constructVersionString(PackageInfo pinfo) { - if (pinfo == null) { - return ""; - } return pinfo.version + "." + pinfo.buildNumber; } } diff --git a/lib/views/globalsettingsappearanceview.dart b/lib/views/globalsettingsappearanceview.dart index f3dfc336..7a710363 100644 --- a/lib/views/globalsettingsappearanceview.dart +++ b/lib/views/globalsettingsappearanceview.dart @@ -34,218 +34,218 @@ class _GlobalSettingsAppearanceViewState extends State(context).locale.toString(), - onChanged: (String? newValue) { - setState(() { - EnvironmentConfig.debugLog("setting language: $newValue"); - settings.switchLocaleByCode(newValue!); - saveSettings(context); - }); - }, - items: AppLocalizations.supportedLocales.map>((Locale value) { - return DropdownMenuItem( - value: value.toString(), - child: Text( - key: Key("dropdownLanguage" + value.languageCode), - getLanguageFull(context, value.languageCode, value.countryCode), - style: settings.scaleFonts(defaultDropDownMenuItemTextStyle), - overflow: TextOverflow.ellipsis, - ), - ); - }).toList()))), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.settingTheme), - value: settings.current().mode == mode_light, - onChanged: (bool value) { - if (value) { - settings.setTheme(settings.theme.theme, mode_light); - } else { - settings.setTheme(settings.theme.theme, mode_dark); - } - -// Save Settings... - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(CwtchIcons.change_theme, color: settings.current().mainTextColor), - ), - ListTile( - title: Text(AppLocalizations.of(context)!.themeColorLabel), - trailing: Container( - width: MediaQuery.of(context).size.width / 4, - child: DropdownButton( - key: Key("DropdownTheme"), - isExpanded: true, - value: Provider.of(context).themeId, - onChanged: (String? newValue) { - setState(() { - settings.setTheme(newValue!, settings.theme.mode); - saveSettings(context); - }); - }, - items: settings.themeloader.themes.keys.map>((String themeId) { - return DropdownMenuItem( - value: themeId, - child: Text(getThemeName(context, settings, themeId), style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), //"ddi_$themeId", key: Key("ddi_$themeId")), - ); - }).toList())), - leading: Icon(Icons.palette, color: settings.current().mainTextColor), - ), - Visibility( - // TODO: Android support needs gomobile support for reading / writing themes, and ideally importing from a .zip or .tar.gz - visible: !Platform.isAndroid, - child: ListTile( - leading: Icon(Icons.palette, color: Provider.of(context).theme.messageFromMeTextColor), - title: Text(AppLocalizations.of(context)!.settingsImportThemeTitle), - subtitle: Text(AppLocalizations.of(context)!.settingsImportThemeDescription), - //AppLocalizations.of( - //context)! - //.fileSharingSettingsDownloadFolderDescription, + constraints: BoxConstraints(minHeight: viewportConstraints.maxHeight, maxWidth: viewportConstraints.maxWidth), + child: Container( + color: settings.theme.backgroundPaneColor, + child: Column(children: [ + ListTile( + title: Text(AppLocalizations.of(context)!.settingLanguage), + leading: Icon(CwtchIcons.change_language, color: settings.current().mainTextColor), trailing: Container( width: MediaQuery.of(context).size.width / 4, - child: ElevatedButton.icon( - label: Text(AppLocalizations.of(context)!.settingsImportThemeButton), - onPressed: Provider.of(context).disableFilePicker - ? null - : () async { - if (Platform.isAndroid) { - return; - } - var selectedDirectory = await showSelectDirectoryPicker(context); - if (selectedDirectory != null) { - selectedDirectory += path.separator; - final customThemeDir = path.join(await Provider.of(context, listen: false).cwtch.getCwtchDir(), custom_themes_subdir); - importThemeCheck(context, settings, customThemeDir, selectedDirectory); - } else { - // User canceled the picker - } - }, - //onChanged: widget.onSave, - icon: Icon(Icons.folder), - //tooltip: widget.tooltip, - )))), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.settingsThemeImages), - subtitle: Text(AppLocalizations.of(context)!.settingsThemeImagesDescription), - value: settings.themeImages, - onChanged: (bool value) { - settings.themeImages = value; // Save Settings... - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.image, color: settings.current().mainTextColor), - ), - ListTile( - title: Text(AppLocalizations.of(context)!.settingUIColumnPortrait), - leading: Icon(Icons.table_chart, color: settings.current().mainTextColor), - trailing: Container( - width: MediaQuery.of(context).size.width / 4, - child: DropdownButton( - isExpanded: true, - value: settings.uiColumnModePortrait.toString(), - onChanged: (String? newValue) { - settings.uiColumnModePortrait = Settings.uiColumnModeFromString(newValue!); - saveSettings(context); - }, - items: Settings.uiColumnModeOptions(false).map>((DualpaneMode value) { - return DropdownMenuItem( - value: value.toString(), - child: Text(Settings.uiColumnModeToString(value, context), style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), - ); - }).toList()))), - ListTile( - title: Text( - AppLocalizations.of(context)!.settingUIColumnLandscape, - textWidthBasis: TextWidthBasis.longestLine, - softWrap: true, + child: DropdownButton( + key: Key("languagelist"), + isExpanded: true, + value: Provider.of(context).locale.toString(), + onChanged: (String? newValue) { + setState(() { + EnvironmentConfig.debugLog("setting language: $newValue"); + settings.switchLocaleByCode(newValue!); + saveSettings(context); + }); + }, + items: AppLocalizations.supportedLocales.map>((Locale value) { + return DropdownMenuItem( + value: value.toString(), + child: Text( + key: Key("dropdownLanguage" + value.languageCode), + getLanguageFull(context, value.languageCode, value.countryCode), + style: settings.scaleFonts(defaultDropDownMenuItemTextStyle), + overflow: TextOverflow.ellipsis, + ), + ); + }).toList()))), + SwitchListTile( + title: Text(AppLocalizations.of(context)!.settingTheme), + value: settings.current().mode == mode_light, + onChanged: (bool value) { + if (value) { + settings.setTheme(settings.theme.theme, mode_light); + } else { + settings.setTheme(settings.theme.theme, mode_dark); + } + +// Save Settings... + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(CwtchIcons.change_theme, color: settings.current().mainTextColor), ), - leading: Icon(Icons.stay_primary_landscape, color: settings.current().mainTextColor), - trailing: Container( - width: MediaQuery.of(context).size.width / 4, - child: Container( + ListTile( + title: Text(AppLocalizations.of(context)!.themeColorLabel), + trailing: Container( + width: MediaQuery.of(context).size.width / 4, + child: DropdownButton( + key: Key("DropdownTheme"), + isExpanded: true, + value: Provider.of(context).themeId, + onChanged: (String? newValue) { + setState(() { + settings.setTheme(newValue!, settings.theme.mode); + saveSettings(context); + }); + }, + items: settings.themeloader.themes.keys.map>((String themeId) { + return DropdownMenuItem( + value: themeId, + child: + Text(getThemeName(context, settings, themeId), style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), //"ddi_$themeId", key: Key("ddi_$themeId")), + ); + }).toList())), + leading: Icon(Icons.palette, color: settings.current().mainTextColor), + ), + Visibility( + // TODO: Android support needs gomobile support for reading / writing themes, and ideally importing from a .zip or .tar.gz + visible: !Platform.isAndroid, + child: ListTile( + leading: Icon(Icons.palette, color: Provider.of(context).theme.messageFromMeTextColor), + title: Text(AppLocalizations.of(context)!.settingsImportThemeTitle), + subtitle: Text(AppLocalizations.of(context)!.settingsImportThemeDescription), + //AppLocalizations.of( + //context)! + //.fileSharingSettingsDownloadFolderDescription, + trailing: Container( + width: MediaQuery.of(context).size.width / 4, + child: ElevatedButton.icon( + label: Text(AppLocalizations.of(context)!.settingsImportThemeButton), + onPressed: Provider.of(context).disableFilePicker + ? null + : () async { + if (Platform.isAndroid) { + return; + } + var selectedDirectory = await showSelectDirectoryPicker(context); + if (selectedDirectory != null) { + selectedDirectory += path.separator; + final customThemeDir = path.join(await Provider.of(context, listen: false).cwtch.getCwtchDir(), custom_themes_subdir); + importThemeCheck(context, settings, customThemeDir, selectedDirectory); + } else { + // User canceled the picker + } + }, + //onChanged: widget.onSave, + icon: Icon(Icons.folder), + //tooltip: widget.tooltip, + )))), + SwitchListTile( + title: Text(AppLocalizations.of(context)!.settingsThemeImages), + subtitle: Text(AppLocalizations.of(context)!.settingsThemeImagesDescription), + value: settings.themeImages, + onChanged: (bool value) { + settings.themeImages = value; // Save Settings... + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.image, color: settings.current().mainTextColor), + ), + ListTile( + title: Text(AppLocalizations.of(context)!.settingUIColumnPortrait), + leading: Icon(Icons.table_chart, color: settings.current().mainTextColor), + trailing: Container( width: MediaQuery.of(context).size.width / 4, child: DropdownButton( isExpanded: true, - value: settings.uiColumnModeLandscape.toString(), + value: settings.uiColumnModePortrait.toString(), onChanged: (String? newValue) { - settings.uiColumnModeLandscape = Settings.uiColumnModeFromString(newValue!); + settings.uiColumnModePortrait = Settings.uiColumnModeFromString(newValue!); saveSettings(context); }, - items: Settings.uiColumnModeOptions(true).map>((DualpaneMode value) { + items: Settings.uiColumnModeOptions(false).map>((DualpaneMode value) { return DropdownMenuItem( value: value.toString(), - child: Text(Settings.uiColumnModeToString(value, context), overflow: TextOverflow.ellipsis, style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), + child: Text(Settings.uiColumnModeToString(value, context), style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), ); - }).toList())))), - ListTile( - title: Text(AppLocalizations.of(context)!.defaultScalingText), - subtitle: Text(AppLocalizations.of(context)!.fontScalingDescription), - trailing: Container( - width: MediaQuery.of(context).size.width / 4, - child: Slider( - onChanged: (double value) { - settings.fontScaling = value; + }).toList()))), + ListTile( + title: Text( + AppLocalizations.of(context)!.settingUIColumnLandscape, + textWidthBasis: TextWidthBasis.longestLine, + softWrap: true, + ), + leading: Icon(Icons.stay_primary_landscape, color: settings.current().mainTextColor), + trailing: Container( + width: MediaQuery.of(context).size.width / 4, + child: Container( + width: MediaQuery.of(context).size.width / 4, + child: DropdownButton( + isExpanded: true, + value: settings.uiColumnModeLandscape.toString(), + onChanged: (String? newValue) { + settings.uiColumnModeLandscape = Settings.uiColumnModeFromString(newValue!); + saveSettings(context); + }, + items: Settings.uiColumnModeOptions(true).map>((DualpaneMode value) { + return DropdownMenuItem( + value: value.toString(), + child: Text(Settings.uiColumnModeToString(value, context), overflow: TextOverflow.ellipsis, style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), + ); + }).toList())))), + ListTile( + title: Text(AppLocalizations.of(context)!.defaultScalingText), + subtitle: Text(AppLocalizations.of(context)!.fontScalingDescription), + trailing: Container( + width: MediaQuery.of(context).size.width / 4, + child: Slider( + onChanged: (double value) { + settings.fontScaling = value; // Save Settings... - saveSettings(context); - EnvironmentConfig.debugLog("Font Scaling: $value"); - }, - min: 0.5, - divisions: 12, - max: 2.0, - label: '${settings.fontScaling * 100}%', - activeColor: settings.current().defaultButtonColor, - thumbColor: settings.current().mainTextColor, - overlayColor: MaterialStateProperty.all(settings.current().mainTextColor), - inactiveColor: settings.theme.defaultButtonDisabledColor, - value: settings.fontScaling)), - leading: Icon(Icons.format_size, color: settings.current().mainTextColor), - ), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.streamerModeLabel), - subtitle: Text(AppLocalizations.of(context)!.descriptionStreamerMode), - value: settings.streamerMode, - onChanged: (bool value) { - settings.setStreamerMode(value); + saveSettings(context); + EnvironmentConfig.debugLog("Font Scaling: $value"); + }, + min: 0.5, + divisions: 12, + max: 2.0, + label: '${settings.fontScaling * 100}%', + activeColor: settings.current().defaultButtonColor, + thumbColor: settings.current().mainTextColor, + overlayColor: MaterialStateProperty.all(settings.current().mainTextColor), + inactiveColor: settings.theme.defaultButtonDisabledColor, + value: settings.fontScaling)), + leading: Icon(Icons.format_size, color: settings.current().mainTextColor), + ), + SwitchListTile( + title: Text(AppLocalizations.of(context)!.streamerModeLabel), + subtitle: Text(AppLocalizations.of(context)!.descriptionStreamerMode), + value: settings.streamerMode, + onChanged: (bool value) { + settings.setStreamerMode(value); // Save Settings... - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(CwtchIcons.streamer_bunnymask, color: settings.current().mainTextColor), - ), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.formattingExperiment), - subtitle: Text(AppLocalizations.of(context)!.messageFormattingDescription), - value: settings.isExperimentEnabled(FormattingExperiment), - onChanged: (bool value) { - if (value) { - settings.enableExperiment(FormattingExperiment); - } else { - settings.disableExperiment(FormattingExperiment); - } - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonActiveColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.text_fields, color: settings.current().mainTextColor), - ), - ])))); + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(CwtchIcons.streamer_bunnymask, color: settings.current().mainTextColor), + ), + SwitchListTile( + title: Text(AppLocalizations.of(context)!.formattingExperiment), + subtitle: Text(AppLocalizations.of(context)!.messageFormattingDescription), + value: settings.isExperimentEnabled(FormattingExperiment), + onChanged: (bool value) { + if (value) { + settings.enableExperiment(FormattingExperiment); + } else { + settings.disableExperiment(FormattingExperiment); + } + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.text_fields, color: settings.current().mainTextColor), + ), + ]))))); }); }); } diff --git a/lib/views/globalsettingsbehaviourview.dart b/lib/views/globalsettingsbehaviourview.dart index 0a35c541..26c1ff1d 100644 --- a/lib/views/globalsettingsbehaviourview.dart +++ b/lib/views/globalsettingsbehaviourview.dart @@ -69,108 +69,108 @@ class _GlobalSettingsBehaviourViewState extends State>((NotificationPolicy value) { - return DropdownMenuItem( - value: value, - child: Text(Settings.notificationPolicyToString(value, context), overflow: TextOverflow.ellipsis, style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), - ); - }).toList())), - leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), - ), - ListTile( - title: Text(AppLocalizations.of(context)!.notificationContentSettingLabel), - subtitle: Text(AppLocalizations.of(context)!.notificationContentSettingDescription), - trailing: Container( - width: MediaQuery.of(context).size.width / 4, - child: DropdownButton( - isExpanded: true, - value: settings.notificationContent, - onChanged: (NotificationContent? newValue) { - settings.notificationContent = newValue!; - saveSettings(context); - }, - items: NotificationContent.values.map>((NotificationContent value) { - return DropdownMenuItem( - value: value, - child: Text(Settings.notificationContentToString(value, context), overflow: TextOverflow.ellipsis, style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), - ); - }).toList())), - leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), - ), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.blockUnknownLabel), - subtitle: Text(AppLocalizations.of(context)!.descriptionBlockUnknownConnections), - value: settings.blockUnknownConnections, - onChanged: (bool value) { - if (value) { - settings.forbidUnknownConnections(); - } else { - settings.allowUnknownConnections(); - } + constraints: BoxConstraints(minHeight: viewportConstraints.maxHeight, maxWidth: viewportConstraints.maxWidth), + child: Container( + color: settings.theme.backgroundPaneColor, + child: Column(children: [ + Visibility( + visible: Platform.isAndroid, + child: SwitchListTile( + title: Text(AppLocalizations.of(context)!.settingAndroidPowerExemption), + subtitle: Text(AppLocalizations.of(context)!.settingAndroidPowerExemptionDescription), + value: powerExempt, + onChanged: (bool value) { + if (value) { + requestBatteryExemption(); + } else { + // We can't ask for it to be turned off, show an informational popup + showBatteryDialog(context); + } + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.power, color: settings.current().mainTextColor), + ), + ), + ListTile( + title: Text(AppLocalizations.of(context)!.notificationPolicySettingLabel), + subtitle: Text(AppLocalizations.of(context)!.notificationPolicySettingDescription), + trailing: Container( + width: MediaQuery.of(context).size.width / 4, + child: DropdownButton( + isExpanded: true, + value: settings.notificationPolicy, + onChanged: (NotificationPolicy? newValue) { + settings.notificationPolicy = newValue!; + saveSettings(context); + }, + items: NotificationPolicy.values.map>((NotificationPolicy value) { + return DropdownMenuItem( + value: value, + child: Text(Settings.notificationPolicyToString(value, context), overflow: TextOverflow.ellipsis, style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), + ); + }).toList())), + leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), + ), + ListTile( + title: Text(AppLocalizations.of(context)!.notificationContentSettingLabel), + subtitle: Text(AppLocalizations.of(context)!.notificationContentSettingDescription), + trailing: Container( + width: MediaQuery.of(context).size.width / 4, + child: DropdownButton( + isExpanded: true, + value: settings.notificationContent, + onChanged: (NotificationContent? newValue) { + settings.notificationContent = newValue!; + saveSettings(context); + }, + items: NotificationContent.values.map>((NotificationContent value) { + return DropdownMenuItem( + value: value, + child: + Text(Settings.notificationContentToString(value, context), overflow: TextOverflow.ellipsis, style: settings.scaleFonts(defaultDropDownMenuItemTextStyle)), + ); + }).toList())), + leading: Icon(CwtchIcons.chat_bubble_empty_24px, color: settings.current().mainTextColor), + ), + SwitchListTile( + title: Text(AppLocalizations.of(context)!.blockUnknownLabel), + subtitle: Text(AppLocalizations.of(context)!.descriptionBlockUnknownConnections), + value: settings.blockUnknownConnections, + onChanged: (bool value) { + if (value) { + settings.forbidUnknownConnections(); + } else { + settings.allowUnknownConnections(); + } - // Save Settings... - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(CwtchIcons.block_unknown, color: settings.current().mainTextColor), - ), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.defaultPreserveHistorySetting), - subtitle: Text(AppLocalizations.of(context)!.preserveHistorySettingDescription), - value: settings.preserveHistoryByDefault, - onChanged: (bool value) { - if (value) { - settings.setPreserveHistoryDefault(); - } else { - settings.setDeleteHistoryDefault(); - } + // Save Settings... + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(CwtchIcons.block_unknown, color: settings.current().mainTextColor), + ), + SwitchListTile( + title: Text(AppLocalizations.of(context)!.defaultPreserveHistorySetting), + subtitle: Text(AppLocalizations.of(context)!.preserveHistorySettingDescription), + value: settings.preserveHistoryByDefault, + onChanged: (bool value) { + if (value) { + settings.setPreserveHistoryDefault(); + } else { + settings.setDeleteHistoryDefault(); + } - // Save Settings... - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(CwtchIcons.peer_history, color: settings.current().mainTextColor), - ), - ])))); + // Save Settings... + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(CwtchIcons.peer_history, color: settings.current().mainTextColor), + ), + ]))))); }); }); } diff --git a/lib/views/globalsettingsexperimentsview.dart b/lib/views/globalsettingsexperimentsview.dart index bc064167..258ecc0b 100644 --- a/lib/views/globalsettingsexperimentsview.dart +++ b/lib/views/globalsettingsexperimentsview.dart @@ -30,213 +30,210 @@ class _GlobalSettingsExperimentsViewState extends State(context, listen: false).cwtch.IsServersCompiled() - ? Text(AppLocalizations.of(context)!.settingServersDescription) - : Text("This version of Cwtch has been compiled without support for the server hosting experiment."), - value: Provider.of(context, listen: false).cwtch.IsServersCompiled() && settings.isExperimentEnabled(ServerManagementExperiment), - onChanged: Provider.of(context, listen: false).cwtch.IsServersCompiled() - ? (bool value) { - Provider.of(context, listen: false).clear(); - if (value) { - settings.enableExperiment(ServerManagementExperiment); - } else { - settings.disableExperiment(ServerManagementExperiment); - } - // Save Settings... - saveSettings(context); - } - : null, + constraints: BoxConstraints(minHeight: viewportConstraints.maxHeight, maxWidth: viewportConstraints.maxWidth), + child: Container( + color: settings.theme.backgroundPaneColor, + child: Column(children: [ + SwitchListTile( + title: Text(AppLocalizations.of(context)!.experimentsEnabled), + subtitle: Text(AppLocalizations.of(context)!.descriptionExperiments), + value: settings.experimentsEnabled, + onChanged: (bool value) { + if (value) { + settings.enableExperiments(); + } else { + settings.disableExperiments(); + } + // Save Settings... + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(CwtchIcons.enable_experiments, color: settings.current().mainTextColor), + ), + Visibility( + visible: settings.experimentsEnabled, + child: Column( + children: [ + SwitchListTile( + title: Text(AppLocalizations.of(context)!.enableGroups), + subtitle: Text(AppLocalizations.of(context)!.descriptionExperimentsGroups), + value: settings.isExperimentEnabled(TapirGroupsExperiment), + onChanged: (bool value) { + if (value) { + settings.enableExperiment(TapirGroupsExperiment); + } else { + settings.disableExperiment(TapirGroupsExperiment); + } + // Save Settings... + saveSettings(context); + }, activeTrackColor: settings.theme.defaultButtonColor, inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - inactiveThumbColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(CwtchIcons.dns_24px), - )), - SwitchListTile( - title: Text(AppLocalizations.of(context)!.settingFileSharing), - subtitle: Text(AppLocalizations.of(context)!.descriptionFileSharing), - value: settings.isExperimentEnabled(FileSharingExperiment), - onChanged: (bool value) { - if (value) { - if (checkDownloadDirectory(context, settings)) { - settings.enableExperiment(FileSharingExperiment); - } else { - settings.enableExperiment(FileSharingExperiment); - settings.disableExperiment(ImagePreviewsExperiment); - } - } else { - settings.disableExperiment(FileSharingExperiment); - settings.disableExperiment(ImagePreviewsExperiment); - } - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(CwtchIcons.attached_file_3, color: settings.current().mainTextColor), - ), - Visibility( - visible: settings.isExperimentEnabled(FileSharingExperiment), - child: Column(children: [ + secondary: Icon(CwtchIcons.enable_groups, color: settings.current().mainTextColor), + ), + Visibility( + visible: !Platform.isAndroid && !Platform.isIOS, + child: SwitchListTile( + title: Text(AppLocalizations.of(context)!.settingServers), + subtitle: Provider.of(context, listen: false).cwtch.IsServersCompiled() + ? Text(AppLocalizations.of(context)!.settingServersDescription) + : Text("This version of Cwtch has been compiled without support for the server hosting experiment."), + value: Provider.of(context, listen: false).cwtch.IsServersCompiled() && settings.isExperimentEnabled(ServerManagementExperiment), + onChanged: Provider.of(context, listen: false).cwtch.IsServersCompiled() + ? (bool value) { + Provider.of(context, listen: false).clear(); + if (value) { + settings.enableExperiment(ServerManagementExperiment); + } else { + settings.disableExperiment(ServerManagementExperiment); + } + // Save Settings... + saveSettings(context); + } + : null, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(CwtchIcons.dns_24px), + )), SwitchListTile( - title: Text(AppLocalizations.of(context)!.settingImagePreviews), - subtitle: Text(AppLocalizations.of(context)!.settingImagePreviewsDescription), - value: settings.isExperimentEnabled(ImagePreviewsExperiment), + title: Text(AppLocalizations.of(context)!.settingFileSharing), + subtitle: Text(AppLocalizations.of(context)!.descriptionFileSharing), + value: settings.isExperimentEnabled(FileSharingExperiment), onChanged: (bool value) { if (value) { if (checkDownloadDirectory(context, settings)) { - settings.enableExperiment(ImagePreviewsExperiment); + settings.enableExperiment(FileSharingExperiment); } else { + settings.enableExperiment(FileSharingExperiment); settings.disableExperiment(ImagePreviewsExperiment); } } else { + settings.disableExperiment(FileSharingExperiment); settings.disableExperiment(ImagePreviewsExperiment); } saveSettings(context); }, - activeTrackColor: settings.theme.defaultButtonActiveColor, + activeTrackColor: settings.theme.defaultButtonColor, inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.photo, color: settings.current().mainTextColor), + secondary: Icon(CwtchIcons.attached_file_3, color: settings.current().mainTextColor), ), Visibility( - visible: settings.isExperimentEnabled(ImagePreviewsExperiment) && !Platform.isAndroid, + visible: settings.isExperimentEnabled(FileSharingExperiment), + child: Column(children: [ + SwitchListTile( + title: Text(AppLocalizations.of(context)!.settingImagePreviews), + subtitle: Text(AppLocalizations.of(context)!.settingImagePreviewsDescription), + value: settings.isExperimentEnabled(ImagePreviewsExperiment), + onChanged: (bool value) { + if (value) { + if (checkDownloadDirectory(context, settings)) { + settings.enableExperiment(ImagePreviewsExperiment); + } else { + settings.disableExperiment(ImagePreviewsExperiment); + } + } else { + settings.disableExperiment(ImagePreviewsExperiment); + } + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.photo, color: settings.current().mainTextColor), + ), + Visibility( + visible: settings.isExperimentEnabled(ImagePreviewsExperiment) && !Platform.isAndroid, + child: CwtchFolderPicker( + testKey: Key("DownloadFolderPicker"), + label: AppLocalizations.of(context)!.settingDownloadFolder, + initialValue: settings.downloadPath, + textStyle: settings.scaleFonts(defaultDropDownMenuItemTextStyle), + description: AppLocalizations.of(context)!.fileSharingSettingsDownloadFolderDescription, + tooltip: AppLocalizations.of(context)!.fileSharingSettingsDownloadFolderTooltip, + onSave: (newVal) { + settings.downloadPath = newVal; + saveSettings(context); + }, + ), + ), + ]), + ), + Visibility( + visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported(), + child: SwitchListTile( + title: Text(AppLocalizations.of(context)!.blodeuweddExperimentEnable), + subtitle: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() + ? Text(AppLocalizations.of(context)!.blodeuweddDescription) + : Text(AppLocalizations.of(context)!.blodeuweddNotSupported), + value: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), + onChanged: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() + ? (bool value) { + if (value) { + settings.enableExperiment(BlodeuweddExperiment); + } else { + settings.disableExperiment(BlodeuweddExperiment); + } + saveSettings(context); + } + : null, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.assistant, color: settings.current().mainTextColor), + )), + Visibility( + visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), child: CwtchFolderPicker( testKey: Key("DownloadFolderPicker"), label: AppLocalizations.of(context)!.settingDownloadFolder, - initialValue: settings.downloadPath, - textStyle: settings.scaleFonts(defaultDropDownMenuItemTextStyle), - description: AppLocalizations.of(context)!.fileSharingSettingsDownloadFolderDescription, - tooltip: AppLocalizations.of(context)!.fileSharingSettingsDownloadFolderTooltip, + initialValue: settings.blodeuweddPath, + description: AppLocalizations.of(context)!.blodeuweddPath, + tooltip: AppLocalizations.of(context)!.blodeuweddPath, onSave: (newVal) { - settings.downloadPath = newVal; + settings.blodeuweddPath = newVal; saveSettings(context); }, ), ), - ]), - ), - Visibility( - visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported(), - child: SwitchListTile( - title: Text(AppLocalizations.of(context)!.blodeuweddExperimentEnable), - subtitle: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() - ? Text(AppLocalizations.of(context)!.blodeuweddDescription) - : Text(AppLocalizations.of(context)!.blodeuweddNotSupported), - value: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), - onChanged: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() - ? (bool value) { - if (value) { - settings.enableExperiment(BlodeuweddExperiment); - } else { - settings.disableExperiment(BlodeuweddExperiment); - } - saveSettings(context); - } - : null, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - inactiveThumbColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.assistant, color: settings.current().mainTextColor), - )), - Visibility( - visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), - child: CwtchFolderPicker( - testKey: Key("DownloadFolderPicker"), - label: AppLocalizations.of(context)!.settingDownloadFolder, - initialValue: settings.blodeuweddPath, - description: AppLocalizations.of(context)!.blodeuweddPath, - tooltip: AppLocalizations.of(context)!.blodeuweddPath, - onSave: (newVal) { - settings.blodeuweddPath = newVal; - saveSettings(context); - }, - ), - ), - ], - )), - Visibility( - visible: settings.experimentsEnabled, - child: SwitchListTile( - title: Text(AppLocalizations.of(context)!.enableExperimentClickableLinks), - subtitle: Text(AppLocalizations.of(context)!.experimentClickableLinksDescription), - value: settings.isExperimentEnabled(ClickableLinksExperiment), - onChanged: (bool value) { - if (value) { - settings.enableExperiment(ClickableLinksExperiment); - } else { - settings.disableExperiment(ClickableLinksExperiment); - } - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonActiveColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.link, color: settings.current().mainTextColor), - )), - Visibility( - visible: settings.experimentsEnabled, - child: SwitchListTile( - title: Text(AppLocalizations.of(context)!.enableExperimentQRCode), - subtitle: Text(AppLocalizations.of(context)!.experimentQRCodeDescription), - value: settings.isExperimentEnabled(QRCodeExperiment), - onChanged: (bool value) { - if (value) { - settings.enableExperiment(QRCodeExperiment); - } else { - settings.disableExperiment(QRCodeExperiment); - } - saveSettings(context); - }, - activeTrackColor: settings.theme.defaultButtonActiveColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.qr_code, color: settings.current().mainTextColor), - )), - ])))); + ], + )), + Visibility( + visible: settings.experimentsEnabled, + child: SwitchListTile( + title: Text(AppLocalizations.of(context)!.enableExperimentClickableLinks), + subtitle: Text(AppLocalizations.of(context)!.experimentClickableLinksDescription), + value: settings.isExperimentEnabled(ClickableLinksExperiment), + onChanged: (bool value) { + if (value) { + settings.enableExperiment(ClickableLinksExperiment); + } else { + settings.disableExperiment(ClickableLinksExperiment); + } + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.link, color: settings.current().mainTextColor), + )), + Visibility( + visible: settings.experimentsEnabled, + child: SwitchListTile( + title: Text(AppLocalizations.of(context)!.enableExperimentQRCode), + subtitle: Text(AppLocalizations.of(context)!.experimentQRCodeDescription), + value: settings.isExperimentEnabled(QRCodeExperiment), + onChanged: (bool value) { + if (value) { + settings.enableExperiment(QRCodeExperiment); + } else { + settings.disableExperiment(QRCodeExperiment); + } + saveSettings(context); + }, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.qr_code, color: settings.current().mainTextColor), + )), + ]))))); }); }); } diff --git a/lib/views/groupsettingsview.dart b/lib/views/groupsettingsview.dart index eec1c8ff..07772c49 100644 --- a/lib/views/groupsettingsview.dart +++ b/lib/views/groupsettingsview.dart @@ -71,8 +71,8 @@ class _GroupSettingsViewState extends State { minHeight: viewportConstraints.maxHeight, ), child: Container( - margin: EdgeInsets.all(10), - padding: EdgeInsets.all(2), + color: settings.theme.backgroundPaneColor, + padding: EdgeInsets.all(12), child: Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Nickname Save Button Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index 7ac67ce3..c4e5fdef 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -90,7 +90,7 @@ class _MessageViewState extends State { Widget build(BuildContext context) { // After leaving a conversation the selected conversation is set to null... if (Provider.of(context, listen: false).profileOnion == "") { - return Card(child: Center(child: Text(AppLocalizations.of(context)!.addContactFirst))); + return Container(color: Provider.of(context).theme.backgroundMainColor, child: Center(child: Text(AppLocalizations.of(context)!.addContactFirst))); } var showMessageFormattingPreview = Provider.of(context).isExperimentEnabled(FormattingExperiment); @@ -177,8 +177,8 @@ class _MessageViewState extends State { onPressed: _pushContactSettings)); var appState = Provider.of(context); - return WillPopScope( - onWillPop: _onWillPop, + return PopScope( + onPopInvoked: _onWillPop, child: Scaffold( backgroundColor: Provider.of(context).theme.backgroundMainColor, floatingActionButton: showDown @@ -266,7 +266,7 @@ class _MessageViewState extends State { )); } - Future _onWillPop() async { + Future _onWillPop(popd) async { Provider.of(context, listen: false).unreadMessages = 0; var previouslySelected = Provider.of(context, listen: false).selectedConversation; @@ -434,6 +434,7 @@ class _MessageViewState extends State { Provider.of(context, listen: false).cwtch.SetConversationAttribute(profileOnion, identifier, LastMessageSeenTimeKey, DateTime.now().toIso8601String()); focusNode.requestFocus(); + Provider.of(context, listen: false).messageDraft.clearDraft(); } Widget senderInviteChrome(String chrome, String targetName) { @@ -487,7 +488,7 @@ class _MessageViewState extends State { backgroundColor: Provider.of(context).theme.messageFromOtherBackgroundColor), textAlign: TextAlign.left, textWidthBasis: TextWidthBasis.longestLine, - constraints: BoxConstraints.expand(), + constraints: null, )); var showMessageFormattingPreview = Provider.of(context).isExperimentEnabled(FormattingExperiment); @@ -631,9 +632,9 @@ class _MessageViewState extends State { var textField = Container( decoration: BoxDecoration(border: Border(top: BorderSide(color: Provider.of(context).theme.defaultButtonActiveColor))), - child: RawKeyboardListener( + child: KeyboardListener( focusNode: FocusNode(), - onKey: handleKeyPress, + onKeyEvent: handleKeyPress, child: Padding( padding: EdgeInsets.all(8), child: TextFormField( @@ -806,21 +807,21 @@ class _MessageViewState extends State { children = [invite, composeBox]; } - return Container(color: Provider.of(context).theme.backgroundMainColor, child: Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: children)); + return Container( + color: Provider.of(context).theme.backgroundMainColor, child: Column(mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, children: children)); } // Send the message if enter is pressed without the shift key... - void handleKeyPress(RawKeyEvent event) { - var data = event.data; - if (event is RawKeyUpEvent) { - if ((data.logicalKey == LogicalKeyboardKey.enter && !event.isShiftPressed) || data.logicalKey == LogicalKeyboardKey.numpadEnter && !event.isShiftPressed) { - // Don't send when inserting a new line that is not at the end of the message - if (Provider.of(context, listen: false).messageDraft.ctrlCompose.selection.baseOffset != - Provider.of(context, listen: false).messageDraft.ctrlCompose.text.length) { - return; - } - _sendMessage(); + void handleKeyPress(KeyEvent event) { + var key = event.logicalKey; + if ((event.logicalKey == LogicalKeyboardKey.enter && !HardwareKeyboard.instance.isShiftPressed) || event.logicalKey == LogicalKeyboardKey.numpadEnter && HardwareKeyboard.instance.isShiftPressed) { + // Don't send when inserting a new line that is not at the end of the message + if (Provider.of(context, listen: false).messageDraft.ctrlCompose.selection.baseOffset != + Provider.of(context, listen: false).messageDraft.ctrlCompose.text.length) { + return; } + _sendMessage(); + Provider.of(context, listen: false).messageDraft.clearDraft(); } } diff --git a/lib/views/peersettingsview.dart b/lib/views/peersettingsview.dart index ce9154c3..23863ee8 100644 --- a/lib/views/peersettingsview.dart +++ b/lib/views/peersettingsview.dart @@ -105,8 +105,8 @@ class _PeerSettingsViewState extends State { minHeight: viewportConstraints.maxHeight, ), child: Container( - margin: EdgeInsets.all(10), - padding: EdgeInsets.all(2), + color: settings.theme.backgroundPaneColor, + padding: EdgeInsets.all(12), child: Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ Column(crossAxisAlignment: CrossAxisAlignment.center, children: [ ProfileImage( diff --git a/lib/views/profilemgrview.dart b/lib/views/profilemgrview.dart index cc5b430e..8302a65d 100644 --- a/lib/views/profilemgrview.dart +++ b/lib/views/profilemgrview.dart @@ -380,6 +380,7 @@ class _ProfileMgrViewState extends State { final divided = ListTile.divideTiles( context: context, + color: Provider.of(context).theme.backgroundPaneColor, tiles: widgetTiles, ).toList(); diff --git a/lib/widgets/contactrow.dart b/lib/widgets/contactrow.dart index 1a67ed90..1f118c2a 100644 --- a/lib/widgets/contactrow.dart +++ b/lib/widgets/contactrow.dart @@ -7,7 +7,6 @@ import 'package:cwtch/models/profile.dart'; import 'package:cwtch/models/redaction.dart'; import 'package:cwtch/themes/opaque.dart'; import 'package:cwtch/views/contactsview.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cwtch/widgets/profileimage.dart'; import 'package:provider/provider.dart'; @@ -65,7 +64,8 @@ class _ContactRowState extends State { splashFactory: InkSplash.splashFactory, child: Ink( color: selected ? Provider.of(context).theme.backgroundHilightElementColor : Colors.transparent, - child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ + child: Container( + child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(6.0), //border size child: ProfileImage( @@ -202,7 +202,7 @@ class _ContactRowState extends State { Provider.of(context, listen: false).resort(); }, )) - ])), + ]))), onTap: () { setState(() { selectConversation(context, contact.identifier, widget.messageIndex); diff --git a/lib/widgets/profilerow.dart b/lib/widgets/profilerow.dart index bbe65359..be5aa1c2 100644 --- a/lib/widgets/profilerow.dart +++ b/lib/widgets/profilerow.dart @@ -23,6 +23,7 @@ class _ProfileRowState extends State { var profile = Provider.of(context); return Card( clipBehavior: Clip.antiAlias, + color: Colors.transparent, margin: EdgeInsets.all(0.0), child: InkWell( child: Row( @@ -44,7 +45,7 @@ class _ProfileRowState extends State { mainAxisSize: MainAxisSize.min, children: [ Container( - height: 18.0 * Provider.of(context).fontScaling + 10.0, + height: 18.0 * Provider.of(context).fontScaling + 18.0, clipBehavior: Clip.hardEdge, decoration: BoxDecoration(), padding: EdgeInsets.all(5.0), diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 656d31e1..651dd124 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -16,7 +16,7 @@ import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) - FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) + FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 2a563c8d..4954f343 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: archive - sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" + sha256: "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d" url: "https://pub.dev" source: hosted - version: "3.3.7" + version: "3.4.10" args: dependency: transitive description: @@ -53,10 +53,10 @@ packages: dependency: transitive description: name: build - sha256: "43865b79fbb78532e4bff7c33087aa43b1d488c4fdef014eaef568af6d8016dc" + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" build_config: dependency: transitive description: @@ -69,34 +69,34 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95 + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.2" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "5e1929ad37d48bd382b124266cb8e521de5548d406a45a5ae6656c13dab73e37" + sha256: "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.8" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "6d6ee4276b1c5f34f21fdf39425202712d2be82019983d52f351c94aafbc2c41" + sha256: "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799" url: "https://pub.dev" source: hosted - version: "7.2.10" + version: "7.3.0" built_collection: dependency: transitive description: @@ -109,10 +109,10 @@ packages: dependency: transitive description: name: built_value - sha256: "598a2a682e2a7a90f08ba39c0aaa9374c5112340f0a2e275f61b59389543d166" + sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e url: "https://pub.dev" source: hosted - version: "8.6.1" + version: "8.9.1" characters: dependency: transitive description: @@ -133,10 +133,10 @@ packages: dependency: transitive description: name: cli_util - sha256: b8db3080e59b2503ca9e7922c3df2072cf13992354d5e944074ffa836fba43b7 + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.4.1" clock: dependency: transitive description: @@ -149,18 +149,18 @@ packages: dependency: transitive description: name: code_builder - sha256: "4ad01d6e56db961d29661561effde45e519939fdaeb46c351275b182eac70189" + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 url: "https://pub.dev" source: hosted - version: "4.5.0" + version: "4.10.0" collection: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" connectivity_plus: dependency: "direct main" description: @@ -203,26 +203,26 @@ packages: dependency: "direct main" description: name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" dart_style: dependency: transitive description: name: dart_style - sha256: f4f1f73ab3fd2afcbcca165ee601fe980d966af6a21b5970c6c9376955c528ad + sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" dbus: dependency: "direct main" description: name: dbus - sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" url: "https://pub.dev" source: hosted - version: "0.7.8" + version: "0.7.10" fake_async: dependency: transitive description: @@ -235,26 +235,26 @@ packages: dependency: "direct main" description: name: ffi - sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.2" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" file_picker: dependency: "direct main" description: name: file_picker - sha256: e6c7ad8e572379df86ea64ef0a5395889fba3954411d47ca021b888d79f8e798 + sha256: bdfa035a974a0c080576c4c8ed01cdf9d1b406a04c7daa05443ef0383a97bedc url: "https://pub.dev" source: hosted - version: "5.2.11" + version: "5.3.4" fixnum: dependency: transitive description: @@ -286,10 +286,10 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: "812791d43ccfc1b443a0d39fa02a206fc228c597e28ff9337e09e3ca8d370391" + sha256: "5f79a1be5e9fef9ddd7f494532d31851399099f9defc21ebcb1ae4539e8a37f1" url: "https://pub.dev" source: hosted - version: "14.1.1" + version: "14.1.5" flutter_local_notifications_linux: dependency: transitive description: @@ -315,10 +315,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "950e77c2bbe1692bc0874fc7fb491b96a4dc340457f4ea1641443d0a6c1ea360" + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da url: "https://pub.dev" source: hosted - version: "2.0.15" + version: "2.0.17" flutter_test: dependency: transitive description: flutter @@ -346,12 +346,12 @@ packages: dependency: transitive description: name: get_it - sha256: "529de303c739fca98cd7ece5fca500d8ff89649f1bb4b4e94fb20954abcd7468" + sha256: e6017ce7fdeaf218dc51a100344d8cb70134b80e28b760f8bb23c242437bafd7 url: "https://pub.dev" source: hosted - version: "7.6.0" + version: "7.6.7" gherkin: - dependency: transitive + dependency: "direct dev" description: name: gherkin sha256: c3e0c98b305a94ec8c015038529a1c8c6ea3b0953619514e76647407efb66d7f @@ -378,10 +378,10 @@ packages: dependency: transitive description: name: http - sha256: "4c3f04bfb64d3efd508d06b41b825542f08122d30bda4933fb95c069d22a4fa3" + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.2.1" http_multi_server: dependency: transitive description: @@ -402,17 +402,17 @@ packages: dependency: transitive description: name: image - sha256: a72242c9a0ffb65d03de1b7113bc4e189686fc07c7147b8b41811d0dd0e0d9bf + sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" url: "https://pub.dev" source: hosted - version: "4.0.17" + version: "4.1.7" integration_test: dependency: transitive description: flutter source: sdk version: "0.0.0" intl: - dependency: transitive + dependency: "direct main" description: name: intl sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" @@ -443,6 +443,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" logging: dependency: transitive description: @@ -455,42 +479,42 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.0.5" msix: dependency: "direct dev" description: name: msix - sha256: bf151b9a1648985e7604672ade54c8df693566099d0731e318548c47d54676e6 + sha256: "519b183d15dc9f9c594f247e2d2339d855cf0eaacc30e19b128e14f3ecc62047" url: "https://pub.dev" source: hosted - version: "3.14.2" + version: "3.16.7" nested: dependency: transitive description: @@ -511,10 +535,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: ceb027f6bc6a60674a233b4a90a7658af1aebdea833da0b5b53c1e9821a78c7b + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.2.0" package_info_plus_platform_interface: dependency: transitive description: @@ -524,93 +548,93 @@ packages: source: hosted version: "2.0.1" path: - dependency: transitive + dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" + sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b url: "https://pub.dev" source: hosted - version: "2.0.15" + version: "2.1.2" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" + sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668" url: "https://pub.dev" source: hosted - version: "2.0.27" + version: "2.2.2" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.2" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.1.11" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.2" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" url: "https://pub.dev" source: hosted - version: "2.1.7" + version: "2.2.1" petitparser: dependency: transitive description: name: petitparser - sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750 + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "6.0.2" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.8" pointycastle: dependency: transitive description: name: pointycastle - sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" url: "https://pub.dev" source: hosted - version: "3.7.3" + version: "3.7.4" pool: dependency: transitive description: @@ -623,18 +647,18 @@ packages: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" url: "https://pub.dev" source: hosted - version: "4.2.4" + version: "5.0.2" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.2" pub_semver: dependency: transitive description: @@ -671,10 +695,10 @@ packages: dependency: transitive description: name: screen_retriever - sha256: "4931f226ca158123ccd765325e9fbf360bfed0af9b460a10f960f9bb13d58323" + sha256: "6ee02c8a1158e6dae7ca430da79436e3b1c9563c8cf02f524af997c201ac2b90" url: "https://pub.dev" source: hosted - version: "0.1.6" + version: "0.1.9" scrollable_positioned_list: dependency: "direct main" description: @@ -708,10 +732,10 @@ packages: dependency: transitive description: name: source_gen - sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.5.0" source_span: dependency: transitive description: @@ -724,18 +748,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -772,10 +796,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" timezone: dependency: transitive description: @@ -804,66 +828,66 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 + sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e" url: "https://pub.dev" source: hosted - version: "6.1.11" + version: "6.2.5" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: eed4e6a1164aa9794409325c3b707ff424d4d1c2a785e7db67f8bbda00e36e51 + sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745 url: "https://pub.dev" source: hosted - version: "6.0.35" + version: "6.3.0" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "6.2.5" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.1.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.1.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "6bb1e5d7fe53daf02a8fee85352432a40b1f868a81880e99ec7440113d5cfcab" + sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.3.0" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.1.1" uuid: dependency: transitive description: @@ -884,10 +908,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 url: "https://pub.dev" source: hosted - version: "11.7.1" + version: "13.0.0" watcher: dependency: transitive description: @@ -900,34 +924,34 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.5.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.4" webdriver: dependency: transitive description: name: webdriver - sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" + sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" win32: dependency: transitive description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: "8cb58b45c47dcb42ab3651533626161d6b67a2921917d8d429791f76972b3480" url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "5.3.0" win_toast: dependency: "direct main" description: @@ -940,26 +964,26 @@ packages: dependency: "direct main" description: name: window_manager - sha256: "95096fede562cbb65f30d38b62d819a458f59ba9fe4a317f6cee669710f6676b" + sha256: b3c895bdf936c77b83c5254bec2e6b3f066710c1f89c38b20b8acc382b525494 url: "https://pub.dev" source: hosted - version: "0.3.4" + version: "0.3.8" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.4" xml: dependency: transitive description: name: xml - sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84" + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 url: "https://pub.dev" source: hosted - version: "6.3.0" + version: "6.5.0" yaml: dependency: "direct main" description: @@ -969,5 +993,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=3.7.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0" diff --git a/pubspec.yaml b/pubspec.yaml index d4effff6..8e836e4d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,6 +28,7 @@ dependencies: #intl_translation: any flutter_localizations: sdk: flutter + intl: any # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. @@ -40,7 +41,7 @@ dependencies: glob: any scrollable_positioned_list: 0.3.8 - file_picker: 5.2.11 + file_picker: 5.3.4 url_launcher: ^6.0.18 window_manager: ^0.3.2 yaml: ^3.1.2 @@ -56,10 +57,11 @@ dependencies: path: lib/third_party/connectivity_plus/connectivity_plus # misc plugins qr_flutter: ^4.0.0 - + path: any dev_dependencies: msix: ^3.12.2 build_runner: any + path: any flutter_gherkin: #path: ./flutter_gherkin git: @@ -72,8 +74,7 @@ dev_dependencies: #flutter_lokalise: # project_id: "737094205fceda35c50aa2.60364948" # api_token: "0407300fe4aa1edf1c1818e56234589e74c83c59" # Read only api Token from Dan - - + gherkin: any flutter_intl: enabled: true