diff --git a/CHANGELOG.md b/CHANGELOG.md index 781dfa6..35ba009 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.1 + +* Android - Migrate to build-in Kotlin + ## 0.4.0 * Add support for **JSON Asset** file locale diff --git a/README.md b/README.md index 6694a58..d9ed48e 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ SDK [flutter_localizations](https://api.flutter.dev/flutter/flutter_localization itself. Follow the steps below to use the package, or you can check out a small [example](https://pub.dev/packages/flutter_localization/example) project of the package. -Buy Me a Coffee -Buy Me a Coffee at ko-fi.com +Buy Me a Coffee +Buy Me a Coffee at ko-fi.com # Breaking Changes @@ -89,12 +89,18 @@ final FlutterLocalization localization = FlutterLocalization.instance; @override void initState() { localization.onTranslatedLanguage = _onTranslatedLanguage; - _initializeLocalization(); + + /// Initialize with map-based + _initializeLocalizationMapBased(); + + /// or JSON asset base on your language source + _initializeLocalizationJsonAsset(); + + /// make sure to use only 1 type of source super.initState(); } -Future _initializeLocalization() async { - // Map-based configuration +Future _initializeLocalizationMapBased() async { await localization.init( initLanguageCode: 'en', source: LocalizationSource.map, @@ -104,17 +110,18 @@ Future _initializeLocalization() async { MapLocale('ja', AppLocale.JA), ], ); +} - // Or JSON-based configuration using JsonLocale: - // await localization.init( - // initLanguageCode: 'en', - // source: LocalizationSource.jsonAsset, - // jsonLocales: const [ - // JsonLocale('en', 'assets/i18n/en.json'), - // JsonLocale('km', 'assets/i18n/km.json'), - // JsonLocale('ja', 'assets/i18n/ja.json'), - // ], - // ); +Future _initializeLocalizationJsonAsset() async { + await localization.init( + initLanguageCode: 'en', + source: LocalizationSource.jsonAsset, + jsonLocales: const [ + JsonLocale('en', 'assets/i18n/en.json'), + JsonLocale('km', 'assets/i18n/km.json'), + JsonLocale('ja', 'assets/i18n/ja.json'), + ], + ); } // The setState call here is required to rebuild the app after language changes. diff --git a/android/build.gradle b/android/build.gradle deleted file mode 100644 index 60e338b..0000000 --- a/android/build.gradle +++ /dev/null @@ -1,47 +0,0 @@ -group 'com.mastertipsy.flutter_localization' -version '1.0-SNAPSHOT' - -buildscript { - ext.kotlin_version = '1.8.22' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } -} - -allprojects { - repositories { - google() - mavenCentral() - } -} - -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' - -android { - namespace "com.mastertipsy.flutter_localization" - compileSdk 35 - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - minSdkVersion 21 - } -} diff --git a/android/build.gradle.kts b/android/build.gradle.kts new file mode 100644 index 0000000..c551746 --- /dev/null +++ b/android/build.gradle.kts @@ -0,0 +1,52 @@ +group = "com.mastertipsy.flutter_localization" +version = "1.0-SNAPSHOT" + +buildscript { + val kotlinVersion = "2.3.20" + repositories { + google() + mavenCentral() + } + + dependencies { + classpath("com.android.tools.build:gradle:9.0.1") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +plugins { + id("com.android.library") +} + +android { + namespace = "com.mastertipsy.flutter_localization" + compileSdk = 36 + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + sourceSets { + getByName("main") { + java.srcDirs("src/main/kotlin") + } + } + + defaultConfig { + minSdk = 21 + } +} + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 97eaa87..0000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Dec 05 11:28:40 ICT 2024 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/android/settings.gradle b/android/settings.gradle deleted file mode 100644 index e6cf5bd..0000000 --- a/android/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'flutter_localization' diff --git a/android/settings.gradle.kts b/android/settings.gradle.kts new file mode 100644 index 0000000..639dd04 --- /dev/null +++ b/android/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "flutter_localization" diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 0a0938a..23b2c3c 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,3 +1,3 @@ - - + diff --git a/android/src/main/kotlin/com/mastertipsy/flutter_localization/FlutterLocalizationPlugin.kt b/android/src/main/kotlin/com/mastertipsy/flutter_localization/FlutterLocalizationPlugin.kt index 094da87..eb72a52 100644 --- a/android/src/main/kotlin/com/mastertipsy/flutter_localization/FlutterLocalizationPlugin.kt +++ b/android/src/main/kotlin/com/mastertipsy/flutter_localization/FlutterLocalizationPlugin.kt @@ -1,7 +1,5 @@ package com.mastertipsy.flutter_localization -import androidx.annotation.NonNull - import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel @@ -9,19 +7,24 @@ import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result /** FlutterLocalizationPlugin */ -class FlutterLocalizationPlugin: FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity - private lateinit var channel : MethodChannel +class FlutterLocalizationPlugin : + FlutterPlugin, + MethodCallHandler { + // The MethodChannel that will the communication between Flutter and native Android + // + // This local reference serves to register the plugin with the Flutter Engine and unregister it + // when the Flutter Engine is detached from the Activity + private lateinit var channel: MethodChannel - override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter_localization") channel.setMethodCallHandler(this) } - override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { + override fun onMethodCall( + call: MethodCall, + result: Result + ) { if (call.method == "getPlatformVersion") { result.success("Android ${android.os.Build.VERSION.RELEASE}") } else { @@ -29,7 +32,7 @@ class FlutterLocalizationPlugin: FlutterPlugin, MethodCallHandler { } } - override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { channel.setMethodCallHandler(null) } } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index 63009b9..0000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,69 +0,0 @@ -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()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -android { - namespace 'com.mastertipsy.flutter_localization_example' - compileSdkVersion flutter.compileSdkVersion - ndkVersion '29.0.13113456' - - compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.mastertipsy.flutter_localization_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 21 - targetSdkVersion flutter.targetSdkVersion - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - } - - 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 - } - } -} - -flutter { - source '../..' -} - -dependencies { - -} diff --git a/example/android/app/build.gradle.kts b/example/android/app/build.gradle.kts new file mode 100644 index 0000000..782cd42 --- /dev/null +++ b/example/android/app/build.gradle.kts @@ -0,0 +1,45 @@ +plugins { + id("com.android.application") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + namespace = "com.mastertipsy.flutter_localization_example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.mastertipsy.flutter_localization_example" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + 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.getByName("debug") + } + } +} + +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + +flutter { + source = "../.." +} diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 2a1f158..91f358d 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,33 +1,45 @@ - + android:label="flutter_localization_example" + android:name="${applicationName}" + android:icon="@mipmap/ic_launcher"> + android:name=".MainActivity" + android:exported="true" + android:launchMode="singleTop" + android:taskAffinity="" + android:theme="@style/LaunchTheme" + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" + android:hardwareAccelerated="true" + android:windowSoftInputMode="adjustResize"> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" + /> - - + + + android:name="flutterEmbedding" + android:value="2" /> + + + + + + + diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index bc157bd..0000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/example/android/build.gradle.kts b/example/android/build.gradle.kts new file mode 100644 index 0000000..dbee657 --- /dev/null +++ b/example/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties index f6062e7..e96108c 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1,7 +1,6 @@ org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true -android.enableJetifier=true -#org.gradle.java.home=/Users/company/Library/Java/JavaVirtualMachines/corretto-18.0.2/Contents/Home -android.defaults.buildfeatures.buildconfig=true -android.nonTransitiveRClass=false -android.nonFinalResIds=false \ No newline at end of file +# This newDsl flag was added by the Flutter template +android.newDsl=false +# This builtInKotlin flag was added by the Flutter template +android.builtInKotlin=false diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index efdcc4a..2d428bf 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index 5f4fde1..0000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,25 +0,0 @@ -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 - }() - - includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version '8.9.3' apply false - id "org.jetbrains.kotlin.android" version "1.8.22" apply false -} - -include ":app" \ No newline at end of file diff --git a/example/android/settings.gradle.kts b/example/android/settings.gradle.kts new file mode 100644 index 0000000..c21f0c5 --- /dev/null +++ b/example/android/settings.gradle.kts @@ -0,0 +1,26 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "9.0.1" apply false + id("org.jetbrains.kotlin.android") version "2.3.20" apply false +} + +include(":app") diff --git a/ios/flutter_localization/Package.swift b/ios/flutter_localization/Package.swift index a0ec90c..d2ffe85 100644 --- a/ios/flutter_localization/Package.swift +++ b/ios/flutter_localization/Package.swift @@ -11,12 +11,16 @@ let package = Package( products: [ .library(name: "flutter-localization", targets: ["flutter_localization"]), ], - dependencies: [], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework"), + ], targets: [ .target( name: "flutter_localization", - dependencies: [], - resources: [], + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework"), + ], + resources: [] ), ], ) diff --git a/macos/flutter_localization/Package.swift b/macos/flutter_localization/Package.swift index a10da56..8b721ed 100644 --- a/macos/flutter_localization/Package.swift +++ b/macos/flutter_localization/Package.swift @@ -11,12 +11,16 @@ let package = Package( products: [ .library(name: "flutter-localization", targets: ["flutter_localization"]), ], - dependencies: [], + dependencies: [ + .package(name: "FlutterFramework", path: "../FlutterFramework"), + ], targets: [ .target( name: "flutter_localization", - dependencies: [], - resources: [], + dependencies: [ + .product(name: "FlutterFramework", package: "FlutterFramework"), + ], + resources: [] ), ], ) diff --git a/pubspec.yaml b/pubspec.yaml index 18e4de5..f23c17b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_localization description: 'Flutter Localization is a package use for in-app localization with map data. More easier and faster to implement and inspired by the flutter_localizations itself.' -version: 0.4.0 +version: 0.4.1 homepage: https://github.com/channdara/flutter_localization issue_tracker: https://github.com/channdara/flutter_localization/issues