From ba00b2b90d565c6f714a948d8ca0521287333655 Mon Sep 17 00:00:00 2001 From: Crazelu Date: Sun, 29 Mar 2026 22:05:17 +0100 Subject: [PATCH 1/6] chore: updates example library to remove deprecated code --- example/.gitignore | 2 + example/android/app/build.gradle | 26 +--- example/android/build.gradle | 6 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- example/android/settings.gradle | 30 +++- example/ios/Flutter/AppFrameworkInfo.plist | 2 +- example/ios/Podfile | 2 +- example/ios/Podfile.lock | 8 +- example/ios/Runner.xcodeproj/project.pbxproj | 9 +- .../xcshareddata/xcschemes/Runner.xcscheme | 5 +- example/ios/Runner/AppDelegate.swift | 2 +- example/lib/views/widgets/custom_text.dart | 2 +- .../lib/views/widgets/hashtag_list_view.dart | 2 +- example/lib/views/widgets/user_list_view.dart | 2 +- example/pubspec.lock | 140 ++++++++++-------- example/pubspec.yaml | 3 +- 16 files changed, 138 insertions(+), 105 deletions(-) diff --git a/example/.gitignore b/example/.gitignore index a8e938c..221b422 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -5,9 +5,11 @@ *.swp .DS_Store .atom/ +.build/ .buildlog/ .history .svn/ +.swiftpm/ migrate_working_dir/ # IntelliJ related diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 0833ecf..3ef3bf2 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +13,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +23,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "com.example.example" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -43,10 +42,7 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.example" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() @@ -55,8 +51,6 @@ android { buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } @@ -65,7 +59,3 @@ android { flutter { source '../..' } - -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} diff --git a/example/android/build.gradle b/example/android/build.gradle index 83ae220..b48d227 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '2.2.20' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:8.12.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -26,6 +26,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index cc5527d..9162f10 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle index 44e62bc..e12d764 100644 --- a/example/android/settings.gradle +++ b/example/android/settings.gradle @@ -1,11 +1,25 @@ -include ':app' +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() -def localPropertiesFile = new File(rootProject.projectDir, "local.properties") -def properties = new Properties() + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") -assert localPropertiesFile.exists() -localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} -def flutterSdkPath = properties.getProperty("flutter.sdk") -assert flutterSdkPath != null, "flutter.sdk not set in local.properties" -apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.9.1" apply false + id "org.jetbrains.kotlin.android" version "2.2.20" apply false +} + +include ":app" diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 9625e10..1dc6cf7 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 13.0 diff --git a/example/ios/Podfile b/example/ios/Podfile index 88359b2..e72e0b4 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '13.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 8c0a965..533c8f2 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -14,9 +14,9 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 - url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de + Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 + url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b -PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 +PODFILE CHECKSUM: 0dbd5a87e0ace00c9610d2037ac22083a01f861d -COCOAPODS: 1.11.3 +COCOAPODS: 1.16.2 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 4b0e9a0..bbc3bbb 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -156,7 +156,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -205,6 +205,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -342,7 +343,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -420,7 +421,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -469,7 +470,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a..9c12df5 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index 70693e4..b636303 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -1,7 +1,7 @@ import UIKit import Flutter -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/example/lib/views/widgets/custom_text.dart b/example/lib/views/widgets/custom_text.dart index 5da1cd4..0b2b18a 100644 --- a/example/lib/views/widgets/custom_text.dart +++ b/example/lib/views/widgets/custom_text.dart @@ -175,7 +175,7 @@ class CustomText extends StatelessWidget { style: TextStyle( fontWeight: FontWeight.w400, fontSize: _fontSize, - color: textColor ?? Colors.black.withOpacity(.8), + color: textColor ?? Colors.black.withValues(alpha: 0.8), ), ), ); diff --git a/example/lib/views/widgets/hashtag_list_view.dart b/example/lib/views/widgets/hashtag_list_view.dart index f49059e..e1e5555 100644 --- a/example/lib/views/widgets/hashtag_list_view.dart +++ b/example/lib/views/widgets/hashtag_list_view.dart @@ -27,7 +27,7 @@ class HashtagListView extends StatelessWidget { color: Colors.white, boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(.2), + color: Colors.black.withValues(alpha: 0.2), offset: const Offset(0, -20), blurRadius: 20, spreadRadius: 2, diff --git a/example/lib/views/widgets/user_list_view.dart b/example/lib/views/widgets/user_list_view.dart index ae82100..81cb0ea 100644 --- a/example/lib/views/widgets/user_list_view.dart +++ b/example/lib/views/widgets/user_list_view.dart @@ -28,7 +28,7 @@ class UserListView extends StatelessWidget { color: Colors.white, boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(.2), + color: Colors.black.withValues(alpha: 0.2), offset: const Offset(0, -20), blurRadius: 20, spreadRadius: 2, diff --git a/example/pubspec.lock b/example/pubspec.lock index 6e82a41..8684673 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -21,42 +21,34 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.4.0" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" collection: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" - source: hosted - version: "1.17.0" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.19.1" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.3" flutter: dependency: "direct main" description: flutter @@ -86,15 +78,31 @@ packages: path: ".." relative: true source: path - version: "2.0.0" - js: + version: "2.3.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.dev" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.dev" + source: hosted + version: "3.0.10" + leak_tracker_testing: dependency: transitive description: - name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "3.0.2" linkify: dependency: "direct main" description: @@ -115,47 +123,47 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.17" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.17.0" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.9.1" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.8" sky_engine: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_span: dependency: transitive description: @@ -168,18 +176,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.4" string_scanner: dependency: transitive description: @@ -200,82 +208,98 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.7.7" url_launcher: dependency: "direct main" description: name: url_launcher - sha256: "568176fc8ab5ac1d88ff0db8ff28659d103851670dda55e83b485664c2309299" + sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 url: "https://pub.dev" source: hosted - version: "6.1.6" + version: "6.3.2" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "9e262cbec69233717d5198f4d0b0c4961fa027e3685ba425442c43c64f38bb9b" + sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572" url: "https://pub.dev" source: hosted - version: "6.0.19" + version: "6.3.29" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "6ba7dddee26c9fae27c9203c424631109d73c8fa26cfa7bc3e35e751cb87f62e" + sha256: "580fe5dfb51671ae38191d316e027f6b76272b026370708c2d898799750a02b0" url: "https://pub.dev" source: hosted - version: "6.0.17" + version: "6.4.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "360fa359ab06bcb4f7c5cd3123a2a9a4d3364d4575d27c4b33468bd4497dd094" + sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.2.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: a9b3ea9043eabfaadfa3fb89de67a11210d85569086d22b3854484beab8b3978 + sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.2.5" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.3.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "5669882643b96bb6d5786637cac727c6e918a790053b09245fd4513b8a07df2a" + sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.4.2" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: e3c3b16d3104260c10eea3b0e34272aaa57921f83148b0619f74c2eced9b7ef1 + sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.5" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" + url: "https://pub.dev" + source: hosted + version: "15.0.2" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" sdks: - dart: ">=2.18.0 <3.0.0" - flutter: ">=2.10.0" + dart: ">=3.10.0 <4.0.0" + flutter: ">=3.38.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 01af8b0..93a736e 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -12,8 +12,7 @@ dependencies: flutter: sdk: flutter - cupertino_icons: ^1.0.2 - url_launcher: ^6.1.6 + url_launcher: ^6.2.4 linkify: ^4.1.0 fluttertagger: path: ../ From 7aac73f7c017defec0c1601a0a607ab5ac746916 Mon Sep 17 00:00:00 2001 From: Crazelu Date: Sun, 29 Mar 2026 23:34:50 +0100 Subject: [PATCH 2/6] fix: removes extra whitespace added to non-tags which breaks text selection --- lib/src/tagger.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/src/tagger.dart b/lib/src/tagger.dart index 8520a5d..143d18b 100644 --- a/lib/src/tagger.dart +++ b/lib/src/tagger.dart @@ -1213,7 +1213,7 @@ class FlutterTaggerController extends TextEditingController { if (currentText.contains(_triggerCharactersPattern)) { final nestedSpans = _getNestedSpans(currentText, start); spans.addAll(nestedSpans); - if (i < splitText.length - 1 && splitText[i + 1].isNotEmpty) { + if (i < splitText.length - 1) { spans.add(const TextSpan(text: " ")); } @@ -1226,7 +1226,10 @@ class FlutterTaggerController extends TextEditingController { if (i + 1 < splitText.length) { end = start + splitText[i + 1].length; } - spans.add(TextSpan(text: "$currentText ")); + spans.add(TextSpan(text: currentText)); + if (i < splitText.length - 1) { + spans.add(const TextSpan(text: " ")); + } } } return TextSpan(children: spans, style: style); From 758849188d4051ce6ad41cd27b7b770ff3fec56d Mon Sep 17 00:00:00 2001 From: Crazelu Date: Sun, 29 Mar 2026 23:38:12 +0100 Subject: [PATCH 3/6] chore: update version and changelog --- CHANGELOG.md | 12 ++++++++++-- README.md | 6 ++---- pubspec.yaml | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37dc790..61bf8e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## 1.0.0 * Initial release. + ## 1.0.0+1 * Fixes SDK version constraints @@ -8,9 +9,11 @@ ## 1.0.0+2 * Updates demo + ## 1.0.0+3 * Updates repo banner + ## 1.0.0+4 * README update @@ -18,9 +21,10 @@ ## 1.0.0+5 * Updates documentation and README example + ## 1.0.0+6 -* Adds support for formatting tags in FlutterTaggerController's text value set directly using the `text` setter. +* Adds support for formatting tags in FlutterTaggerController's text value set directly using the `text` setter. * Exposes a `formatTags` method for this purpose. ## 2.0.0 @@ -57,4 +61,8 @@ ## 2.3.1 -* Adds `tags` getter to `FlutterTaggerController` which returns the currently applied tags. \ No newline at end of file +* Adds `tags` getter to `FlutterTaggerController` which returns the currently applied tags. + +## 2.3.2 + +* Fixes issue with text selection throwing range error for "Select All" option or by manually selecting all characters in the text field. diff --git a/README.md b/README.md index 2f6f315..28dadf7 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,10 @@

likes - popularity pub points code coverage

- FlutterTagger is a Flutter package that allows for the extension of TextFields to provide tagging capabilities. A typical use case is in social apps where user mentions and hashtags features are desired. ## Install 🚀 @@ -20,7 +18,7 @@ In the `pubspec.yaml` of your flutter project, add the following dependency: ```yaml dependencies: - fluttertagger: ^2.3.1 + fluttertagger: ^2.3.2 ``` ## Import the package in your project 📥 @@ -133,7 +131,7 @@ Explore detailed example demo [here](https://github.com/Crazelu/fluttertagger/tr ## Demo 📷 -Example demo +Example demo ## Contributions 🫱🏾‍🫲🏼 diff --git a/pubspec.yaml b/pubspec.yaml index 8b46aa2..1b91da5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: fluttertagger description: A Flutter package that allows for the extension of TextFields to provide tagging capabilities (user mentions, hashtags, etc). -version: 2.3.1 +version: 2.3.2 repository: https://github.com/Crazelu/fluttertagger issue_tracker: https://github.com/Crazelu/fluttertagger/issues topics: [user, mention, hashtag, tagging] From 51dc98c50f514472ded247236832873d7ee5d8e9 Mon Sep 17 00:00:00 2001 From: Crazelu Date: Sun, 29 Mar 2026 23:43:34 +0100 Subject: [PATCH 4/6] chore: update cache github actions version --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7b5c4d8..f252a9a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,7 +20,7 @@ jobs: with: java-version: ${{ env.java_version }} - name: Cache Flutter dependencies - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: /opt/hostedtoolcache/flutter key: ${{ runner.OS }}-flutter-install-cache-${{ env.flutter_version }} From 567152b926f89f07b51f4905b963d283961fdfc5 Mon Sep 17 00:00:00 2001 From: Crazelu Date: Sun, 29 Mar 2026 23:47:32 +0100 Subject: [PATCH 5/6] chore: update flutter version for ci workflow --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f252a9a..b104344 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,7 +7,7 @@ on: branches: [ main ] env: - flutter_version: "3.22.x" + flutter_version: "3.32.x" java_version: "17.x" jobs: From 6e67e89df2c10e9a281a7d71c424483969e11062 Mon Sep 17 00:00:00 2001 From: Crazelu Date: Sun, 29 Mar 2026 23:51:35 +0100 Subject: [PATCH 6/6] chore: replace usage of deprecated API in example project --- example/lib/main.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 8ba0ffb..31d2d3e 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -20,7 +20,7 @@ class MyApp extends StatelessWidget { title: 'FlutterTagger Demo', theme: ThemeData( textSelectionTheme: TextSelectionThemeData( - selectionColor: Colors.redAccent.withOpacity(.3), + selectionColor: Colors.redAccent.withValues(alpha: 0.3), ), primarySwatch: Colors.red, ),