upgrade deps

This commit is contained in:
Fabian Freund
2026-05-01 15:02:03 +02:00
parent 65fd9c2e93
commit e70d882b69
27 changed files with 3641 additions and 2441 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
plugins { plugins {
id "com.android.application" id "com.android.application"
id "kotlin-android" id "kotlin-android"
id "org.jetbrains.kotlin.plugin.compose" version "2.3.10" id "org.jetbrains.kotlin.plugin.compose" version "2.3.21"
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id "dev.flutter.flutter-gradle-plugin" id "dev.flutter.flutter-gradle-plugin"
} }
+1 -1
View File
@@ -5,7 +5,7 @@ ext {
} }
buildscript { buildscript {
ext.kotlin_version = '2.3.10' ext.kotlin_version = '2.3.21'
} }
allprojects { allprojects {
+1 -1
View File
@@ -19,7 +19,7 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version '8.13.2' apply false id "com.android.application" version '8.13.2' apply false
id "org.jetbrains.kotlin.android" version "2.3.10" apply false id "org.jetbrains.kotlin.android" version "2.3.21" apply false
} }
include ":app" include ":app"
@@ -32,7 +32,7 @@ import 'package:weblibre/features/geckoview/features/tabs/data/entities/tab_mode
part 'tab.g.dart'; part 'tab.g.dart';
@CopyWith() @CopyWith(constructor: '_')
class TabState extends WebPageInfo { class TabState extends WebPageInfo {
static final defaultUrl = Uri.parse('about:blank'); static final defaultUrl = Uri.parse('about:blank');
@@ -98,6 +98,26 @@ class TabState extends WebPageInfo {
required this.translationState, required this.translationState,
}) : super(title: title.trim()); }) : super(title: title.trim());
TabState._({
required this.id,
required this.parentId,
required this.contextId,
required super.url,
required super.title,
required this.icon,
required this.thumbnail,
required this.progress,
required this.tabMode,
required this.isFullScreen,
required this.isLoading,
required this.showToolbarAsExpanded,
required this.securityInfoState,
required this.historyState,
required this.readerableState,
required this.findResultState,
required this.translationState,
});
factory TabState.$default(String tabId) => TabState( factory TabState.$default(String tabId) => TabState(
id: tabId, id: tabId,
parentId: null, parentId: null,
@@ -13,7 +13,7 @@ abstract class _$TabStateCWProxy {
TabState url(Uri url); TabState url(Uri url);
TabState title(String title); TabState title(String? title);
TabState icon(EquatableImage? icon); TabState icon(EquatableImage? icon);
@@ -50,7 +50,7 @@ abstract class _$TabStateCWProxy {
String? parentId, String? parentId,
String? contextId, String? contextId,
Uri url, Uri url,
String title, String? title,
EquatableImage? icon, EquatableImage? icon,
EquatableImage? thumbnail, EquatableImage? thumbnail,
int progress, int progress,
@@ -83,7 +83,7 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy {
TabState url(Uri url) => call(url: url); TabState url(Uri url) => call(url: url);
@override @override
TabState title(String title) => call(title: title); TabState title(String? title) => call(title: title);
@override @override
TabState icon(EquatableImage? icon) => call(icon: icon); TabState icon(EquatableImage? icon) => call(icon: icon);
@@ -153,7 +153,7 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy {
Object? findResultState = const $CopyWithPlaceholder(), Object? findResultState = const $CopyWithPlaceholder(),
Object? translationState = const $CopyWithPlaceholder(), Object? translationState = const $CopyWithPlaceholder(),
}) { }) {
return TabState( return TabState._(
id: _value.id, id: _value.id,
parentId: parentId == const $CopyWithPlaceholder() parentId: parentId == const $CopyWithPlaceholder()
? _value.parentId ? _value.parentId
@@ -167,10 +167,10 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy {
? _value.url ? _value.url
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: url as Uri, : url as Uri,
title: title == const $CopyWithPlaceholder() || title == null title: title == const $CopyWithPlaceholder()
? _value.title ? _value.title
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: title as String, : title as String?,
icon: icon == const $CopyWithPlaceholder() icon: icon == const $CopyWithPlaceholder()
? _value.icon ? _value.icon
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
@@ -116,7 +116,7 @@ class BookmarkEntry extends BookmarkItem with FastEquatable {
]; ];
} }
@CopyWith() @CopyWith(constructor: '_')
@JsonSerializable() @JsonSerializable()
class BookmarkFolder extends BookmarkItem with FastEquatable { class BookmarkFolder extends BookmarkItem with FastEquatable {
@override @override
@@ -141,6 +141,15 @@ class BookmarkFolder extends BookmarkItem with FastEquatable {
required this.children, required this.children,
}) : title = bookmarkRootDisplayNames[guid] ?? title; }) : title = bookmarkRootDisplayNames[guid] ?? title;
BookmarkFolder._({
required this.guid,
required this.parentGuid,
required this.title,
required this.position,
required this.dateAdded,
required this.children,
});
factory BookmarkFolder.fromJson(Map<String, dynamic> json) => factory BookmarkFolder.fromJson(Map<String, dynamic> json) =>
_$BookmarkFolderFromJson(json); _$BookmarkFolderFromJson(json);
@@ -199,7 +199,7 @@ class _$BookmarkFolderCWProxyImpl implements _$BookmarkFolderCWProxy {
Object? dateAdded = const $CopyWithPlaceholder(), Object? dateAdded = const $CopyWithPlaceholder(),
Object? children = const $CopyWithPlaceholder(), Object? children = const $CopyWithPlaceholder(),
}) { }) {
return BookmarkFolder( return BookmarkFolder._(
guid: guid == const $CopyWithPlaceholder() || guid == null guid: guid == const $CopyWithPlaceholder() || guid == null
? _value.guid ? _value.guid
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
+8 -8
View File
@@ -9,10 +9,10 @@ environment:
dependencies: dependencies:
animated_tree_view: ^2.3.0 animated_tree_view: ^2.3.0
background_fetch: ^1.6.1 background_fetch: ^1.6.2
collection: ^1.19.1 collection: ^1.19.1
convert: ^3.1.2 convert: ^3.1.2
copy_with_extension: ^14.0.0 copy_with_extension: ^15.0.0
country_codes: ^3.3.0 country_codes: ^3.3.0
country_flags: ^4.1.2 country_flags: ^4.1.2
crypto: ^3.0.7 crypto: ^3.0.7
@@ -39,8 +39,8 @@ dependencies:
flutter_svg: ^2.2.4 flutter_svg: ^2.2.4
flutter_tor: flutter_tor:
path: ../../packages/flutter_tor path: ../../packages/flutter_tor
go_router: ^17.2.1 go_router: ^17.2.2
google_fonts: ^8.0.2 google_fonts: ^8.1.0
graphview: ^1.5.1 graphview: ^1.5.1
home_widget: ^0.9.1 home_widget: ^0.9.1
hooks_riverpod: ^3.3.1 hooks_riverpod: ^3.3.1
@@ -87,7 +87,7 @@ dependencies:
path: ../../packages/speech_to_text_dialog path: ../../packages/speech_to_text_dialog
sqlite3: ^2.9.4 sqlite3: ^2.9.4
sqlite3_flutter_libs: "0.5.41" sqlite3_flutter_libs: "0.5.41"
synchronized: ^3.4.0 synchronized: ^3.4.0+1
text_scroll: ^0.2.1 text_scroll: ^0.2.1
timeago: ^3.7.1 timeago: ^3.7.1
uri_to_file: uri_to_file:
@@ -97,12 +97,12 @@ dependencies:
uuid: ^4.5.3 uuid: ^4.5.3
dev_dependencies: dev_dependencies:
build_runner: ^2.13.1 build_runner: ^2.15.0
copy_with_extension_gen: ^14.0.0 copy_with_extension_gen: ^15.0.0
flutter_launcher_icons: ^0.14.4 flutter_launcher_icons: ^0.14.4
flutter_test: flutter_test:
sdk: flutter sdk: flutter
go_router_builder: ^4.2.1 go_router_builder: ^4.3.0
json_serializable: ^6.13.0 json_serializable: ^6.13.0
lint: ^2.8.0 lint: ^2.8.0
mockito: ^5.6.4 mockito: ^5.6.4
@@ -2,7 +2,7 @@ group = "eu.weblibre.flutter_mozilla_components"
version = "1.0-SNAPSHOT" version = "1.0-SNAPSHOT"
buildscript { buildscript {
ext.kotlin_version = "2.3.10" ext.kotlin_version = "2.3.21"
ext.mozillaComponentsVersion = '150.0.1' ext.mozillaComponentsVersion = '150.0.1'
repositories { repositories {
@@ -151,9 +151,9 @@ dependencies {
implementation 'com.mikepenz:iconics-core:5.5.0' implementation 'com.mikepenz:iconics-core:5.5.0'
implementation 'com.mikepenz:community-material-typeface:7.0.96.2-kotlin@aar' implementation 'com.mikepenz:community-material-typeface:7.0.96.2-kotlin@aar'
//https://stackoverflow.com/questions/73782320/onbackinvokedcallback-is-not-enabled-for-the-application-in-set-androidenableo //https://stackoverflow.com/questions/73782320/onbackinvokedcallback-is-not-enabled-for-the-application-in-set-androidenableo
implementation 'androidx.activity:activity-ktx:1.12.4' implementation 'androidx.activity:activity-ktx:1.13.0'
implementation 'androidx.paging:paging-runtime-ktx:3.4.1' implementation 'androidx.paging:paging-runtime-ktx:3.4.2'
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.mockito:mockito-core:5.22.0") testImplementation("org.mockito:mockito-core:5.23.0")
} }
@@ -19,7 +19,7 @@ pluginManagement {
plugins { plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0" id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.13.2" apply false id "com.android.application" version "8.13.2" apply false
id "org.jetbrains.kotlin.android" version "2.3.10" apply false id "org.jetbrains.kotlin.android" version "2.3.21" apply false
} }
include ":app" include ":app"
@@ -12,19 +12,19 @@
"@types/chai": "^5.2.3", "@types/chai": "^5.2.3",
"@types/firefox-webext-browser": "^143.0.0", "@types/firefox-webext-browser": "^143.0.0",
"@types/mocha": "^10.0.10", "@types/mocha": "^10.0.10",
"addons-linter": "^10.0.0", "addons-linter": "^10.4.0",
"chai": "^6.2.2", "chai": "^6.2.2",
"copy-webpack-plugin": "^14.0.0", "copy-webpack-plugin": "^14.0.0",
"esm": "^3.2.25", "esm": "^3.2.25",
"sinon-chrome": "^3.0.1", "sinon-chrome": "^3.0.1",
"standardx": "^7.0.0", "standardx": "^7.0.0",
"ts-loader": "^9.5.4", "ts-loader": "^9.5.7",
"ts-mocha": "^11.1.0", "ts-mocha": "^11.1.0",
"ts-standard": "^12.0.2", "ts-standard": "^12.0.2",
"tsconfig-paths-webpack-plugin": "^4.2.0", "tsconfig-paths-webpack-plugin": "^4.2.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"web-ext": "^9.4.0", "web-ext": "^9.4.0",
"webpack": "^5.105.4", "webpack": "^5.106.2",
"webpack-cli": "^6.0.1" "webpack-cli": "^6.0.1"
} }
}, },
@@ -564,9 +564,9 @@
} }
}, },
"node_modules/@mdn/browser-compat-data": { "node_modules/@mdn/browser-compat-data": {
"version": "7.3.9", "version": "7.3.13",
"resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-7.3.9.tgz", "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-7.3.13.tgz",
"integrity": "sha512-ARxwDFfq4uhRSd9Wr1FMaxeKKIFDPyMnSoLe/8WX+nNXbKDILf1H8KDJW9nzu2QTR0hQ37jDCzAgyaNYdLzACQ==", "integrity": "sha512-EniCSTNBv/bpBja1/npmqAGCBeWZmh2EoopsgW4X/yFBB8puVvt9DhV5c+IRjvTVs9j5obvN424FJVPn7guuMA==",
"dev": true, "dev": true,
"license": "CC0-1.0" "license": "CC0-1.0"
}, },
@@ -1277,19 +1277,18 @@
} }
}, },
"node_modules/addons-linter": { "node_modules/addons-linter": {
"version": "10.3.0", "version": "10.4.0",
"resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-10.3.0.tgz", "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-10.4.0.tgz",
"integrity": "sha512-pU5SQhXFh2XxCJVn4F3+JmNnx4kkU23wZhQdvJqdkNZngmfISiRN247KbzAfqZOtXy+Y89U+boGXQoIl6gr2xg==", "integrity": "sha512-ElvAiixMp0jXnxIf5S0SAtk9BAVHRo5gmq7BiVSOojPR0FdKrOfyUwfEIg4/myiafLXSExD3VJ6Sfdx/z2nckg==",
"dev": true, "dev": true,
"license": "MPL-2.0", "license": "MPL-2.0",
"dependencies": { "dependencies": {
"@fluent/syntax": "0.19.0", "@fluent/syntax": "0.19.0",
"@fregante/relaxed-json": "2.0.0", "@fregante/relaxed-json": "2.0.0",
"@mdn/browser-compat-data": "7.3.9", "@mdn/browser-compat-data": "7.3.13",
"addons-moz-compare": "1.3.0", "addons-moz-compare": "1.3.0",
"addons-scanner-utils": "15.0.0", "addons-scanner-utils": "15.0.0",
"ajv": "8.18.0", "ajv": "8.20.0",
"chalk": "4.1.2",
"cheerio": "1.2.0", "cheerio": "1.2.0",
"columnify": "1.6.0", "columnify": "1.6.0",
"common-tags": "1.8.2", "common-tags": "1.8.2",
@@ -1305,9 +1304,9 @@
"pino": "10.3.1", "pino": "10.3.1",
"semver": "7.7.4", "semver": "7.7.4",
"source-map-support": "0.5.21", "source-map-support": "0.5.21",
"upath": "2.0.1", "upath": "3.0.7",
"yargs": "17.7.2", "yargs": "17.7.2",
"yauzl": "3.2.1" "yauzl": "3.3.0"
}, },
"bin": { "bin": {
"addons-linter": "bin/addons-linter" "addons-linter": "bin/addons-linter"
@@ -1401,6 +1400,30 @@
"url": "https://eslint.org/donate" "url": "https://eslint.org/donate"
} }
}, },
"node_modules/addons-linter/node_modules/ajv": {
"version": "8.20.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
"integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/addons-linter/node_modules/ajv/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"license": "MIT"
},
"node_modules/addons-linter/node_modules/eslint": { "node_modules/addons-linter/node_modules/eslint": {
"version": "9.39.4", "version": "9.39.4",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz",
@@ -1583,6 +1606,44 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/addons-linter/node_modules/upath": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/upath/-/upath-3.0.7.tgz",
"integrity": "sha512-VjBBquch25nUGMuVBpOb2Cj3gc8Kb7lJBqbsXR/0anZ/5uJsL14Kpth9JKfnBsckxCfgIp6hPvcvvmZ97R9X7g==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/anodynos"
},
{
"type": "polar",
"url": "https://polar.sh/anodynos"
},
{
"type": "tidelift",
"url": "https://tidelift.com/subscription/pkg/npm-upath"
}
],
"license": "MIT",
"engines": {
"node": ">=20"
}
},
"node_modules/addons-linter/node_modules/yauzl": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.0.tgz",
"integrity": "sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-crc32": "~0.2.3",
"pend": "~1.2.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/addons-moz-compare": { "node_modules/addons-moz-compare": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz", "resolved": "https://registry.npmjs.org/addons-moz-compare/-/addons-moz-compare-1.3.0.tgz",
@@ -34,19 +34,19 @@
"@types/chai": "^5.2.3", "@types/chai": "^5.2.3",
"@types/firefox-webext-browser": "^143.0.0", "@types/firefox-webext-browser": "^143.0.0",
"@types/mocha": "^10.0.10", "@types/mocha": "^10.0.10",
"addons-linter": "^10.0.0", "addons-linter": "^10.4.0",
"chai": "^6.2.2", "chai": "^6.2.2",
"copy-webpack-plugin": "^14.0.0", "copy-webpack-plugin": "^14.0.0",
"esm": "^3.2.25", "esm": "^3.2.25",
"sinon-chrome": "^3.0.1", "sinon-chrome": "^3.0.1",
"standardx": "^7.0.0", "standardx": "^7.0.0",
"ts-loader": "^9.5.4", "ts-loader": "^9.5.7",
"ts-mocha": "^11.1.0", "ts-mocha": "^11.1.0",
"ts-standard": "^12.0.2", "ts-standard": "^12.0.2",
"tsconfig-paths-webpack-plugin": "^4.2.0", "tsconfig-paths-webpack-plugin": "^4.2.0",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"web-ext": "^9.4.0", "web-ext": "^9.4.0",
"webpack": "^5.105.4", "webpack": "^5.106.2",
"webpack-cli": "^6.0.1" "webpack-cli": "^6.0.1"
}, },
"standardx": { "standardx": {
@@ -11,16 +11,16 @@
"dependencies": { "dependencies": {
"@mozilla/readability": "^0.6.0", "@mozilla/readability": "^0.6.0",
"remove-markdown": "^0.6.3", "remove-markdown": "^0.6.3",
"turndown": "^7.2.2" "turndown": "^7.2.4"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.29.0", "@babel/core": "^7.29.0",
"@babel/preset-env": "^7.29.0", "@babel/preset-env": "^7.29.3",
"babel-loader": "^10.1.1", "babel-loader": "^10.1.1",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"terser-webpack-plugin": "^5.4.0", "terser-webpack-plugin": "^5.5.0",
"webpack": "^5.105.4", "webpack": "^5.106.2",
"webpack-bundle-analyzer": "^5.2.0", "webpack-bundle-analyzer": "^5.3.0",
"webpack-cli": "^6.0.1" "webpack-cli": "^6.0.1"
} }
}, },
@@ -40,9 +40,9 @@
} }
}, },
"node_modules/@babel/compat-data": { "node_modules/@babel/compat-data": {
"version": "7.29.0", "version": "7.29.3",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
"integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -437,6 +437,23 @@
"@babel/core": "^7.0.0" "@babel/core": "^7.0.0"
} }
}, },
"node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": {
"version": "7.29.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.3.tgz",
"integrity": "sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.28.6",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.27.1", "version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz",
@@ -1391,19 +1408,20 @@
} }
}, },
"node_modules/@babel/preset-env": { "node_modules/@babel/preset-env": {
"version": "7.29.2", "version": "7.29.3",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.3.tgz",
"integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", "integrity": "sha512-ySZypNLAIH1ClygLDQzVMoGQRViATnkHkYYV6TcNDz+8+jwZCdsguGvsb3EY5d9wyWyhmF1iSuFM0Yh5XPnqSA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.29.0", "@babel/compat-data": "^7.29.3",
"@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-compilation-targets": "^7.28.6",
"@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6",
"@babel/helper-validator-option": "^7.27.1", "@babel/helper-validator-option": "^7.27.1",
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5",
"@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.3",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
@@ -3495,9 +3513,9 @@
} }
}, },
"node_modules/terser-webpack-plugin": { "node_modules/terser-webpack-plugin": {
"version": "5.4.0", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz",
"integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -12,16 +12,16 @@
"dependencies": { "dependencies": {
"@mozilla/readability": "^0.6.0", "@mozilla/readability": "^0.6.0",
"remove-markdown": "^0.6.3", "remove-markdown": "^0.6.3",
"turndown": "^7.2.2" "turndown": "^7.2.4"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.29.0", "@babel/core": "^7.29.0",
"@babel/preset-env": "^7.29.0", "@babel/preset-env": "^7.29.3",
"babel-loader": "^10.1.1", "babel-loader": "^10.1.1",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "^4.0.0",
"terser-webpack-plugin": "^5.4.0", "terser-webpack-plugin": "^5.5.0",
"webpack": "^5.105.4", "webpack": "^5.106.2",
"webpack-bundle-analyzer": "^5.2.0", "webpack-bundle-analyzer": "^5.3.0",
"webpack-cli": "^6.0.1" "webpack-cli": "^6.0.1"
} }
} }
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -2,7 +2,7 @@ group = "eu.weblibre.flutter_tor"
version = "1.0-SNAPSHOT" version = "1.0-SNAPSHOT"
buildscript { buildscript {
ext.kotlin_version = "2.3.10" ext.kotlin_version = "2.3.21"
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
@@ -50,11 +50,11 @@ android {
dependencies { dependencies {
// Tor core libraries // Tor core libraries
implementation("info.guardianproject:tor-android:0.4.9.5") implementation("info.guardianproject:tor-android:0.4.9.6")
implementation("info.guardianproject:jtorctl:0.4.5.7") implementation("info.guardianproject:jtorctl:0.4.5.7")
// Pluggable transports // Pluggable transports
implementation("com.netzarchitekten:IPtProxy:5.2.0") implementation("com.netzarchitekten:IPtProxy:5.4.1")
// Coroutines for async operations // Coroutines for async operations
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
@@ -62,7 +62,7 @@ android {
// Testing // Testing
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.mockito:mockito-core:5.22.0") testImplementation("org.mockito:mockito-core:5.23.0")
} }
testOptions { testOptions {
@@ -20,7 +20,7 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.13.2" apply false id("com.android.application") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.3.10" apply false id("org.jetbrains.kotlin.android") version "2.3.21" apply false
} }
include(":app") include(":app")
+123 -78
View File
@@ -10,9 +10,9 @@ import 'package:flutter/services.dart';
import 'package:meta/meta.dart' show immutable, protected, visibleForTesting; import 'package:meta/meta.dart' show immutable, protected, visibleForTesting;
Object? _extractReplyValueOrThrow( Object? _extractReplyValueOrThrow(
List<Object?>? replyList, List<Object?>? replyList,
String channelName, { String channelName, {
required bool isNullValid, required bool isNullValid,
}) { }) {
if (replyList == null) { if (replyList == null) {
throw PlatformException( throw PlatformException(
@@ -34,8 +34,11 @@ Object? _extractReplyValueOrThrow(
return replyList.firstOrNull; return replyList.firstOrNull;
} }
List<Object?> wrapResponse({
List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty = false}) { Object? result,
PlatformException? error,
bool empty = false,
}) {
if (empty) { if (empty) {
return <Object?>[]; return <Object?>[];
} }
@@ -44,6 +47,7 @@ List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty
} }
return <Object?>[error.code, error.message, error.details]; return <Object?>[error.code, error.message, error.details];
} }
bool _deepEquals(Object? a, Object? b) { bool _deepEquals(Object? a, Object? b) {
if (identical(a, b)) { if (identical(a, b)) {
return true; return true;
@@ -56,8 +60,9 @@ bool _deepEquals(Object? a, Object? b) {
} }
if (a is List && b is List) { if (a is List && b is List) {
return a.length == b.length && return a.length == b.length &&
a.indexed a.indexed.every(
.every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); ((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]),
);
} }
if (a is Map && b is Map) { if (a is Map && b is Map) {
if (a.length != b.length) { if (a.length != b.length) {
@@ -106,23 +111,29 @@ int _deepHash(Object? value) {
return value.hashCode; return value.hashCode;
} }
/// Transport types for Tor connections /// Transport types for Tor connections
enum TransportType { enum TransportType {
/// Direct Tor connection (no bridges) /// Direct Tor connection (no bridges)
none, none,
/// obfs4 pluggable transport /// obfs4 pluggable transport
obfs4, obfs4,
/// Snowflake pluggable transport (default broker) /// Snowflake pluggable transport (default broker)
snowflake, snowflake,
/// Snowflake via AMP cache /// Snowflake via AMP cache
snowflakeAmp, snowflakeAmp,
/// Meek pluggable transport /// Meek pluggable transport
meek, meek,
/// Meek via Azure CDN /// Meek via Azure CDN
meekAzure, meekAzure,
/// WebTunnel pluggable transport /// WebTunnel pluggable transport
webtunnel, webtunnel,
/// Custom bridge lines (passthrough) /// Custom bridge lines (passthrough)
custom, custom,
} }
@@ -163,7 +174,8 @@ class TorConfiguration {
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static TorConfiguration decode(Object result) { static TorConfiguration decode(Object result) {
result as List<Object?>; result as List<Object?>;
@@ -185,7 +197,11 @@ class TorConfiguration {
if (identical(this, other)) { if (identical(this, other)) {
return true; return true;
} }
return _deepEquals(transport, other.transport) && _deepEquals(bridgeLines, other.bridgeLines) && _deepEquals(entryNodeCountries, other.entryNodeCountries) && _deepEquals(exitNodeCountries, other.exitNodeCountries) && _deepEquals(strictNodes, other.strictNodes); return _deepEquals(transport, other.transport) &&
_deepEquals(bridgeLines, other.bridgeLines) &&
_deepEquals(entryNodeCountries, other.entryNodeCountries) &&
_deepEquals(exitNodeCountries, other.exitNodeCountries) &&
_deepEquals(strictNodes, other.strictNodes);
} }
@override @override
@@ -229,7 +245,8 @@ class TorStatus {
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static TorStatus decode(Object result) { static TorStatus decode(Object result) {
result as List<Object?>; result as List<Object?>;
@@ -251,7 +268,11 @@ class TorStatus {
if (identical(this, other)) { if (identical(this, other)) {
return true; return true;
} }
return _deepEquals(isRunning, other.isRunning) && _deepEquals(socksPort, other.socksPort) && _deepEquals(bootstrapProgress, other.bootstrapProgress) && _deepEquals(currentCircuit, other.currentCircuit) && _deepEquals(exitNodeCountry, other.exitNodeCountry); return _deepEquals(isRunning, other.isRunning) &&
_deepEquals(socksPort, other.socksPort) &&
_deepEquals(bootstrapProgress, other.bootstrapProgress) &&
_deepEquals(currentCircuit, other.currentCircuit) &&
_deepEquals(exitNodeCountry, other.exitNodeCountry);
} }
@override @override
@@ -277,15 +298,12 @@ class TorLogMessage {
int timestamp; int timestamp;
List<Object?> _toList() { List<Object?> _toList() {
return <Object?>[ return <Object?>[severity, message, timestamp];
severity,
message,
timestamp,
];
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static TorLogMessage decode(Object result) { static TorLogMessage decode(Object result) {
result as List<Object?>; result as List<Object?>;
@@ -305,7 +323,9 @@ class TorLogMessage {
if (identical(this, other)) { if (identical(this, other)) {
return true; return true;
} }
return _deepEquals(severity, other.severity) && _deepEquals(message, other.message) && _deepEquals(timestamp, other.timestamp); return _deepEquals(severity, other.severity) &&
_deepEquals(message, other.message) &&
_deepEquals(timestamp, other.timestamp);
} }
@override @override
@@ -313,7 +333,6 @@ class TorLogMessage {
int get hashCode => _deepHash(<Object?>[runtimeType, ..._toList()]); int get hashCode => _deepHash(<Object?>[runtimeType, ..._toList()]);
} }
class _PigeonCodec extends StandardMessageCodec { class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec(); const _PigeonCodec();
@override @override
@@ -321,16 +340,16 @@ class _PigeonCodec extends StandardMessageCodec {
if (value is int) { if (value is int) {
buffer.putUint8(4); buffer.putUint8(4);
buffer.putInt64(value); buffer.putInt64(value);
} else if (value is TransportType) { } else if (value is TransportType) {
buffer.putUint8(129); buffer.putUint8(129);
writeValue(buffer, value.index); writeValue(buffer, value.index);
} else if (value is TorConfiguration) { } else if (value is TorConfiguration) {
buffer.putUint8(130); buffer.putUint8(130);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else if (value is TorStatus) { } else if (value is TorStatus) {
buffer.putUint8(131); buffer.putUint8(131);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else if (value is TorLogMessage) { } else if (value is TorLogMessage) {
buffer.putUint8(132); buffer.putUint8(132);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else { } else {
@@ -362,8 +381,10 @@ class TorApi {
/// available for dependency injection. If it is left null, the default /// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform. /// BinaryMessenger will be used which routes to the host platform.
TorApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) TorApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''})
: pigeonVar_binaryMessenger = binaryMessenger, : pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
final BinaryMessenger? pigeonVar_binaryMessenger; final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec(); static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
@@ -373,27 +394,30 @@ class TorApi {
/// Start Tor with the given configuration /// Start Tor with the given configuration
/// Returns a Future to avoid blocking the main thread /// Returns a Future to avoid blocking the main thread
Future<int> startTor(TorConfiguration config) async { Future<int> startTor(TorConfiguration config) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_tor.TorApi.startTor$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.flutter_tor.TorApi.startTor$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[config]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[config],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( final Object? pigeonVar_replyValue = _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: false, isNullValid: false,
) );
;
return pigeonVar_replyValue! as int; return pigeonVar_replyValue! as int;
} }
/// Stop Tor /// Stop Tor
Future<void> stopTor() async { Future<void> stopTor() async {
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_tor.TorApi.stopTor$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.flutter_tor.TorApi.stopTor$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
@@ -403,16 +427,16 @@ class TorApi {
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
_extractReplyValueOrThrow( _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: true, isNullValid: true,
) );
;
} }
/// Get current status /// Get current status
Future<TorStatus> getStatus() async { Future<TorStatus> getStatus() async {
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_tor.TorApi.getStatus$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.flutter_tor.TorApi.getStatus$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
@@ -422,17 +446,17 @@ class TorApi {
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( final Object? pigeonVar_replyValue = _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: false, isNullValid: false,
) );
;
return pigeonVar_replyValue! as TorStatus; return pigeonVar_replyValue! as TorStatus;
} }
/// Request a new Tor identity (new circuit) /// Request a new Tor identity (new circuit)
Future<void> requestNewIdentity() async { Future<void> requestNewIdentity() async {
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_tor.TorApi.requestNewIdentity$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.flutter_tor.TorApi.requestNewIdentity$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
@@ -442,11 +466,10 @@ class TorApi {
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
_extractReplyValueOrThrow( _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: true, isNullValid: true,
) );
;
} }
} }
@@ -460,12 +483,20 @@ abstract class TorLogApi {
/// Called when status changes /// Called when status changes
void onStatusChanged(TorStatus status); void onStatusChanged(TorStatus status);
static void setUp(TorLogApi? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { static void setUp(
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; TorLogApi? api, {
BinaryMessenger? binaryMessenger,
String messageChannelSuffix = '',
}) {
messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
{ {
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_tor.TorLogApi.onLogMessage$messageChannelSuffix', pigeonChannelCodec, 'dev.flutter.pigeon.flutter_tor.TorLogApi.onLogMessage$messageChannelSuffix',
binaryMessenger: binaryMessenger); pigeonChannelCodec,
binaryMessenger: binaryMessenger,
);
if (api == null) { if (api == null) {
pigeonVar_channel.setMessageHandler(null); pigeonVar_channel.setMessageHandler(null);
} else { } else {
@@ -477,16 +508,20 @@ abstract class TorLogApi {
return wrapResponse(empty: true); return wrapResponse(empty: true);
} on PlatformException catch (e) { } on PlatformException catch (e) {
return wrapResponse(error: e); return wrapResponse(error: e);
} catch (e) { } catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); return wrapResponse(
error: PlatformException(code: 'error', message: e.toString()),
);
} }
}); });
} }
} }
{ {
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.flutter_tor.TorLogApi.onStatusChanged$messageChannelSuffix', pigeonChannelCodec, 'dev.flutter.pigeon.flutter_tor.TorLogApi.onStatusChanged$messageChannelSuffix',
binaryMessenger: binaryMessenger); pigeonChannelCodec,
binaryMessenger: binaryMessenger,
);
if (api == null) { if (api == null) {
pigeonVar_channel.setMessageHandler(null); pigeonVar_channel.setMessageHandler(null);
} else { } else {
@@ -498,8 +533,10 @@ abstract class TorLogApi {
return wrapResponse(empty: true); return wrapResponse(empty: true);
} on PlatformException catch (e) { } on PlatformException catch (e) {
return wrapResponse(error: e); return wrapResponse(error: e);
} catch (e) { } catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); return wrapResponse(
error: PlatformException(code: 'error', message: e.toString()),
);
} }
}); });
} }
@@ -511,9 +548,13 @@ class IPtProxyController {
/// Constructor for [IPtProxyController]. The [binaryMessenger] named argument is /// Constructor for [IPtProxyController]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default /// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform. /// BinaryMessenger will be used which routes to the host platform.
IPtProxyController({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) IPtProxyController({
: pigeonVar_binaryMessenger = binaryMessenger, BinaryMessenger? binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; String messageChannelSuffix = '',
}) : pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
final BinaryMessenger? pigeonVar_binaryMessenger; final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec(); static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
@@ -521,39 +562,43 @@ class IPtProxyController {
final String pigeonVar_messageChannelSuffix; final String pigeonVar_messageChannelSuffix;
Future<int> start(TransportType proxyType, String proxy) async { Future<int> start(TransportType proxyType, String proxy) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_tor.IPtProxyController.start$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.flutter_tor.IPtProxyController.start$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[proxyType, proxy]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[proxyType, proxy],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( final Object? pigeonVar_replyValue = _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: false, isNullValid: false,
) );
;
return pigeonVar_replyValue! as int; return pigeonVar_replyValue! as int;
} }
Future<void> stop(TransportType proxyType) async { Future<void> stop(TransportType proxyType) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.flutter_tor.IPtProxyController.stop$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.flutter_tor.IPtProxyController.stop$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[proxyType]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[proxyType],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
_extractReplyValueOrThrow( _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: true, isNullValid: true,
) );
;
} }
} }
@@ -2,7 +2,7 @@ group = "eu.weblibre.locale_resolver"
version = "1.0-SNAPSHOT" version = "1.0-SNAPSHOT"
buildscript { buildscript {
ext.kotlin_version = "2.3.10" ext.kotlin_version = "2.3.21"
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
@@ -49,7 +49,7 @@ android {
dependencies { dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.mockito:mockito-core:5.22.0") testImplementation("org.mockito:mockito-core:5.23.0")
} }
testOptions { testOptions {
@@ -20,7 +20,7 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.13.2" apply false id("com.android.application") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.3.10" apply false id("org.jetbrains.kotlin.android") version "2.3.21" apply false
} }
include(":app") include(":app")
@@ -10,9 +10,9 @@ import 'package:flutter/services.dart';
import 'package:meta/meta.dart' show immutable, protected, visibleForTesting; import 'package:meta/meta.dart' show immutable, protected, visibleForTesting;
Object? _extractReplyValueOrThrow( Object? _extractReplyValueOrThrow(
List<Object?>? replyList, List<Object?>? replyList,
String channelName, { String channelName, {
required bool isNullValid, required bool isNullValid,
}) { }) {
if (replyList == null) { if (replyList == null) {
throw PlatformException( throw PlatformException(
@@ -46,8 +46,9 @@ bool _deepEquals(Object? a, Object? b) {
} }
if (a is List && b is List) { if (a is List && b is List) {
return a.length == b.length && return a.length == b.length &&
a.indexed a.indexed.every(
.every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); ((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]),
);
} }
if (a is Map && b is Map) { if (a is Map && b is Map) {
if (a.length != b.length) { if (a.length != b.length) {
@@ -96,26 +97,20 @@ int _deepHash(Object? value) {
return value.hashCode; return value.hashCode;
} }
class LocalizedResult { class LocalizedResult {
LocalizedResult({ LocalizedResult({required this.languageName, this.countryName});
required this.languageName,
this.countryName,
});
String languageName; String languageName;
String? countryName; String? countryName;
List<Object?> _toList() { List<Object?> _toList() {
return <Object?>[ return <Object?>[languageName, countryName];
languageName,
countryName,
];
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static LocalizedResult decode(Object result) { static LocalizedResult decode(Object result) {
result as List<Object?>; result as List<Object?>;
@@ -134,7 +129,8 @@ class LocalizedResult {
if (identical(this, other)) { if (identical(this, other)) {
return true; return true;
} }
return _deepEquals(languageName, other.languageName) && _deepEquals(countryName, other.countryName); return _deepEquals(languageName, other.languageName) &&
_deepEquals(countryName, other.countryName);
} }
@override @override
@@ -142,7 +138,6 @@ class LocalizedResult {
int get hashCode => _deepHash(<Object?>[runtimeType, ..._toList()]); int get hashCode => _deepHash(<Object?>[runtimeType, ..._toList()]);
} }
class _PigeonCodec extends StandardMessageCodec { class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec(); const _PigeonCodec();
@override @override
@@ -150,7 +145,7 @@ class _PigeonCodec extends StandardMessageCodec {
if (value is int) { if (value is int) {
buffer.putUint8(4); buffer.putUint8(4);
buffer.putInt64(value); buffer.putInt64(value);
} else if (value is LocalizedResult) { } else if (value is LocalizedResult) {
buffer.putUint8(129); buffer.putUint8(129);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else { } else {
@@ -173,31 +168,40 @@ class LocaleResolver {
/// Constructor for [LocaleResolver]. The [binaryMessenger] named argument is /// Constructor for [LocaleResolver]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default /// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform. /// BinaryMessenger will be used which routes to the host platform.
LocaleResolver({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) LocaleResolver({
: pigeonVar_binaryMessenger = binaryMessenger, BinaryMessenger? binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; String messageChannelSuffix = '',
}) : pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
final BinaryMessenger? pigeonVar_binaryMessenger; final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec(); static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
final String pigeonVar_messageChannelSuffix; final String pigeonVar_messageChannelSuffix;
Future<LocalizedResult> resolve(String languageTag, String targetLangouageTag) async { Future<LocalizedResult> resolve(
final pigeonVar_channelName = 'dev.flutter.pigeon.locale_resolver.LocaleResolver.resolve$pigeonVar_messageChannelSuffix'; String languageTag,
String targetLangouageTag,
) async {
final pigeonVar_channelName =
'dev.flutter.pigeon.locale_resolver.LocaleResolver.resolve$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[languageTag, targetLangouageTag]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[languageTag, targetLangouageTag],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( final Object? pigeonVar_replyValue = _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: false, isNullValid: false,
) );
;
return pigeonVar_replyValue! as LocalizedResult; return pigeonVar_replyValue! as LocalizedResult;
} }
} }
@@ -2,7 +2,7 @@ group = "eu.weblibre.simple_intent_receiver"
version = "1.0-SNAPSHOT" version = "1.0-SNAPSHOT"
buildscript { buildscript {
ext.kotlin_version = "2.3.10" ext.kotlin_version = "2.3.21"
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
@@ -49,7 +49,7 @@ android {
dependencies { dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.mockito:mockito-core:5.22.0") testImplementation("org.mockito:mockito-core:5.23.0")
} }
testOptions { testOptions {
@@ -19,7 +19,7 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.13.2" apply false id("com.android.application") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.3.10" apply false id("org.jetbrains.kotlin.android") version "2.3.21" apply false
} }
include(":app") include(":app")
@@ -10,9 +10,9 @@ import 'package:flutter/services.dart';
import 'package:meta/meta.dart' show immutable, protected, visibleForTesting; import 'package:meta/meta.dart' show immutable, protected, visibleForTesting;
Object? _extractReplyValueOrThrow( Object? _extractReplyValueOrThrow(
List<Object?>? replyList, List<Object?>? replyList,
String channelName, { String channelName, {
required bool isNullValid, required bool isNullValid,
}) { }) {
if (replyList == null) { if (replyList == null) {
throw PlatformException( throw PlatformException(
@@ -34,8 +34,11 @@ Object? _extractReplyValueOrThrow(
return replyList.firstOrNull; return replyList.firstOrNull;
} }
List<Object?> wrapResponse({
List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty = false}) { Object? result,
PlatformException? error,
bool empty = false,
}) {
if (empty) { if (empty) {
return <Object?>[]; return <Object?>[];
} }
@@ -44,6 +47,7 @@ List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty
} }
return <Object?>[error.code, error.message, error.details]; return <Object?>[error.code, error.message, error.details];
} }
bool _deepEquals(Object? a, Object? b) { bool _deepEquals(Object? a, Object? b) {
if (identical(a, b)) { if (identical(a, b)) {
return true; return true;
@@ -56,8 +60,9 @@ bool _deepEquals(Object? a, Object? b) {
} }
if (a is List && b is List) { if (a is List && b is List) {
return a.length == b.length && return a.length == b.length &&
a.indexed a.indexed.every(
.every(((int, dynamic) item) => _deepEquals(item.$2, b[item.$1])); ((int, dynamic) item) => _deepEquals(item.$2, b[item.$1]),
);
} }
if (a is Map && b is Map) { if (a is Map && b is Map) {
if (a.length != b.length) { if (a.length != b.length) {
@@ -106,7 +111,6 @@ int _deepHash(Object? value) {
return value.hashCode; return value.hashCode;
} }
class Intent { class Intent {
Intent({ Intent({
this.fromPackageName, this.fromPackageName,
@@ -141,7 +145,8 @@ class Intent {
} }
Object encode() { Object encode() {
return _toList(); } return _toList();
}
static Intent decode(Object result) { static Intent decode(Object result) {
result as List<Object?>; result as List<Object?>;
@@ -164,7 +169,12 @@ class Intent {
if (identical(this, other)) { if (identical(this, other)) {
return true; return true;
} }
return _deepEquals(fromPackageName, other.fromPackageName) && _deepEquals(action, other.action) && _deepEquals(data, other.data) && _deepEquals(categories, other.categories) && _deepEquals(mimeType, other.mimeType) && _deepEquals(extra, other.extra); return _deepEquals(fromPackageName, other.fromPackageName) &&
_deepEquals(action, other.action) &&
_deepEquals(data, other.data) &&
_deepEquals(categories, other.categories) &&
_deepEquals(mimeType, other.mimeType) &&
_deepEquals(extra, other.extra);
} }
@override @override
@@ -172,7 +182,6 @@ class Intent {
int get hashCode => _deepHash(<Object?>[runtimeType, ..._toList()]); int get hashCode => _deepHash(<Object?>[runtimeType, ..._toList()]);
} }
class _PigeonCodec extends StandardMessageCodec { class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec(); const _PigeonCodec();
@override @override
@@ -180,7 +189,7 @@ class _PigeonCodec extends StandardMessageCodec {
if (value is int) { if (value is int) {
buffer.putUint8(4); buffer.putUint8(4);
buffer.putInt64(value); buffer.putInt64(value);
} else if (value is Intent) { } else if (value is Intent) {
buffer.putUint8(129); buffer.putUint8(129);
writeValue(buffer, value.encode()); writeValue(buffer, value.encode());
} else { } else {
@@ -204,12 +213,20 @@ abstract class IntentEvents {
void onIntentReceived(int sequence, Intent intent); void onIntentReceived(int sequence, Intent intent);
static void setUp(IntentEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { static void setUp(
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; IntentEvents? api, {
BinaryMessenger? binaryMessenger,
String messageChannelSuffix = '',
}) {
messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
{ {
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.simple_intent_receiver.IntentEvents.onIntentReceived$messageChannelSuffix', pigeonChannelCodec, 'dev.flutter.pigeon.simple_intent_receiver.IntentEvents.onIntentReceived$messageChannelSuffix',
binaryMessenger: binaryMessenger); pigeonChannelCodec,
binaryMessenger: binaryMessenger,
);
if (api == null) { if (api == null) {
pigeonVar_channel.setMessageHandler(null); pigeonVar_channel.setMessageHandler(null);
} else { } else {
@@ -222,8 +239,10 @@ abstract class IntentEvents {
return wrapResponse(empty: true); return wrapResponse(empty: true);
} on PlatformException catch (e) { } on PlatformException catch (e) {
return wrapResponse(error: e); return wrapResponse(error: e);
} catch (e) { } catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); return wrapResponse(
error: PlatformException(code: 'error', message: e.toString()),
);
} }
}); });
} }
@@ -235,9 +254,13 @@ class IntentGatekeeperHostApi {
/// Constructor for [IntentGatekeeperHostApi]. The [binaryMessenger] named argument is /// Constructor for [IntentGatekeeperHostApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default /// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform. /// BinaryMessenger will be used which routes to the host platform.
IntentGatekeeperHostApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) IntentGatekeeperHostApi({
: pigeonVar_binaryMessenger = binaryMessenger, BinaryMessenger? binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; String messageChannelSuffix = '',
}) : pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
final BinaryMessenger? pigeonVar_binaryMessenger; final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec(); static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
@@ -247,42 +270,46 @@ class IntentGatekeeperHostApi {
/// Replicates the blocked-packages policy to the native side so the /// Replicates the blocked-packages policy to the native side so the
/// [IntentReceiverActivity] can reject intents without launching Flutter. /// [IntentReceiverActivity] can reject intents without launching Flutter.
Future<void> setConfig(bool enabled, List<String> blockedPackages) async { Future<void> setConfig(bool enabled, List<String> blockedPackages) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.setConfig$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.setConfig$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[enabled, blockedPackages]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[enabled, blockedPackages],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
_extractReplyValueOrThrow( _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: true, isNullValid: true,
) );
;
} }
/// Resolves a package name to its user-visible application label via /// Resolves a package name to its user-visible application label via
/// [PackageManager]. Returns `null` if the package is not installed or the /// [PackageManager]. Returns `null` if the package is not installed or the
/// label cannot be resolved. /// label cannot be resolved.
Future<String?> resolvePackageLabel(String packageName) async { Future<String?> resolvePackageLabel(String packageName) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.resolvePackageLabel$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.resolvePackageLabel$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[packageName]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[packageName],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( final Object? pigeonVar_replyValue = _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: true, isNullValid: true,
) );
;
return pigeonVar_replyValue as String?; return pigeonVar_replyValue as String?;
} }
} }
@@ -2,7 +2,7 @@ group = "eu.weblibre.speech_to_text_dialog"
version = "1.0-SNAPSHOT" version = "1.0-SNAPSHOT"
buildscript { buildscript {
ext.kotlin_version = "2.3.10" ext.kotlin_version = "2.3.21"
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
@@ -49,7 +49,7 @@ android {
dependencies { dependencies {
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.mockito:mockito-core:5.22.0") testImplementation("org.mockito:mockito-core:5.23.0")
} }
testOptions { testOptions {
@@ -20,7 +20,7 @@ pluginManagement {
plugins { plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0" id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.13.2" apply false id("com.android.application") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.3.10" apply false id("org.jetbrains.kotlin.android") version "2.3.21" apply false
} }
include(":app") include(":app")
@@ -10,9 +10,9 @@ import 'package:flutter/services.dart';
import 'package:meta/meta.dart' show immutable, protected, visibleForTesting; import 'package:meta/meta.dart' show immutable, protected, visibleForTesting;
Object? _extractReplyValueOrThrow( Object? _extractReplyValueOrThrow(
List<Object?>? replyList, List<Object?>? replyList,
String channelName, { String channelName, {
required bool isNullValid, required bool isNullValid,
}) { }) {
if (replyList == null) { if (replyList == null) {
throw PlatformException( throw PlatformException(
@@ -34,8 +34,11 @@ Object? _extractReplyValueOrThrow(
return replyList.firstOrNull; return replyList.firstOrNull;
} }
List<Object?> wrapResponse({
List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty = false}) { Object? result,
PlatformException? error,
bool empty = false,
}) {
if (empty) { if (empty) {
return <Object?>[]; return <Object?>[];
} }
@@ -45,7 +48,6 @@ List<Object?> wrapResponse({Object? result, PlatformException? error, bool empty
return <Object?>[error.code, error.message, error.details]; return <Object?>[error.code, error.message, error.details];
} }
class _PigeonCodec extends StandardMessageCodec { class _PigeonCodec extends StandardMessageCodec {
const _PigeonCodec(); const _PigeonCodec();
@override @override
@@ -72,9 +74,13 @@ class SpeechToTextApi {
/// Constructor for [SpeechToTextApi]. The [binaryMessenger] named argument is /// Constructor for [SpeechToTextApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default /// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform. /// BinaryMessenger will be used which routes to the host platform.
SpeechToTextApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) SpeechToTextApi({
: pigeonVar_binaryMessenger = binaryMessenger, BinaryMessenger? binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; String messageChannelSuffix = '',
}) : pigeonVar_binaryMessenger = binaryMessenger,
pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
final BinaryMessenger? pigeonVar_binaryMessenger; final BinaryMessenger? pigeonVar_binaryMessenger;
static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec(); static const MessageCodec<Object?> pigeonChannelCodec = _PigeonCodec();
@@ -89,21 +95,23 @@ class SpeechToTextApi {
/// The [locale] parameter specifies the language locale for recognition /// The [locale] parameter specifies the language locale for recognition
/// (e.g., 'en-US', 'de-DE'). If null, uses the device default. /// (e.g., 'en-US', 'de-DE'). If null, uses the device default.
Future<bool> showDialog({String? locale}) async { Future<bool> showDialog({String? locale}) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.speech_to_text_dialog.SpeechToTextApi.showDialog$pigeonVar_messageChannelSuffix'; final pigeonVar_channelName =
'dev.flutter.pigeon.speech_to_text_dialog.SpeechToTextApi.showDialog$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName, pigeonVar_channelName,
pigeonChannelCodec, pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger, binaryMessenger: pigeonVar_binaryMessenger,
); );
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[locale]); final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(
<Object?>[locale],
);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?; final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
final Object? pigeonVar_replyValue = _extractReplyValueOrThrow( final Object? pigeonVar_replyValue = _extractReplyValueOrThrow(
pigeonVar_replyList, pigeonVar_replyList,
pigeonVar_channelName, pigeonVar_channelName,
isNullValid: false, isNullValid: false,
) );
;
return pigeonVar_replyValue! as bool; return pigeonVar_replyValue! as bool;
} }
} }
@@ -118,12 +126,20 @@ abstract class SpeechToTextEvents {
/// recognition failed or was cancelled. /// recognition failed or was cancelled.
void onTextReceived(String text); void onTextReceived(String text);
static void setUp(SpeechToTextEvents? api, {BinaryMessenger? binaryMessenger, String messageChannelSuffix = '',}) { static void setUp(
messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; SpeechToTextEvents? api, {
BinaryMessenger? binaryMessenger,
String messageChannelSuffix = '',
}) {
messageChannelSuffix = messageChannelSuffix.isNotEmpty
? '.$messageChannelSuffix'
: '';
{ {
final pigeonVar_channel = BasicMessageChannel<Object?>( final pigeonVar_channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.speech_to_text_dialog.SpeechToTextEvents.onTextReceived$messageChannelSuffix', pigeonChannelCodec, 'dev.flutter.pigeon.speech_to_text_dialog.SpeechToTextEvents.onTextReceived$messageChannelSuffix',
binaryMessenger: binaryMessenger); pigeonChannelCodec,
binaryMessenger: binaryMessenger,
);
if (api == null) { if (api == null) {
pigeonVar_channel.setMessageHandler(null); pigeonVar_channel.setMessageHandler(null);
} else { } else {
@@ -135,8 +151,10 @@ abstract class SpeechToTextEvents {
return wrapResponse(empty: true); return wrapResponse(empty: true);
} on PlatformException catch (e) { } on PlatformException catch (e) {
return wrapResponse(error: e); return wrapResponse(error: e);
} catch (e) { } catch (e) {
return wrapResponse(error: PlatformException(code: 'error', message: e.toString())); return wrapResponse(
error: PlatformException(code: 'error', message: e.toString()),
);
} }
}); });
} }