diff --git a/.appveyor.yml b/.appveyor.yml index 5e4ec4585f..fec09b4b58 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -12,7 +12,7 @@ environment: GO_VERSION: 1.19 GO_TAGS: --tags release python_stack: python 3.10 - FLUTTER_MACOS_URL: https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_3.3.3-stable.zip + FLUTTER_MACOS_URL: https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_3.10.0-stable.zip GITHUB_TOKEN: secure: doX0dwjWhBmT56aJqR9NCbtMFJpDpdYxPCIB4vQoHfSR+nTa+pLCo6Yv5qWpD/90 DOCKER_REGISTRY_USER: @@ -121,7 +121,7 @@ for: $v = "$($cv.major).$($cv.minor+1).0+$($env:APPVEYOR_BUILD_NUMBER)" } Update-AppveyorBuild -Version $v - - flutter upgrade + - flutter upgrade --force build_script: - cd package @@ -148,7 +148,7 @@ for: VC_REDIST_DIR: 'C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\14.29.30133\x64\Microsoft.VC142.CRT' install: - - flutter upgrade + - flutter upgrade --force build_script: - cd client @@ -224,7 +224,7 @@ for: install: - sudo apt update - sudo apt install -y libgtk-3-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio - - flutter upgrade + - flutter upgrade --force build_script: - cd client @@ -369,7 +369,7 @@ for: - job_name: Build Fletd install: - - flutter upgrade + - flutter upgrade --force # Go and GoReleaser - gvm install go${GO_VERSION} -B diff --git a/client/integration_test/app_test.dart b/client/integration_test/app_test.dart index b9508b3526..219301a068 100644 --- a/client/integration_test/app_test.dart +++ b/client/integration_test/app_test.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flet_client/main.dart' as app; -import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; diff --git a/client/macos/Flutter/GeneratedPluginRegistrant.swift b/client/macos/Flutter/GeneratedPluginRegistrant.swift index 92527c0ea7..6b7922d0a2 100644 --- a/client/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/client/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,7 @@ import FlutterMacOS import Foundation import audioplayers_darwin -import path_provider_macos +import path_provider_foundation import screen_retriever import shared_preferences_foundation import url_launcher_macos diff --git a/client/macos/Podfile.lock b/client/macos/Podfile.lock index 783a5f680c..0732779252 100644 --- a/client/macos/Podfile.lock +++ b/client/macos/Podfile.lock @@ -2,7 +2,8 @@ PODS: - audioplayers_darwin (0.0.1): - FlutterMacOS - FlutterMacOS (1.0.0) - - path_provider_macos (0.0.1): + - path_provider_foundation (0.0.1): + - Flutter - FlutterMacOS - screen_retriever (0.0.1): - FlutterMacOS @@ -19,7 +20,7 @@ PODS: DEPENDENCIES: - audioplayers_darwin (from `Flutter/ephemeral/.symlinks/plugins/audioplayers_darwin/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - screen_retriever (from `Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/macos`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) @@ -31,8 +32,8 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/audioplayers_darwin/macos FlutterMacOS: :path: Flutter/ephemeral - path_provider_macos: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin screen_retriever: :path: Flutter/ephemeral/.symlinks/plugins/screen_retriever/macos shared_preferences_foundation: @@ -47,7 +48,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: audioplayers_darwin: dcad41de4fbd0099cb3749f7ab3b0cb8f70b810c FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - path_provider_macos: 05fb0ef0cedf3e5bd179b9e41a638682b37133ea + path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38 shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca url_launcher_macos: c04e4fa86382d4f94f6b38f14625708be3ae52e2 diff --git a/client/pubspec.lock b/client/pubspec.lock index c8f2b0b9d2..9ebdeb03f2 100644 --- a/client/pubspec.lock +++ b/client/pubspec.lock @@ -21,66 +21,66 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" audioplayers: dependency: transitive description: name: audioplayers - sha256: "5616d6b84351e63e4b5e20125b24b2af6b5c1700ec3f6a96d1bcff0a2086a778" + sha256: "6063c05f987596ba7a3dad9bb9a5d8adfa5e7c07b9bae5301b27c11d0b3a239f" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: b2c833e6f718b6b030454e329931229afafe9327fdb002874dd544dc8bf2484d + sha256: fb6bca878ad175d8f6ddc0e0a2d4226d81fa7c10747c12db420e96c7a096b2cc url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "3.0.1" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: b2be46402332603bb1d1763e0bbefad97d3aa71d9099148df23bc564a20af524 + sha256: c4a56c49347b2e85ac4e1efea218948ca0fba87f04d2a3d3de07ce2410037038 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.1" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: e95b65e1f4d4764601dac5e65f8d8186fc29401043ab020f1dacec483d708707 + sha256: "897e24f190232a3fbb88134b062aa83a9240f55789b5e8d17c114283284ef56b" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.1" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "178581a44cb685fd798d2108111d2e98cca3400e30b9c3a05546f124fb37f600" + sha256: "3a90a46198d375fc7d47bc1d3070c8fd8863b6469b7d87ca80f953efb090f976" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "859ba09be2a57e57a787273f18c8cf0d9b61383870c5ee4b5632fe9adbc37edf" + sha256: "4f5dcbfec0bf98ea09e243d5f5b64ea43a4e6710a2f292724bed16cdba3c691e" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "3.0.1" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "622e01c4c357c2aaf1b956c3a0f89d97c3cb40315c03f16e3b6c2a31ff9c38bc" + sha256: "010f575653c01ccbe9756050b18df83d89426740e04b684f6438aa26c775a965" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "2.0.1" boolean_selector: dependency: transitive description: @@ -93,10 +93,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -109,10 +109,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.1" crypto: dependency: transitive description: @@ -298,10 +298,10 @@ packages: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" lints: dependency: transitive description: @@ -322,10 +322,10 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.15" material_color_utilities: dependency: transitive description: @@ -338,18 +338,18 @@ packages: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" path_drawing: dependency: transitive description: @@ -370,10 +370,10 @@ packages: dependency: transitive description: name: path_provider - sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.15" path_provider_android: dependency: transitive description: @@ -382,14 +382,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.22" - path_provider_ios: + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" + name: path_provider_foundation + sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.2.3" path_provider_linux: dependency: transitive description: @@ -398,14 +398,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - sha256: cd57cb98a30ce9d12fdd1896d9d3b0517ce689f942de6ccd2708cd39b3d18a7c - url: "https://pub.dev" - source: hosted - version: "2.0.7" path_provider_platform_interface: dependency: transitive description: @@ -603,6 +595,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.3.1" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.dev" + source: hosted + version: "3.1.0" term_glyph: dependency: transitive description: @@ -615,10 +615,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.5.1" typed_data: dependency: transitive description: @@ -719,10 +719,10 @@ packages: dependency: transitive description: name: vm_service - sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 + sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe url: "https://pub.dev" source: hosted - version: "9.4.0" + version: "11.3.0" web_socket_channel: dependency: transitive description: @@ -735,10 +735,10 @@ packages: dependency: transitive description: name: webdriver - sha256: ef67178f0cc7e32c1494645b11639dd1335f1d18814aa8435113a92e9ef9d841 + sha256: "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" win32: dependency: transitive description: @@ -788,5 +788,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.0.0" + dart: ">=3.0.0 <4.0.0" + flutter: ">=3.3.0" diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 26acf0d404..8009a03a74 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.19.0 <3.0.0" + sdk: '>=3.0.0 <4.0.0' # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/client/web/index.html b/client/web/index.html index 601d67ea82..feb7a02ad3 100644 --- a/client/web/index.html +++ b/client/web/index.html @@ -25,6 +25,7 @@ + @@ -103,7 +104,10 @@ } }).then(function (engineInitializer) { loading.classList.add('main_done'); - return engineInitializer.initializeEngine(); + return engineInitializer.initializeEngine({ + renderer: flutterWebRenderer, + useColorEmoji: useColorEmoji, + }); }).then(function (appRunner) { loading.classList.add('init_done'); return appRunner.runApp(); diff --git a/package/lib/src/controls/responsive_row.dart b/package/lib/src/controls/responsive_row.dart index d8ae624d94..0ecc55ee2a 100644 --- a/package/lib/src/controls/responsive_row.dart +++ b/package/lib/src/controls/responsive_row.dart @@ -92,7 +92,7 @@ class ResponsiveRowControl extends StatelessWidget { alignment: parseWrapAlignment( control, "alignment", WrapAlignment.start), crossAxisAlignment: parseWrapCrossAlignment(control, - "verticalAlignment", WrapCrossAlignment.center), + "verticalAlignment", WrapCrossAlignment.start), children: controls, ) : Row( @@ -100,7 +100,7 @@ class ResponsiveRowControl extends StatelessWidget { control, "alignment", MainAxisAlignment.start), mainAxisSize: MainAxisSize.max, crossAxisAlignment: parseCrossAxisAlignment(control, - "verticalAlignment", CrossAxisAlignment.center), + "verticalAlignment", CrossAxisAlignment.start), children: controls, ); } catch (e) { diff --git a/package/lib/src/controls/tabs.dart b/package/lib/src/controls/tabs.dart index d3533fee18..42a3126cb4 100644 --- a/package/lib/src/controls/tabs.dart +++ b/package/lib/src/controls/tabs.dart @@ -185,7 +185,7 @@ class _TabsControlState extends State HexColor.fromString(Theme.of(context), widget.control.attrString("unselectedLabelColor", "")!) ?? TabBarTheme.of(context).unselectedLabelColor ?? Theme.of(context).colorScheme.onSurface, - overlayColor: getMaterialStateProperty( + overlayColor: getMaterialStateProperty( overlayColor, (jv) => HexColor.fromString(Theme.of(context), jv as String), null) ?? TabBarTheme.of(context).overlayColor, tabs: viewModel.controlViews.map((tabView) { diff --git a/package/lib/src/utils/alignment.dart b/package/lib/src/utils/alignment.dart index bde660b6c6..07efbbba8e 100644 --- a/package/lib/src/utils/alignment.dart +++ b/package/lib/src/utils/alignment.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:flutter/cupertino.dart'; +import 'package:flutter/widgets.dart'; import '../models/control.dart'; import 'numbers.dart'; diff --git a/package/lib/src/utils/buttons.dart b/package/lib/src/utils/buttons.dart index b7e5b9e7c1..c54a70e4d3 100644 --- a/package/lib/src/utils/buttons.dart +++ b/package/lib/src/utils/buttons.dart @@ -47,7 +47,7 @@ MaterialStateProperty? parseMaterialStateColor( } final j1 = json.decode(v); - return getMaterialStateProperty( + return getMaterialStateProperty( j1, (jv) => HexColor.fromString(theme, jv as String), null); } @@ -64,21 +64,21 @@ ButtonStyle? buttonStyleFromJSON( BorderSide defaultBorderSide, OutlinedBorder defaultShape) { return ButtonStyle( - foregroundColor: getMaterialStateProperty( + foregroundColor: getMaterialStateProperty( json["color"], (jv) => HexColor.fromString(theme, jv as String), defaultForegroundColor), - backgroundColor: getMaterialStateProperty( + backgroundColor: getMaterialStateProperty( json["bgcolor"], (jv) => HexColor.fromString(theme, jv as String), defaultBackgroundColor), - overlayColor: getMaterialStateProperty( + overlayColor: getMaterialStateProperty( json["overlay_color"], (jv) => HexColor.fromString(theme, jv as String), defaultOverlayColor), - shadowColor: getMaterialStateProperty(json["shadow_color"], + shadowColor: getMaterialStateProperty(json["shadow_color"], (jv) => HexColor.fromString(theme, jv as String), defaultShadowColor), - surfaceTintColor: getMaterialStateProperty( + surfaceTintColor: getMaterialStateProperty( json["surface_tint_color"], (jv) => HexColor.fromString(theme, jv as String), defaultSurfaceTintColor), @@ -89,10 +89,10 @@ ButtonStyle? buttonStyleFromJSON( : null, padding: getMaterialStateProperty( json["padding"], (jv) => edgeInsetsFromJson(jv), defaultPadding), - side: getMaterialStateProperty( + side: getMaterialStateProperty( json["side"], (jv) => borderSideFromJSON(theme, jv, theme.colorScheme.outline), defaultBorderSide), - shape: getMaterialStateProperty( + shape: getMaterialStateProperty( json["shape"], (jv) => outlinedBorderFromJSON(jv), defaultShape)); } diff --git a/package/lib/src/utils/edge_insets.dart b/package/lib/src/utils/edge_insets.dart index 68fccdd5ab..c3514d4695 100644 --- a/package/lib/src/utils/edge_insets.dart +++ b/package/lib/src/utils/edge_insets.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:flutter/cupertino.dart'; +import 'package:flutter/widgets.dart'; import '../models/control.dart'; import 'numbers.dart'; diff --git a/package/lib/src/utils/material_icons.dart b/package/lib/src/utils/material_icons.dart index 0826a807ab..78ac75b998 100644 --- a/package/lib/src/utils/material_icons.dart +++ b/package/lib/src/utils/material_icons.dart @@ -2,13 +2,20 @@ import 'package:flutter/material.dart'; // PowerShell script to generate icons list // -// $url = 'https://raw.githubusercontent.com/flutter/flutter/3.7.0/packages/flutter/lib/src/material/icons.dart' -// (Invoke-WebRequest $url).Content.Split("`n") | ForEach-Object { -// $found = $_ -match ' const IconData ([a-z0-9_]+) ' -// if ($found) { -// "`"$($matches[1])`": Icons.$($matches[1])," -// } -// } | Set-Content "$HOME/icons.txt" +/* + +$url = 'https://raw.githubusercontent.com/flutter/flutter/3.10.0/packages/flutter/lib/src/material/icons.dart' +$lines = ('Map materialIcons = {') +$lines += (Invoke-WebRequest $url).Content.Split("`n") | ForEach-Object { + $found = $_ -match ' const IconData ([a-z0-9_]+) ' + if ($found) { + "`"$($matches[1])`": Icons.$($matches[1])," + } +} +$lines += '};' +$lines | Set-Content "$HOME/icons.txt" + +*/ Map materialIcons = { "ten_k": Icons.ten_k, diff --git a/package/lib/src/utils/material_state.dart b/package/lib/src/utils/material_state.dart index f6e329ec35..2802fd35a9 100644 --- a/package/lib/src/utils/material_state.dart +++ b/package/lib/src/utils/material_state.dart @@ -1,18 +1,20 @@ import 'package:flutter/material.dart'; -MaterialStateProperty? getMaterialStateProperty(dynamic jsonDictValue, +MaterialStateProperty? getMaterialStateProperty(dynamic jsonDictValue, T Function(dynamic) converterFromJson, T defaultValue) { + debugPrint("jsonDictValue: $jsonDictValue"); if (jsonDictValue == null) { return null; } var j = jsonDictValue; if (j is! Map) { j = {"": j}; + debugPrint("jsonDictValue DICT: $j"); } return MaterialStateFromJSON(j, converterFromJson, defaultValue); } -class MaterialStateFromJSON extends MaterialStateProperty { +class MaterialStateFromJSON extends MaterialStateProperty { late final Map _states; late final T _defaultValue; MaterialStateFromJSON(Map? jsonDictValue, @@ -29,7 +31,7 @@ class MaterialStateFromJSON extends MaterialStateProperty { } @override - T resolve(Set states) { + T? resolve(Set states) { //debugPrint("MaterialStateFromJSON states: $states, _states: $_states"); // find specific state for (var state in states) { @@ -40,7 +42,7 @@ class MaterialStateFromJSON extends MaterialStateProperty { // catch-all value if (_states.containsKey("")) { - return _states[""]!; + return _states[""]; } return _defaultValue; diff --git a/package/lib/src/utils/theme.dart b/package/lib/src/utils/theme.dart index 1abf25beca..9276006822 100644 --- a/package/lib/src/utils/theme.dart +++ b/package/lib/src/utils/theme.dart @@ -138,18 +138,18 @@ ScrollbarThemeData? parseScrollBarTheme( return null; } return theme.scrollbarTheme.copyWith( - trackVisibility: getMaterialStateProperty( + trackVisibility: getMaterialStateProperty( j["track_visibility"], (jv) => parseBool(jv), null), - trackColor: getMaterialStateProperty(j["track_color"], + trackColor: getMaterialStateProperty(j["track_color"], (jv) => HexColor.fromString(theme, jv as String), null), - trackBorderColor: getMaterialStateProperty(j["track_border_color"], + trackBorderColor: getMaterialStateProperty(j["track_border_color"], (jv) => HexColor.fromString(theme, jv as String), null), - thumbVisibility: getMaterialStateProperty( + thumbVisibility: getMaterialStateProperty( j["thumb_visibility"], (jv) => parseBool(jv), null), - thumbColor: getMaterialStateProperty(j["thumb_color"], + thumbColor: getMaterialStateProperty(j["thumb_color"], (jv) => HexColor.fromString(theme, jv as String), null), - thickness: - getMaterialStateProperty(j["thickness"], (jv) => parseDouble(jv), null), + thickness: getMaterialStateProperty( + j["thickness"], (jv) => parseDouble(jv), null), radius: j["radius"] != null ? Radius.circular(parseDouble(j["radius"])) : null, crossAxisMargin: j["cross_axis_margin"] != null @@ -173,7 +173,7 @@ TabBarTheme? parseTabBarTheme(ThemeData theme, Map? j) { var indicatorColor = HexColor.fromString(theme, j["indicator_color"] ?? ""); return theme.tabBarTheme.copyWith( - overlayColor: getMaterialStateProperty(j["overlay_color"], + overlayColor: getMaterialStateProperty(j["overlay_color"], (jv) => HexColor.fromString(theme, jv as String), null), dividerColor: HexColor.fromString(theme, j["divider_color"] ?? ""), indicatorColor: indicatorColor, diff --git a/package/lib/src/widgets/window_media.dart b/package/lib/src/widgets/window_media.dart index 1fe44b0f89..78afcc60ba 100644 --- a/package/lib/src/widgets/window_media.dart +++ b/package/lib/src/widgets/window_media.dart @@ -1,4 +1,4 @@ -import 'package:flutter/cupertino.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:window_manager/window_manager.dart'; diff --git a/package/pubspec.yaml b/package/pubspec.yaml index 46dd55ea47..b89a3422ab 100644 --- a/package/pubspec.yaml +++ b/package/pubspec.yaml @@ -14,7 +14,7 @@ platforms: windows: environment: - sdk: ">=2.19.0 <3.0.0" + sdk: '>=3.0.0 <4.0.0' dependencies: flutter: @@ -36,7 +36,7 @@ dependencies: shared_preferences: ^2.0.15 flutter_svg: ^1.1.6 window_to_front: ^0.0.3 - audioplayers: ^3.0.0 + audioplayers: ^4.0.1 shake: ^2.1.0 path: ^1.8.2 js: ^0.6.5 diff --git a/package/test/utils/theme_test.dart b/package/test/utils/theme_test.dart index 9ccb5764f8..dc42398e1c 100644 --- a/package/test/utils/theme_test.dart +++ b/package/test/utils/theme_test.dart @@ -1,7 +1,8 @@ import 'dart:convert'; import 'package:flet/src/utils/theme.dart'; -import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { diff --git a/sdk/python/packages/flet/src/flet/cli/commands/publish.py b/sdk/python/packages/flet/src/flet/cli/commands/publish.py index 54337c470a..383b80b032 100644 --- a/sdk/python/packages/flet/src/flet/cli/commands/publish.py +++ b/sdk/python/packages/flet/src/flet/cli/commands/publish.py @@ -1,9 +1,9 @@ import argparse import json import os -import sys import re import shutil +import sys import tarfile import tempfile from distutils.dir_util import copy_tree @@ -76,6 +76,13 @@ def add_arguments(self, parser: argparse.ArgumentParser) -> None: default="canvaskit", help="web renderer to use", ) + parser.add_argument( + "--use-color-emoji", + dest="use_color_emoji", + action="store_true", + default=False, + help="enables color emojis with CanvasKit renderer", + ) parser.add_argument( "--route-url-strategy", dest="route_url_strategy", @@ -85,7 +92,6 @@ def add_arguments(self, parser: argparse.ArgumentParser) -> None: ) def handle(self, options: argparse.Namespace) -> None: - # constants dist_name = "dist" app_tar_gz_filename = "app.tar.gz" @@ -213,7 +219,11 @@ def filter_tar(tarinfo: tarfile.TarInfo): index = index.replace("", pyodideCode) index = index.replace( "", - f'', + f'', + ) + index = index.replace( + "", + f"", ) index = index.replace("%FLET_ROUTE_URL_STRATEGY%", options.route_url_strategy) diff --git a/sdk/python/packages/flet/src/flet/flet.py b/sdk/python/packages/flet/src/flet/flet.py index 591f330496..34a7bea01d 100644 --- a/sdk/python/packages/flet/src/flet/flet.py +++ b/sdk/python/packages/flet/src/flet/flet.py @@ -63,6 +63,7 @@ def app( assets_dir=None, upload_dir=None, web_renderer="canvaskit", + use_color_emoji=False, route_url_strategy="path", auth_token=None, ): @@ -77,6 +78,7 @@ def app( assets_dir=assets_dir, upload_dir=upload_dir, web_renderer=web_renderer, + use_color_emoji=use_color_emoji, route_url_strategy=route_url_strategy, auth_token=auth_token, ) @@ -91,6 +93,7 @@ def app( assets_dir=assets_dir, upload_dir=upload_dir, web_renderer=web_renderer, + use_color_emoji=use_color_emoji, route_url_strategy=route_url_strategy, auth_token=auth_token, ) @@ -105,6 +108,7 @@ def __app_sync( assets_dir=None, upload_dir=None, web_renderer="canvaskit", + use_color_emoji=False, route_url_strategy="path", auth_token=None, ): @@ -121,6 +125,7 @@ def __app_sync( assets_dir=assets_dir, upload_dir=upload_dir, web_renderer=web_renderer, + use_color_emoji=use_color_emoji, route_url_strategy=route_url_strategy, ) @@ -154,7 +159,7 @@ def exit_gracefully(signum, frame): ) try: fvp.wait() - except (Exception) as e: + except Exception as e: pass else: if view == WEB_BROWSER and url_prefix is None: @@ -179,6 +184,7 @@ async def app_async( assets_dir=None, upload_dir=None, web_renderer="canvaskit", + use_color_emoji=False, route_url_strategy="path", auth_token=None, ): @@ -195,6 +201,7 @@ async def app_async( assets_dir=assets_dir, upload_dir=upload_dir, web_renderer=web_renderer, + use_color_emoji=use_color_emoji, route_url_strategy=route_url_strategy, ) @@ -228,7 +235,7 @@ def exit_gracefully(signum, frame): ) try: await fvp.wait() - except (Exception) as e: + except Exception as e: pass else: if view == WEB_BROWSER and url_prefix is None: @@ -266,9 +273,9 @@ def __connect_internal_sync( assets_dir=None, upload_dir=None, web_renderer=None, + use_color_emoji=False, route_url_strategy=None, ): - env_port = os.getenv("FLET_SERVER_PORT") if env_port is not None and env_port: port = int(env_port) @@ -283,6 +290,7 @@ def __connect_internal_sync( assets_dir, upload_dir, web_renderer, + use_color_emoji, route_url_strategy, ) @@ -343,9 +351,9 @@ async def __connect_internal_async( assets_dir=None, upload_dir=None, web_renderer=None, + use_color_emoji=False, route_url_strategy=None, ): - env_port = os.getenv("FLET_SERVER_PORT") if env_port is not None and env_port: port = int(env_port) @@ -360,6 +368,7 @@ async def __connect_internal_async( assets_dir, upload_dir, web_renderer, + use_color_emoji, route_url_strategy, ) @@ -412,7 +421,13 @@ async def on_session_created(session_data): def __start_flet_server( - host, port, assets_dir, upload_dir, web_renderer, route_url_strategy + host, + port, + assets_dir, + upload_dir, + web_renderer, + use_color_emoji, + route_url_strategy, ): server_ip = host if host not in [None, "", "*"] else "127.0.0.1" @@ -457,6 +472,9 @@ def __start_flet_server( logger.info(f"Web renderer configured: {web_renderer}") fletd_env["FLET_WEB_RENDERER"] = web_renderer + logger.info(f"Use color emoji: {use_color_emoji}") + fletd_env["FLET_USE_COLOR_EMOJI"] = str(use_color_emoji).lower() + if route_url_strategy is not None: logger.info(f"Route URL strategy configured: {route_url_strategy}") fletd_env["FLET_ROUTE_URL_STRATEGY"] = route_url_strategy diff --git a/server/config/config.go b/server/config/config.go index 41f073bf49..f2d46a1100 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -73,6 +73,7 @@ const ( // development uploadRootDir = "UPLOAD_ROOT_DIR" webRenderer = "WEB_RENDERER" + useColorEmoji = "USE_COLOR_EMOJI" routeUrlStrategy = "ROUTE_URL_STRATEGY" defaultRouteUrlStrategy = "hash" ) @@ -294,6 +295,10 @@ func WebRenderer() string { return viper.GetString(webRenderer) } +func UseColorEmoji() bool { + return viper.GetBool(useColorEmoji) +} + func RouteUrlStrategy() string { return viper.GetString(routeUrlStrategy) } diff --git a/server/server/server.go b/server/server/server.go index 24eb7555ef..b30c3b936f 100644 --- a/server/server/server.go +++ b/server/server/server.go @@ -138,9 +138,14 @@ func Start(ctx context.Context, wg *sync.WaitGroup, serverPort int, contentDir s if config.WebRenderer() != "" { indexData = bytes.Replace(indexData, []byte(""), - []byte(""), 1) + []byte(fmt.Sprintf("", config.WebRenderer())), 1) } + // color emoji + indexData = bytes.Replace(indexData, + []byte(""), + []byte(fmt.Sprintf("", config.UseColorEmoji())), 1) + c.Data(http.StatusOK, "text/html", indexData) } else { // API not found diff --git a/studio/client/pubspec.lock b/studio/client/pubspec.lock index c3cf890363..35ae22fd1a 100644 --- a/studio/client/pubspec.lock +++ b/studio/client/pubspec.lock @@ -13,66 +13,66 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" audioplayers: dependency: transitive description: name: audioplayers - sha256: "5616d6b84351e63e4b5e20125b24b2af6b5c1700ec3f6a96d1bcff0a2086a778" + sha256: "6063c05f987596ba7a3dad9bb9a5d8adfa5e7c07b9bae5301b27c11d0b3a239f" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.1" audioplayers_android: dependency: transitive description: name: audioplayers_android - sha256: b2c833e6f718b6b030454e329931229afafe9327fdb002874dd544dc8bf2484d + sha256: fb6bca878ad175d8f6ddc0e0a2d4226d81fa7c10747c12db420e96c7a096b2cc url: "https://pub.dev" source: hosted - version: "2.0.0" + version: "3.0.1" audioplayers_darwin: dependency: transitive description: name: audioplayers_darwin - sha256: b2be46402332603bb1d1763e0bbefad97d3aa71d9099148df23bc564a20af524 + sha256: c4a56c49347b2e85ac4e1efea218948ca0fba87f04d2a3d3de07ce2410037038 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "4.0.1" audioplayers_linux: dependency: transitive description: name: audioplayers_linux - sha256: e95b65e1f4d4764601dac5e65f8d8186fc29401043ab020f1dacec483d708707 + sha256: "897e24f190232a3fbb88134b062aa83a9240f55789b5e8d17c114283284ef56b" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "2.0.1" audioplayers_platform_interface: dependency: transitive description: name: audioplayers_platform_interface - sha256: "178581a44cb685fd798d2108111d2e98cca3400e30b9c3a05546f124fb37f600" + sha256: "3a90a46198d375fc7d47bc1d3070c8fd8863b6469b7d87ca80f953efb090f976" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" audioplayers_web: dependency: transitive description: name: audioplayers_web - sha256: "859ba09be2a57e57a787273f18c8cf0d9b61383870c5ee4b5632fe9adbc37edf" + sha256: "4f5dcbfec0bf98ea09e243d5f5b64ea43a4e6710a2f292724bed16cdba3c691e" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "3.0.1" audioplayers_windows: dependency: transitive description: name: audioplayers_windows - sha256: "622e01c4c357c2aaf1b956c3a0f89d97c3cb40315c03f16e3b6c2a31ff9c38bc" + sha256: "010f575653c01ccbe9756050b18df83d89426740e04b684f6438aa26c775a965" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "2.0.1" boolean_selector: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.1" crypto: dependency: transitive description: @@ -113,14 +113,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be - url: "https://pub.dev" - source: hosted - version: "1.0.5" equatable: dependency: transitive description: @@ -267,10 +259,10 @@ packages: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" lints: dependency: transitive description: @@ -291,10 +283,10 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.15" material_color_utilities: dependency: transitive description: @@ -307,18 +299,18 @@ packages: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" path_drawing: dependency: transitive description: @@ -339,10 +331,10 @@ packages: dependency: transitive description: name: path_provider - sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.15" path_provider_android: dependency: transitive description: @@ -351,14 +343,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.22" - path_provider_ios: + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" + name: path_provider_foundation + sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.2.3" path_provider_linux: dependency: transitive description: @@ -367,14 +359,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - sha256: cd57cb98a30ce9d12fdd1896d9d3b0517ce689f942de6ccd2708cd39b3d18a7c - url: "https://pub.dev" - source: hosted - version: "2.0.7" path_provider_platform_interface: dependency: transitive description: @@ -564,6 +548,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" + url: "https://pub.dev" + source: hosted + version: "3.1.0" term_glyph: dependency: transitive description: @@ -576,10 +568,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.5.1" typed_data: dependency: transitive description: @@ -717,5 +709,5 @@ packages: source: hosted version: "6.2.2" sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.0.0" + dart: ">=3.0.0 <4.0.0" + flutter: ">=3.3.0" diff --git a/studio/client/pubspec.yaml b/studio/client/pubspec.yaml index 05ba4b1852..e245720da6 100644 --- a/studio/client/pubspec.yaml +++ b/studio/client/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.19.0 <3.0.0" + sdk: '>=3.0.0 <4.0.0' # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -35,7 +35,6 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.2 flet: path: ../../package/