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.
-
-
+
+
# 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