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/