diff --git a/CHANGELOG.md b/CHANGELOG.md index 33e6fc8..b3297d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.3.0 + +- Fixed selection dialog length + +- Added i18n with `CountryLocalizations` + ## 1.2.4 Fixed a bug that was making impossible to update initial selection diff --git a/README.md b/README.md index 8f5e167..dfa1581 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ A flutter package for showing a country code selector. +It supports i18n. + @@ -15,8 +17,8 @@ Just put the component in your application setting the onChanged callback. @override Widget build(BuildContext context) => new Scaffold( - body: new Center( - child: new CountryCodePicker( + body: Center( + child: CountryCodePicker( onChanged: print, // Initial selection and favorite can be one of code ('IT') OR dial_code('+39') initialSelection: 'IT', @@ -33,19 +35,12 @@ Just put the component in your application setting the onChanged callback. ``` -Note: Your onChanged function can be any function of the type shown below: - -```dart -(CountryCode)->dynamic - -``` - Example: ```dart void _onCountryChange(CountryCode countryCode) { - //Todo : manipulate the selected country code here + //TODO : manipulate the selected country code here print("New Country selected: " + countryCode.toString()); } diff --git a/example/.gitignore b/example/.gitignore index dee655c..ae1f183 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -1,9 +1,37 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp .DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ .dart_tool/ - -.packages -.pub/ - -build/ - .flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Exceptions to above rules. +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/example/.metadata b/example/.metadata index 1634cfb..01d2dcb 100644 --- a/example/.metadata +++ b/example/.metadata @@ -4,5 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: 3b309bda072a6b326e8aa4591a5836af600923ce - channel: beta + revision: 0b8abb4724aa590dd0f429683339b1e045a1594d + channel: stable + +project_type: app diff --git a/example/README.md b/example/README.md index 1a1fb1a..a135626 100644 --- a/example/README.md +++ b/example/README.md @@ -1,8 +1,16 @@ -# hello_example +# example -Demonstrates how to use the hello plugin. +A new Flutter project. ## Getting Started -For help getting started with Flutter, view our online -[documentation](https://flutter.io/). +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/android/.gitignore b/example/android/.gitignore index 65b7315..bc2100d 100644 --- a/example/android/.gitignore +++ b/example/android/.gitignore @@ -1,10 +1,7 @@ -*.iml -*.class -.gradle +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat /local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures GeneratedPluginRegistrant.java diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 3f7c6cb..0f6a5e5 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -22,10 +22,15 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 27 + compileSdkVersion 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } lintOptions { disable 'InvalidPackage' @@ -33,12 +38,12 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.salvatore.countrycodepicker" + applicationId "com.example.example" minSdkVersion 16 - targetSdkVersion 27 + targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -55,7 +60,8 @@ flutter { } dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test:runner:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' } diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..c208884 --- /dev/null +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 5f28283..8bc6007 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,12 +1,5 @@ - - - - + package="com.example.example"> - - + + diff --git a/example/android/app/src/main/java/com/example/helloexample/MainActivity.java b/example/android/app/src/main/java/com/example/helloexample/MainActivity.java deleted file mode 100644 index 0746cc7..0000000 --- a/example/android/app/src/main/java/com/example/helloexample/MainActivity.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.helloexample; - -import android.os.Bundle; -import io.flutter.app.FlutterActivity; -import io.flutter.plugins.GeneratedPluginRegistrant; - -public class MainActivity extends FlutterActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - GeneratedPluginRegistrant.registerWith(this); - } -} diff --git a/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt new file mode 100644 index 0000000..1656503 --- /dev/null +++ b/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt @@ -0,0 +1,12 @@ +package com.example.example + +import androidx.annotation.NonNull; +import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugins.GeneratedPluginRegistrant + +class MainActivity: FlutterActivity() { + override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { + GeneratedPluginRegistrant.registerWith(flutterEngine); + } +} diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..c208884 --- /dev/null +++ b/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/example/android/build.gradle b/example/android/build.gradle index ae21629..3100ad2 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,11 +1,13 @@ buildscript { + ext.kotlin_version = '1.3.50' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.5.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 8bd86f6..38c8d45 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -1 +1,4 @@ org.gradle.jvmargs=-Xmx1536M +android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13372ae..0000000 Binary files a/example/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 9372d0f..296b146 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-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip diff --git a/example/android/gradlew b/example/android/gradlew deleted file mode 100755 index 9d82f78..0000000 --- a/example/android/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat deleted file mode 100644 index 8a0b282..0000000 --- a/example/android/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/example/country_code_picker _example.iml b/example/country_code_picker _example.iml deleted file mode 100644 index e5c8371..0000000 --- a/example/country_code_picker _example.iml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/example/country_code_picker _example_android.iml b/example/country_code_picker _example_android.iml deleted file mode 100644 index b050030..0000000 --- a/example/country_code_picker _example_android.iml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/example/ios/.gitignore b/example/ios/.gitignore index 79cc4da..e96ef60 100644 --- a/example/ios/.gitignore +++ b/example/ios/.gitignore @@ -1,45 +1,32 @@ -.idea/ -.vagrant/ -.sconsign.dblite -.svn/ - -.DS_Store -*.swp -profile - -DerivedData/ -build/ -GeneratedPluginRegistrant.h -GeneratedPluginRegistrant.m - -.generated/ - -*.pbxuser *.mode1v3 *.mode2v3 +*.moved-aside +*.pbxuser *.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* -!default.pbxuser +# Exceptions to above rules. !default.mode1v3 !default.mode2v3 +!default.pbxuser !default.perspectivev3 - -xcuserdata - -*.moved-aside - -*.pyc -*sync/ -Icon? -.tags* - -/Flutter/app.flx -/Flutter/app.zip -/Flutter/flutter_assets/ -/Flutter/App.framework -/Flutter/Flutter.framework -/Flutter/Generated.xcconfig -/ServiceDefinitions.json - -Pods/ -.symlinks/ diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 9367d48..6b4c0f7 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable App CFBundleIdentifier diff --git a/example/ios/Flutter/flutter_export_environment.sh b/example/ios/Flutter/flutter_export_environment.sh deleted file mode 100644 index a44c1dc..0000000 --- a/example/ios/Flutter/flutter_export_environment.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# This is a generated file; do not edit or check into version control. -export "FLUTTER_ROOT=D:\Programmi\flutter" -export "FLUTTER_APPLICATION_PATH=C:\Users\Salvatore Giordano\development\CountryCodePicker\example" -export "FLUTTER_TARGET=lib\main.dart" -export "FLUTTER_BUILD_DIR=build" -export "SYMROOT=${SOURCE_ROOT}/../build\ios" -export "FLUTTER_FRAMEWORK_DIR=D:\Programmi\flutter\bin\cache\artifacts\engine\ios" -export "FLUTTER_BUILD_NAME=1.0.0" -export "FLUTTER_BUILD_NUMBER=1" diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 4bffc5c..0d45b98 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -8,15 +8,12 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; - 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; @@ -40,17 +37,15 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; @@ -73,7 +68,6 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( - 2D5378251FAA1A9400D5DBA9 /* flutter_assets */, 3B80C3931E831B6300D905FE /* App.framework */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEBA1CF902C7004384FC /* Flutter.framework */, @@ -90,7 +84,6 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, ); sourceTree = ""; }; @@ -105,8 +98,6 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( - 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, - 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -114,6 +105,8 @@ 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, ); path = Runner; sourceTree = ""; @@ -121,7 +114,6 @@ 97C146F11CF9000F007C117D /* Supporting Files */ = { isa = PBXGroup; children = ( - 97C146F21CF9000F007C117D /* main.m */, ); name = "Supporting Files"; sourceTree = ""; @@ -155,17 +147,18 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0910; + LastUpgradeCheck = 1020; ORGANIZATIONNAME = "The Chromium Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; }; }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, @@ -188,9 +181,7 @@ files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, - 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, - 2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -233,8 +224,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, - 97C146F31CF9000F007C117D /* main.m in Sources */, + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -261,6 +251,83 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; @@ -275,12 +342,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -329,12 +398,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -358,6 +429,8 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -368,6 +441,7 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -380,8 +454,11 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.helloExample; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -391,6 +468,7 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -403,8 +481,10 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.helloExample; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; @@ -417,6 +497,7 @@ buildConfigurations = ( 97C147031CF9000F007C117D /* Debug */, 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -426,6 +507,7 @@ buildConfigurations = ( 97C147061CF9000F007C117D /* Debug */, 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 1263ac8..a28140c 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ @@ -46,7 +45,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" @@ -67,7 +65,7 @@ -#import - -@interface AppDelegate : FlutterAppDelegate - -@end diff --git a/example/ios/Runner/AppDelegate.m b/example/ios/Runner/AppDelegate.m deleted file mode 100644 index 59a72e9..0000000 --- a/example/ios/Runner/AppDelegate.m +++ /dev/null @@ -1,13 +0,0 @@ -#include "AppDelegate.h" -#include "GeneratedPluginRegistrant.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [GeneratedPluginRegistrant registerWithRegistry:self]; - // Override point for customization after application launch. - return [super application:application didFinishLaunchingWithOptions:launchOptions]; -} - -@end diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index 3d43d11..dc9ada4 100644 Binary files a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist index 918d041..a060db6 100644 --- a/example/ios/Runner/Info.plist +++ b/example/ios/Runner/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -11,7 +11,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - hello_example + example CFBundlePackageType APPL CFBundleShortVersionString diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..7335fdf --- /dev/null +++ b/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/example/ios/Runner/main.m b/example/ios/Runner/main.m deleted file mode 100644 index dff6597..0000000 --- a/example/ios/Runner/main.m +++ /dev/null @@ -1,9 +0,0 @@ -#import -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/example/lib/main.dart b/example/lib/main.dart index 12db222..d45fb37 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,7 +1,9 @@ -import 'package:flutter/material.dart'; import 'package:country_code_picker/country_code_picker.dart'; +import 'package:country_code_picker/country_localizations.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; -void main() => runApp(new MyApp()); +void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override @@ -17,54 +19,67 @@ class _MyAppState extends State { @override Widget build(BuildContext context) { return new MaterialApp( - home: new Scaffold( - appBar: new AppBar( - title: const Text('CountryPicker Example'), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - CountryCodePicker( - onChanged: print, - // Initial selection and favorite can be one of code ('IT') OR dial_code('+39') - initialSelection: 'IT', - favorite: ['+39', 'FR'], - //Get the country information relevant to the initial selection - onInit: (code) => print("${code.name} ${code.dialCode}"), - ), - SizedBox( - width: 400, - height: 60, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: CountryCodePicker( - onChanged: print, - initialSelection: 'TF', - showCountryOnly: true, - showOnlyCountryWhenClosed: true, - alignLeft: true, - builder: (countryCode) { - return Text('${countryCode.code}'); - }, - ), - ), - ), - SizedBox( - width: 400, - height: 60, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: CountryCodePicker( - onChanged: print, - initialSelection: 'TF', - showCountryOnly: true, - showOnlyCountryWhenClosed: true, - favorite: ['+39', 'FR']), - ), - ), - ], + supportedLocales: [ + Locale('en'), + Locale('it'), + Locale('en'), + ], + localizationsDelegates: [ + CountryLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ], + home: new Scaffold( + appBar: new AppBar( + title: const Text('CountryPicker Example'), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CountryCodePicker( + onChanged: print, + // Initial selection and favorite can be one of code ('IT') OR dial_code('+39') + initialSelection: 'IT', + favorite: ['+39', 'FR'], + //Get the country information relevant to the initial selection + onInit: (code) => print("${code.name} ${code.dialCode}"), ), - ))); + SizedBox( + width: 400, + height: 60, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: CountryCodePicker( + onChanged: print, + initialSelection: 'TF', + showCountryOnly: true, + showOnlyCountryWhenClosed: true, + alignLeft: true, + builder: (countryCode) { + return Text('${countryCode.code}'); + }, + ), + ), + ), + SizedBox( + width: 400, + height: 60, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: CountryCodePicker( + onChanged: print, + initialSelection: 'TF', + showCountryOnly: true, + showOnlyCountryWhenClosed: true, + favorite: ['+39', 'FR'], + ), + ), + ), + ], + ), + ), + ), + ); } } diff --git a/example/pubspec.yaml b/example/pubspec.yaml index b4bcbbe..99d4f1b 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -17,10 +17,8 @@ dependencies: sdk: flutter country_code_picker: path: ../ - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^0.1.2 + flutter_localizations: + sdk: flutter dev_dependencies: flutter_test: diff --git a/lib/country_code.dart b/lib/country_code.dart index c289ff2..63997b3 100644 --- a/lib/country_code.dart +++ b/lib/country_code.dart @@ -1,3 +1,7 @@ +import 'package:country_code_picker/country_codes.dart'; +import 'package:country_code_picker/country_localizations.dart'; +import 'package:flutter/cupertino.dart'; + mixin ToAlias {} @deprecated @@ -9,20 +13,53 @@ class CountryCode { String name; /// the flag of the country - String flagUri; + final String flagUri; /// the country code (IT,AF..) - String code; + final String code; /// the dial code (+39,+93..) - String dialCode; + final String dialCode; - CountryCode({this.name, this.flagUri, this.code, this.dialCode}); + CountryCode({ + this.name, + this.flagUri, + this.code, + this.dialCode, + }); + + factory CountryCode.fromCode(String isoCode) { + final Map jsonCode = codes.firstWhere( + (code) => code['code'] == isoCode, + orElse: () => null, + ); + + if (jsonCode == null) { + return null; + } + + return CountryCode.fromJson(jsonCode); + } + + factory CountryCode.fromJson(Map json) { + return CountryCode( + name: json['name'], + code: json['code'], + dialCode: json['dial_code'], + flagUri: 'flags/${json['code'].toLowerCase()}.png', + ); + } @override String toString() => "$dialCode"; - String toLongString() => "$dialCode $name"; + String toLongString([BuildContext context]) => + "$dialCode ${toCountryStringOnly(context)}"; - String toCountryStringOnly() => '$name'; + String toCountryStringOnly([BuildContext context]) { + if (context != null) { + return CountryLocalizations.of(context)?.translate(code) ?? name; + } + return '$name'; + } } diff --git a/lib/country_code_picker.dart b/lib/country_code_picker.dart index 05e23ca..0c40ff0 100644 --- a/lib/country_code_picker.dart +++ b/lib/country_code_picker.dart @@ -9,7 +9,6 @@ export 'country_code.dart'; class CountryCodePicker extends StatefulWidget { final ValueChanged onChanged; - //Exposed new method to get the initial information of the country final ValueChanged onInit; final String initialSelection; final List favorite; @@ -27,8 +26,8 @@ class CountryCodePicker extends StatefulWidget { /// aligns the flag and the Text left /// /// additionally this option also fills the available space of the widget. - /// this is especially usefull in combination with [showOnlyCountryWhenClosed], - /// because longer countrynames are displayed in one line + /// this is especially useful in combination with [showOnlyCountryWhenClosed], + /// because longer country names are displayed in one line final bool alignLeft; /// shows the flag @@ -59,22 +58,14 @@ class CountryCodePicker extends StatefulWidget { State createState() { List jsonList = codes; - List elements = jsonList - .map((s) => CountryCode( - name: s['name'], - code: s['code'], - dialCode: s['dial_code'], - flagUri: 'flags/${s['code'].toLowerCase()}.png', - )) - .toList(); + List elements = + jsonList.map((json) => CountryCode.fromJson(json)).toList(); - if(countryFilter.length > 0) { - elements = elements - .where((c) => countryFilter.contains(c.code)) - .toList(); + if (countryFilter.length > 0) { + elements = elements.where((c) => countryFilter.contains(c.code)).toList(); } - return new _CountryCodePickerState(elements); + return _CountryCodePickerState(elements); } } @@ -121,7 +112,7 @@ class _CountryCodePickerState extends State { fit: widget.alignLeft ? FlexFit.tight : FlexFit.loose, child: Text( widget.showOnlyCountryWhenClosed - ? selectedItem.toCountryStringOnly() + ? selectedItem.toCountryStringOnly(context) : selectedItem.toString(), style: widget.textStyle ?? Theme.of(context).textTheme.button, ), @@ -132,15 +123,16 @@ class _CountryCodePickerState extends State { } return _widget; } - + @override void didUpdateWidget(CountryCodePicker oldWidget) { super.didUpdateWidget(oldWidget); - if(oldWidget.initialSelection != widget.initialSelection) { + if (oldWidget.initialSelection != widget.initialSelection) { if (widget.initialSelection != null) { selectedItem = elements.firstWhere( - (e) => - (e.code.toUpperCase() == widget.initialSelection.toUpperCase()) || + (e) => + (e.code.toUpperCase() == + widget.initialSelection.toUpperCase()) || (e.dialCode == widget.initialSelection.toString()), orElse: () => elements[0]); } else { @@ -177,12 +169,15 @@ class _CountryCodePickerState extends State { void _showSelectionDialog() { showDialog( context: context, - builder: (_) => SelectionDialog(elements, favoriteElements, - showCountryOnly: widget.showCountryOnly, - emptySearchBuilder: widget.emptySearchBuilder, - searchDecoration: widget.searchDecoration, - searchStyle: widget.searchStyle, - showFlag: widget.showFlag), + builder: (_) => SelectionDialog( + elements, + favoriteElements, + showCountryOnly: widget.showCountryOnly, + emptySearchBuilder: widget.emptySearchBuilder, + searchDecoration: widget.searchDecoration, + searchStyle: widget.searchStyle, + showFlag: widget.showFlag, + ), ).then((e) { if (e != null) { setState(() { @@ -200,8 +195,8 @@ class _CountryCodePickerState extends State { } } - void _onInit(CountryCode initialData){ - if(widget.onInit != null){ + void _onInit(CountryCode initialData) { + if (widget.onInit != null) { widget.onInit(initialData); } } diff --git a/lib/country_codes.dart b/lib/country_codes.dart index d2214bd..441f66e 100644 --- a/lib/country_codes.dart +++ b/lib/country_codes.dart @@ -1,265 +1,1237 @@ -List codes = [ - {"name": "افغانستان", "code": "AF", "dial_code": "+93"}, - {"name": "Åland", "code": "AX", "dial_code": "+358"}, - {"name": "Shqipëria", "code": "AL", "dial_code": "+355"}, - {"name": "الجزائر", "code": "DZ", "dial_code": "+213"}, - {"name": "American Samoa", "code": "AS", "dial_code": "+1684"}, - {"name": "Andorra", "code": "AD", "dial_code": "+376"}, - {"name": "Angola", "code": "AO", "dial_code": "+244"}, - {"name": "Anguilla", "code": "AI", "dial_code": "+1264"}, - {"name": "Antarctica", "code": "AQ", "dial_code": "+672"}, - {"name": "Antigua and Barbuda", "code": "AG", "dial_code": "+1268"}, - {"name": "Argentina", "code": "AR", "dial_code": "+54"}, - {"name": "Հայաստան", "code": "AM", "dial_code": "+374"}, - {"name": "Aruba", "code": "AW", "dial_code": "+297"}, - {"name": "Australia", "code": "AU", "dial_code": "+61"}, - {"name": "Österreich", "code": "AT", "dial_code": "+43"}, - {"name": "Azərbaycan", "code": "AZ", "dial_code": "+994"}, - {"name": "Bahamas", "code": "BS", "dial_code": "+1242"}, - {"name": "‏البحرين", "code": "BH", "dial_code": "+973"}, - {"name": "Bangladesh", "code": "BD", "dial_code": "+880"}, - {"name": "Barbados", "code": "BB", "dial_code": "+1246"}, - {"name": "Белару́сь", "code": "BY", "dial_code": "+375"}, - {"name": "België", "code": "BE", "dial_code": "+32"}, - {"name": "Belize", "code": "BZ", "dial_code": "+501"}, - {"name": "Bénin", "code": "BJ", "dial_code": "+229"}, - {"name": "Bermuda", "code": "BM", "dial_code": "+1441"}, - {"name": "ʼbrug-yul", "code": "BT", "dial_code": "+975"}, - {"name": "Bolivia", "code": "BO", "dial_code": "+591"}, - {"name": "Bosna i Hercegovina", "code": "BA", "dial_code": "+387"}, - {"name": "Botswana", "code": "BW", "dial_code": "+267"}, - {"name": "Bouvetøya", "code": "BV", "dial_code": "+47"}, - {"name": "Brasil", "code": "BR", "dial_code": "+55"}, - {"name": "British Indian Ocean Territory", "code": "IO", "dial_code": "+246"}, - {"name": "Negara Brunei Darussalam", "code": "BN", "dial_code": "+673"}, - {"name": "България", "code": "BG", "dial_code": "+359"}, - {"name": "Burkina Faso", "code": "BF", "dial_code": "+226"}, - {"name": "Burundi", "code": "BI", "dial_code": "+257"}, - {"name": "Kâmpŭchéa", "code": "KH", "dial_code": "+855"}, - {"name": "Cameroon", "code": "CM", "dial_code": "+237"}, - {"name": "Canada", "code": "CA", "dial_code": "+1"}, - {"name": "Cabo Verde", "code": "CV", "dial_code": "+238"}, - {"name": "Cayman Islands", "code": "KY", "dial_code": "+ 345"}, - {"name": "Ködörösêse tî Bêafrîka", "code": "CF", "dial_code": "+236"}, - {"name": "Tchad", "code": "TD", "dial_code": "+235"}, - {"name": "Chile", "code": "CL", "dial_code": "+56"}, - {"name": "中国", "code": "CN", "dial_code": "+86"}, - {"name": "Christmas Island", "code": "CX", "dial_code": "+61"}, - {"name": "Cocos (Keeling) Islands", "code": "CC", "dial_code": "+61"}, - {"name": "Colombia", "code": "CO", "dial_code": "+57"}, - {"name": "Komori", "code": "KM", "dial_code": "+269"}, - {"name": "République du Congo", "code": "CG", "dial_code": "+242"}, +List> codes = [ + { + "name": "افغانستان", + "code": "AF", + "dial_code": "+93", + }, + { + "name": "Åland", + "code": "AX", + "dial_code": "+358", + }, + { + "name": "Shqipëria", + "code": "AL", + "dial_code": "+355", + }, + { + "name": "الجزائر", + "code": "DZ", + "dial_code": "+213", + }, + { + "name": "American Samoa", + "code": "AS", + "dial_code": "+1684", + }, + { + "name": "Andorra", + "code": "AD", + "dial_code": "+376", + }, + { + "name": "Angola", + "code": "AO", + "dial_code": "+244", + }, + { + "name": "Anguilla", + "code": "AI", + "dial_code": "+1264", + }, + { + "name": "Antarctica", + "code": "AQ", + "dial_code": "+672", + }, + { + "name": "Antigua and Barbuda", + "code": "AG", + "dial_code": "+1268", + }, + { + "name": "Argentina", + "code": "AR", + "dial_code": "+54", + }, + { + "name": "Հայաստան", + "code": "AM", + "dial_code": "+374", + }, + { + "name": "Aruba", + "code": "AW", + "dial_code": "+297", + }, + { + "name": "Australia", + "code": "AU", + "dial_code": "+61", + }, + { + "name": "Österreich", + "code": "AT", + "dial_code": "+43", + }, + { + "name": "Azərbaycan", + "code": "AZ", + "dial_code": "+994", + }, + { + "name": "Bahamas", + "code": "BS", + "dial_code": "+1242", + }, + { + "name": "‏البحرين", + "code": "BH", + "dial_code": "+973", + }, + { + "name": "Bangladesh", + "code": "BD", + "dial_code": "+880", + }, + { + "name": "Barbados", + "code": "BB", + "dial_code": "+1246", + }, + { + "name": "Белару́сь", + "code": "BY", + "dial_code": "+375", + }, + { + "name": "België", + "code": "BE", + "dial_code": "+32", + }, + { + "name": "Belize", + "code": "BZ", + "dial_code": "+501", + }, + { + "name": "Bénin", + "code": "BJ", + "dial_code": "+229", + }, + { + "name": "Bermuda", + "code": "BM", + "dial_code": "+1441", + }, + { + "name": "ʼbrug-yul", + "code": "BT", + "dial_code": "+975", + }, + { + "name": "Bolivia", + "code": "BO", + "dial_code": "+591", + }, + { + "name": "Bosna i Hercegovina", + "code": "BA", + "dial_code": "+387", + }, + { + "name": "Botswana", + "code": "BW", + "dial_code": "+267", + }, + { + "name": "Bouvetøya", + "code": "BV", + "dial_code": "+47", + }, + { + "name": "Brasil", + "code": "BR", + "dial_code": "+55", + }, + { + "name": "British Indian Ocean Territory", + "code": "IO", + "dial_code": "+246", + }, + { + "name": "Negara Brunei Darussalam", + "code": "BN", + "dial_code": "+673", + }, + { + "name": "България", + "code": "BG", + "dial_code": "+359", + }, + { + "name": "Burkina Faso", + "code": "BF", + "dial_code": "+226", + }, + { + "name": "Burundi", + "code": "BI", + "dial_code": "+257", + }, + { + "name": "Kâmpŭchéa", + "code": "KH", + "dial_code": "+855", + }, + { + "name": "Cameroon", + "code": "CM", + "dial_code": "+237", + }, + { + "name": "Canada", + "code": "CA", + "dial_code": "+1", + }, + { + "name": "Cabo Verde", + "code": "CV", + "dial_code": "+238", + }, + { + "name": "Cayman Islands", + "code": "KY", + "dial_code": "+ 345", + }, + { + "name": "Ködörösêse tî Bêafrîka", + "code": "CF", + "dial_code": "+236", + }, + { + "name": "Tchad", + "code": "TD", + "dial_code": "+235", + }, + { + "name": "Chile", + "code": "CL", + "dial_code": "+56", + }, + { + "name": "中国", + "code": "CN", + "dial_code": "+86", + }, + { + "name": "Christmas Island", + "code": "CX", + "dial_code": "+61", + }, + { + "name": "Cocos (Keeling) Islands", + "code": "CC", + "dial_code": "+61", + }, + { + "name": "Colombia", + "code": "CO", + "dial_code": "+57", + }, + { + "name": "Komori", + "code": "KM", + "dial_code": "+269", + }, + { + "name": "République du Congo", + "code": "CG", + "dial_code": "+242", + }, { "name": "République démocratique du Congo", "code": "CD", - "dial_code": "+243" + "dial_code": "+243", + }, + { + "name": "Cook Islands", + "code": "CK", + "dial_code": "+682", + }, + { + "name": "Costa Rica", + "code": "CR", + "dial_code": "+506", + }, + { + "name": "Côte d'Ivoire", + "code": "CI", + "dial_code": "+225", + }, + { + "name": "Hrvatska", + "code": "HR", + "dial_code": "+385", + }, + { + "name": "Cuba", + "code": "CU", + "dial_code": "+53", + }, + { + "name": "Κύπρος", + "code": "CY", + "dial_code": "+357", + }, + { + "name": "Česká republika", + "code": "CZ", + "dial_code": "+420", + }, + { + "name": "Danmark", + "code": "DK", + "dial_code": "+45", + }, + { + "name": "Djibouti", + "code": "DJ", + "dial_code": "+253", + }, + { + "name": "Dominica", + "code": "DM", + "dial_code": "+1767", + }, + { + "name": "República Dominicana", + "code": "DO", + "dial_code": "+1", + }, + { + "name": "Ecuador", + "code": "EC", + "dial_code": "+593", + }, + { + "name": "مصر‎", + "code": "EG", + "dial_code": "+20", + }, + { + "name": "El Salvador", + "code": "SV", + "dial_code": "+503", + }, + { + "name": "Guinea Ecuatorial", + "code": "GQ", + "dial_code": "+240", + }, + { + "name": "ኤርትራ", + "code": "ER", + "dial_code": "+291", + }, + { + "name": "Eesti", + "code": "EE", + "dial_code": "+372", + }, + { + "name": "ኢትዮጵያ", + "code": "ET", + "dial_code": "+251", + }, + { + "name": "Falkland Islands", + "code": "FK", + "dial_code": "+500", + }, + { + "name": "Føroyar", + "code": "FO", + "dial_code": "+298", + }, + { + "name": "Fiji", + "code": "FJ", + "dial_code": "+679", + }, + { + "name": "Suomi", + "code": "FI", + "dial_code": "+358", + }, + { + "name": "France", + "code": "FR", + "dial_code": "+33", + }, + { + "name": "Guyane française", + "code": "GF", + "dial_code": "+594", + }, + { + "name": "Polynésie française", + "code": "PF", + "dial_code": "+689", }, - {"name": "Cook Islands", "code": "CK", "dial_code": "+682"}, - {"name": "Costa Rica", "code": "CR", "dial_code": "+506"}, - {"name": "Côte d'Ivoire", "code": "CI", "dial_code": "+225"}, - {"name": "Hrvatska", "code": "HR", "dial_code": "+385"}, - {"name": "Cuba", "code": "CU", "dial_code": "+53"}, - {"name": "Κύπρος", "code": "CY", "dial_code": "+357"}, - {"name": "Česká republika", "code": "CZ", "dial_code": "+420"}, - {"name": "Danmark", "code": "DK", "dial_code": "+45"}, - {"name": "Djibouti", "code": "DJ", "dial_code": "+253"}, - {"name": "Dominica", "code": "DM", "dial_code": "+1767"}, - {"name": "República Dominicana", "code": "DO", "dial_code": "+1"}, - {"name": "Ecuador", "code": "EC", "dial_code": "+593"}, - {"name": "مصر‎", "code": "EG", "dial_code": "+20"}, - {"name": "El Salvador", "code": "SV", "dial_code": "+503"}, - {"name": "Guinea Ecuatorial", "code": "GQ", "dial_code": "+240"}, - {"name": "ኤርትራ", "code": "ER", "dial_code": "+291"}, - {"name": "Eesti", "code": "EE", "dial_code": "+372"}, - {"name": "ኢትዮጵያ", "code": "ET", "dial_code": "+251"}, - {"name": "Falkland Islands", "code": "FK", "dial_code": "+500"}, - {"name": "Føroyar", "code": "FO", "dial_code": "+298"}, - {"name": "Fiji", "code": "FJ", "dial_code": "+679"}, - {"name": "Suomi", "code": "FI", "dial_code": "+358"}, - {"name": "France", "code": "FR", "dial_code": "+33"}, - {"name": "Guyane française", "code": "GF", "dial_code": "+594"}, - {"name": "Polynésie française", "code": "PF", "dial_code": "+689"}, { "name": "Territoire des Terres australes et antarctiques fr", "code": "TF", - "dial_code": "+262" + "dial_code": "+262", + }, + { + "name": "Gabon", + "code": "GA", + "dial_code": "+241", + }, + { + "name": "Gambia", + "code": "GM", + "dial_code": "+220", + }, + { + "name": "საქართველო", + "code": "GE", + "dial_code": "+995", + }, + { + "name": "Deutschland", + "code": "DE", + "dial_code": "+49", + }, + { + "name": "Ghana", + "code": "GH", + "dial_code": "+233", + }, + { + "name": "Gibraltar", + "code": "GI", + "dial_code": "+350", + }, + { + "name": "Ελλάδα", + "code": "GR", + "dial_code": "+30", + }, + { + "name": "Kalaallit Nunaat", + "code": "GL", + "dial_code": "+299", + }, + { + "name": "Grenada", + "code": "GD", + "dial_code": "+1473", + }, + { + "name": "Guadeloupe", + "code": "GP", + "dial_code": "+590", + }, + { + "name": "Guam", + "code": "GU", + "dial_code": "+1671", + }, + { + "name": "Guatemala", + "code": "GT", + "dial_code": "+502", + }, + { + "name": "Guernsey", + "code": "GG", + "dial_code": "+44", + }, + { + "name": "Guinée", + "code": "GN", + "dial_code": "+224", + }, + { + "name": "Guiné-Bissau", + "code": "GW", + "dial_code": "+245", + }, + { + "name": "Guyana", + "code": "GY", + "dial_code": "+592", + }, + { + "name": "Haïti", + "code": "HT", + "dial_code": "+509", }, - {"name": "Gabon", "code": "GA", "dial_code": "+241"}, - {"name": "Gambia", "code": "GM", "dial_code": "+220"}, - {"name": "საქართველო", "code": "GE", "dial_code": "+995"}, - {"name": "Deutschland", "code": "DE", "dial_code": "+49"}, - {"name": "Ghana", "code": "GH", "dial_code": "+233"}, - {"name": "Gibraltar", "code": "GI", "dial_code": "+350"}, - {"name": "Ελλάδα", "code": "GR", "dial_code": "+30"}, - {"name": "Kalaallit Nunaat", "code": "GL", "dial_code": "+299"}, - {"name": "Grenada", "code": "GD", "dial_code": "+1473"}, - {"name": "Guadeloupe", "code": "GP", "dial_code": "+590"}, - {"name": "Guam", "code": "GU", "dial_code": "+1671"}, - {"name": "Guatemala", "code": "GT", "dial_code": "+502"}, - {"name": "Guernsey", "code": "GG", "dial_code": "+44"}, - {"name": "Guinée", "code": "GN", "dial_code": "+224"}, - {"name": "Guiné-Bissau", "code": "GW", "dial_code": "+245"}, - {"name": "Guyana", "code": "GY", "dial_code": "+592"}, - {"name": "Haïti", "code": "HT", "dial_code": "+509"}, { "name": "Heard Island and McDonald Islands", "code": "HM", - "dial_code": "+0" + "dial_code": "+0", + }, + { + "name": "Vaticano", + "code": "VA", + "dial_code": "+379", + }, + { + "name": "Honduras", + "code": "HN", + "dial_code": "+504", + }, + { + "name": "香港", + "code": "HK", + "dial_code": "+852", + }, + { + "name": "Magyarország", + "code": "HU", + "dial_code": "+36", + }, + { + "name": "Ísland", + "code": "IS", + "dial_code": "+354", + }, + { + "name": "भारत", + "code": "IN", + "dial_code": "+91", + }, + { + "name": "Indonesia", + "code": "ID", + "dial_code": "+62", + }, + { + "name": "ایران", + "code": "IR", + "dial_code": "+98", + }, + { + "name": "العراق", + "code": "IQ", + "dial_code": "+964", + }, + { + "name": "Éire", + "code": "IE", + "dial_code": "+353", + }, + { + "name": "Isle of Man", + "code": "IM", + "dial_code": "+44", + }, + { + "name": "יִשְׂרָאֵל", + "code": "IL", + "dial_code": "+972", + }, + { + "name": "Italia", + "code": "IT", + "dial_code": "+39", + }, + { + "name": "Jamaica", + "code": "JM", + "dial_code": "+1876", + }, + { + "name": "日本", + "code": "JP", + "dial_code": "+81", + }, + { + "name": "Jersey", + "code": "JE", + "dial_code": "+44", + }, + { + "name": "الأردن", + "code": "JO", + "dial_code": "+962", + }, + { + "name": "Қазақстан", + "code": "KZ", + "dial_code": "+7", + }, + { + "name": "Kenya", + "code": "KE", + "dial_code": "+254", + }, + { + "name": "Kiribati", + "code": "KI", + "dial_code": "+686", + }, + { + "name": "북한", + "code": "KP", + "dial_code": "+850", + }, + { + "name": "대한민국", + "code": "KR", + "dial_code": "+82", + }, + { + "name": "Republika e Kosovës", + "code": "XK", + "dial_code": "+383", + }, + { + "name": "الكويت", + "code": "KW", + "dial_code": "+965", + }, + { + "name": "Кыргызстан", + "code": "KG", + "dial_code": "+996", + }, + { + "name": "ສປປລາວ", + "code": "LA", + "dial_code": "+856", + }, + { + "name": "Latvija", + "code": "LV", + "dial_code": "+371", + }, + { + "name": "لبنان", + "code": "LB", + "dial_code": "+961", + }, + { + "name": "Lesotho", + "code": "LS", + "dial_code": "+266", + }, + { + "name": "Liberia", + "code": "LR", + "dial_code": "+231", + }, + { + "name": "‏ليبيا", + "code": "LY", + "dial_code": "+218", + }, + { + "name": "Liechtenstein", + "code": "LI", + "dial_code": "+423", + }, + { + "name": "Lietuva", + "code": "LT", + "dial_code": "+370", + }, + { + "name": "Luxembourg", + "code": "LU", + "dial_code": "+352", + }, + { + "name": "澳門", + "code": "MO", + "dial_code": "+853", + }, + { + "name": "Македонија", + "code": "MK", + "dial_code": "+389", + }, + { + "name": "Madagasikara", + "code": "MG", + "dial_code": "+261", + }, + { + "name": "Malawi", + "code": "MW", + "dial_code": "+265", + }, + { + "name": "Malaysia", + "code": "MY", + "dial_code": "+60", + }, + { + "name": "Maldives", + "code": "MV", + "dial_code": "+960", + }, + { + "name": "Mali", + "code": "ML", + "dial_code": "+223", + }, + { + "name": "Malta", + "code": "MT", + "dial_code": "+356", + }, + { + "name": "M̧ajeļ", + "code": "MH", + "dial_code": "+692", + }, + { + "name": "Martinique", + "code": "MQ", + "dial_code": "+596", + }, + { + "name": "موريتانيا", + "code": "MR", + "dial_code": "+222", + }, + { + "name": "Maurice", + "code": "MU", + "dial_code": "+230", + }, + { + "name": "Mayotte", + "code": "YT", + "dial_code": "+262", + }, + { + "name": "México", + "code": "MX", + "dial_code": "+52", + }, + { + "name": "Micronesia", + "code": "FM", + "dial_code": "+691", + }, + { + "name": "Moldova", + "code": "MD", + "dial_code": "+373", + }, + { + "name": "Monaco", + "code": "MC", + "dial_code": "+377", + }, + { + "name": "Монгол улс", + "code": "MN", + "dial_code": "+976", + }, + { + "name": "Црна Гора", + "code": "ME", + "dial_code": "+382", + }, + { + "name": "Montserrat", + "code": "MS", + "dial_code": "+1664", + }, + { + "name": "المغرب", + "code": "MA", + "dial_code": "+212", + }, + { + "name": "Moçambique", + "code": "MZ", + "dial_code": "+258", + }, + { + "name": "Myanma", + "code": "MM", + "dial_code": "+95", + }, + { + "name": "Namibia", + "code": "NA", + "dial_code": "+264", + }, + { + "name": "Nauru", + "code": "NR", + "dial_code": "+674", + }, + { + "name": "नपल", + "code": "NP", + "dial_code": "+977", + }, + { + "name": "Nederland", + "code": "NL", + "dial_code": "+31", + }, + { + "name": "Netherlands Antilles", + "code": "AN", + "dial_code": "+599", + }, + { + "name": "Nouvelle-Calédonie", + "code": "NC", + "dial_code": "+687", + }, + { + "name": "New Zealand", + "code": "NZ", + "dial_code": "+64", + }, + { + "name": "Nicaragua", + "code": "NI", + "dial_code": "+505", + }, + { + "name": "Niger", + "code": "NE", + "dial_code": "+227", + }, + { + "name": "Nigeria", + "code": "NG", + "dial_code": "+234", + }, + { + "name": "Niuē", + "code": "NU", + "dial_code": "+683", + }, + { + "name": "Norfolk Island", + "code": "NF", + "dial_code": "+672", + }, + { + "name": "Northern Mariana Islands", + "code": "MP", + "dial_code": "+1670", + }, + { + "name": "Norge", + "code": "NO", + "dial_code": "+47", + }, + { + "name": "عمان", + "code": "OM", + "dial_code": "+968", + }, + { + "name": "Pakistan", + "code": "PK", + "dial_code": "+92", + }, + { + "name": "Palau", + "code": "PW", + "dial_code": "+680", + }, + { + "name": "فلسطين", + "code": "PS", + "dial_code": "+970", + }, + { + "name": "Panamá", + "code": "PA", + "dial_code": "+507", + }, + { + "name": "Papua Niugini", + "code": "PG", + "dial_code": "+675", + }, + { + "name": "Paraguay", + "code": "PY", + "dial_code": "+595", + }, + { + "name": "Perú", + "code": "PE", + "dial_code": "+51", + }, + { + "name": "Pilipinas", + "code": "PH", + "dial_code": "+63", + }, + { + "name": "Pitcairn Islands", + "code": "PN", + "dial_code": "+64", + }, + { + "name": "Polska", + "code": "PL", + "dial_code": "+48", + }, + { + "name": "Portugal", + "code": "PT", + "dial_code": "+351", + }, + { + "name": "Puerto Rico", + "code": "PR", + "dial_code": "+1939", + }, + { + "name": "Puerto Rico", + "code": "PR", + "dial_code": "+1787", + }, + { + "name": "قطر", + "code": "QA", + "dial_code": "+974", + }, + { + "name": "România", + "code": "RO", + "dial_code": "+40", + }, + { + "name": "Россия", + "code": "RU", + "dial_code": "+7", + }, + { + "name": "Rwanda", + "code": "RW", + "dial_code": "+250", + }, + { + "name": "La Réunion", + "code": "RE", + "dial_code": "+262", + }, + { + "name": "Saint-Barthélemy", + "code": "BL", + "dial_code": "+590", + }, + { + "name": "Saint Helena", + "code": "SH", + "dial_code": "+290", + }, + { + "name": "Saint Kitts and Nevis", + "code": "KN", + "dial_code": "+1869", + }, + { + "name": "Saint Lucia", + "code": "LC", + "dial_code": "+1758", + }, + { + "name": "Saint-Martin", + "code": "MF", + "dial_code": "+590", + }, + { + "name": "Saint-Pierre-et-Miquelon", + "code": "PM", + "dial_code": "+508", }, - {"name": "Vaticano", "code": "VA", "dial_code": "+379"}, - {"name": "Honduras", "code": "HN", "dial_code": "+504"}, - {"name": "香港", "code": "HK", "dial_code": "+852"}, - {"name": "Magyarország", "code": "HU", "dial_code": "+36"}, - {"name": "Ísland", "code": "IS", "dial_code": "+354"}, - {"name": "भारत", "code": "IN", "dial_code": "+91"}, - {"name": "Indonesia", "code": "ID", "dial_code": "+62"}, - {"name": "ایران", "code": "IR", "dial_code": "+98"}, - {"name": "العراق", "code": "IQ", "dial_code": "+964"}, - {"name": "Éire", "code": "IE", "dial_code": "+353"}, - {"name": "Isle of Man", "code": "IM", "dial_code": "+44"}, - {"name": "יִשְׂרָאֵל", "code": "IL", "dial_code": "+972"}, - {"name": "Italia", "code": "IT", "dial_code": "+39"}, - {"name": "Jamaica", "code": "JM", "dial_code": "+1876"}, - {"name": "日本", "code": "JP", "dial_code": "+81"}, - {"name": "Jersey", "code": "JE", "dial_code": "+44"}, - {"name": "الأردن", "code": "JO", "dial_code": "+962"}, - {"name": "Қазақстан", "code": "KZ", "dial_code": "+7"}, - {"name": "Kenya", "code": "KE", "dial_code": "+254"}, - {"name": "Kiribati", "code": "KI", "dial_code": "+686"}, - {"name": "북한", "code": "KP", "dial_code": "+850"}, - {"name": "대한민국", "code": "KR", "dial_code": "+82"}, - {"name": "Republika e Kosovës", "code": "XK", "dial_code": "+383"}, - {"name": "الكويت", "code": "KW", "dial_code": "+965"}, - {"name": "Кыргызстан", "code": "KG", "dial_code": "+996"}, - {"name": "ສປປລາວ", "code": "LA", "dial_code": "+856"}, - {"name": "Latvija", "code": "LV", "dial_code": "+371"}, - {"name": "لبنان", "code": "LB", "dial_code": "+961"}, - {"name": "Lesotho", "code": "LS", "dial_code": "+266"}, - {"name": "Liberia", "code": "LR", "dial_code": "+231"}, - {"name": "‏ليبيا", "code": "LY", "dial_code": "+218"}, - {"name": "Liechtenstein", "code": "LI", "dial_code": "+423"}, - {"name": "Lietuva", "code": "LT", "dial_code": "+370"}, - {"name": "Luxembourg", "code": "LU", "dial_code": "+352"}, - {"name": "澳門", "code": "MO", "dial_code": "+853"}, - {"name": "Македонија", "code": "MK", "dial_code": "+389"}, - {"name": "Madagasikara", "code": "MG", "dial_code": "+261"}, - {"name": "Malawi", "code": "MW", "dial_code": "+265"}, - {"name": "Malaysia", "code": "MY", "dial_code": "+60"}, - {"name": "Maldives", "code": "MV", "dial_code": "+960"}, - {"name": "Mali", "code": "ML", "dial_code": "+223"}, - {"name": "Malta", "code": "MT", "dial_code": "+356"}, - {"name": "M̧ajeļ", "code": "MH", "dial_code": "+692"}, - {"name": "Martinique", "code": "MQ", "dial_code": "+596"}, - {"name": "موريتانيا", "code": "MR", "dial_code": "+222"}, - {"name": "Maurice", "code": "MU", "dial_code": "+230"}, - {"name": "Mayotte", "code": "YT", "dial_code": "+262"}, - {"name": "México", "code": "MX", "dial_code": "+52"}, - {"name": "Micronesia", "code": "FM", "dial_code": "+691"}, - {"name": "Moldova", "code": "MD", "dial_code": "+373"}, - {"name": "Monaco", "code": "MC", "dial_code": "+377"}, - {"name": "Монгол улс", "code": "MN", "dial_code": "+976"}, - {"name": "Црна Гора", "code": "ME", "dial_code": "+382"}, - {"name": "Montserrat", "code": "MS", "dial_code": "+1664"}, - {"name": "المغرب", "code": "MA", "dial_code": "+212"}, - {"name": "Moçambique", "code": "MZ", "dial_code": "+258"}, - {"name": "Myanma", "code": "MM", "dial_code": "+95"}, - {"name": "Namibia", "code": "NA", "dial_code": "+264"}, - {"name": "Nauru", "code": "NR", "dial_code": "+674"}, - {"name": "नपल", "code": "NP", "dial_code": "+977"}, - {"name": "Nederland", "code": "NL", "dial_code": "+31"}, - {"name": "Netherlands Antilles", "code": "AN", "dial_code": "+599"}, - {"name": "Nouvelle-Calédonie", "code": "NC", "dial_code": "+687"}, - {"name": "New Zealand", "code": "NZ", "dial_code": "+64"}, - {"name": "Nicaragua", "code": "NI", "dial_code": "+505"}, - {"name": "Niger", "code": "NE", "dial_code": "+227"}, - {"name": "Nigeria", "code": "NG", "dial_code": "+234"}, - {"name": "Niuē", "code": "NU", "dial_code": "+683"}, - {"name": "Norfolk Island", "code": "NF", "dial_code": "+672"}, - {"name": "Northern Mariana Islands", "code": "MP", "dial_code": "+1670"}, - {"name": "Norge", "code": "NO", "dial_code": "+47"}, - {"name": "عمان", "code": "OM", "dial_code": "+968"}, - {"name": "Pakistan", "code": "PK", "dial_code": "+92"}, - {"name": "Palau", "code": "PW", "dial_code": "+680"}, - {"name": "فلسطين", "code": "PS", "dial_code": "+970"}, - {"name": "Panamá", "code": "PA", "dial_code": "+507"}, - {"name": "Papua Niugini", "code": "PG", "dial_code": "+675"}, - {"name": "Paraguay", "code": "PY", "dial_code": "+595"}, - {"name": "Perú", "code": "PE", "dial_code": "+51"}, - {"name": "Pilipinas", "code": "PH", "dial_code": "+63"}, - {"name": "Pitcairn Islands", "code": "PN", "dial_code": "+64"}, - {"name": "Polska", "code": "PL", "dial_code": "+48"}, - {"name": "Portugal", "code": "PT", "dial_code": "+351"}, - {"name": "Puerto Rico", "code": "PR", "dial_code": "+1939"}, - {"name": "Puerto Rico", "code": "PR", "dial_code": "+1787"}, - {"name": "قطر", "code": "QA", "dial_code": "+974"}, - {"name": "România", "code": "RO", "dial_code": "+40"}, - {"name": "Россия", "code": "RU", "dial_code": "+7"}, - {"name": "Rwanda", "code": "RW", "dial_code": "+250"}, - {"name": "La Réunion", "code": "RE", "dial_code": "+262"}, - {"name": "Saint-Barthélemy", "code": "BL", "dial_code": "+590"}, - {"name": "Saint Helena", "code": "SH", "dial_code": "+290"}, - {"name": "Saint Kitts and Nevis", "code": "KN", "dial_code": "+1869"}, - {"name": "Saint Lucia", "code": "LC", "dial_code": "+1758"}, - {"name": "Saint-Martin", "code": "MF", "dial_code": "+590"}, - {"name": "Saint-Pierre-et-Miquelon", "code": "PM", "dial_code": "+508"}, { "name": "Saint Vincent and the Grenadines", "code": "VC", - "dial_code": "+1784" + "dial_code": "+1784", + }, + { + "name": "Samoa", + "code": "WS", + "dial_code": "+685", + }, + { + "name": "San Marino", + "code": "SM", + "dial_code": "+378", + }, + { + "name": "São Tomé e Príncipe", + "code": "ST", + "dial_code": "+239", + }, + { + "name": "العربية السعودية", + "code": "SA", + "dial_code": "+966", + }, + { + "name": "Sénégal", + "code": "SN", + "dial_code": "+221", + }, + { + "name": "Србија", + "code": "RS", + "dial_code": "+381", + }, + { + "name": "Seychelles", + "code": "SC", + "dial_code": "+248", + }, + { + "name": "Sierra Leone", + "code": "SL", + "dial_code": "+232", + }, + { + "name": "Singapore", + "code": "SG", + "dial_code": "+65", + }, + { + "name": "Slovensko", + "code": "SK", + "dial_code": "+421", + }, + { + "name": "Slovenija", + "code": "SI", + "dial_code": "+386", + }, + { + "name": "Solomon Islands", + "code": "SB", + "dial_code": "+677", + }, + { + "name": "Soomaaliya", + "code": "SO", + "dial_code": "+252", + }, + { + "name": "South Africa", + "code": "ZA", + "dial_code": "+27", + }, + { + "name": "South Sudan", + "code": "SS", + "dial_code": "+211", + }, + { + "name": "South Georgia", + "code": "GS", + "dial_code": "+500", + }, + { + "name": "España", + "code": "ES", + "dial_code": "+34", + }, + { + "name": "Sri Lanka", + "code": "LK", + "dial_code": "+94", + }, + { + "name": "السودان", + "code": "SD", + "dial_code": "+249", + }, + { + "name": "Suriname", + "code": "SR", + "dial_code": "+597", + }, + { + "name": "Svalbard og Jan Mayen", + "code": "SJ", + "dial_code": "+47", + }, + { + "name": "Swaziland", + "code": "SZ", + "dial_code": "+268", + }, + { + "name": "Sverige", + "code": "SE", + "dial_code": "+46", + }, + { + "name": "Schweiz", + "code": "CH", + "dial_code": "+41", + }, + { + "name": "سوريا", + "code": "SY", + "dial_code": "+963", + }, + { + "name": "臺灣", + "code": "TW", + "dial_code": "+886", + }, + { + "name": "Тоҷикистон", + "code": "TJ", + "dial_code": "+992", + }, + { + "name": "Tanzania", + "code": "TZ", + "dial_code": "+255", + }, + { + "name": "ประเทศไทย", + "code": "TH", + "dial_code": "+66", + }, + { + "name": "Timor-Leste", + "code": "TL", + "dial_code": "+670", + }, + { + "name": "Togo", + "code": "TG", + "dial_code": "+228", + }, + { + "name": "Tokelau", + "code": "TK", + "dial_code": "+690", + }, + { + "name": "Tonga", + "code": "TO", + "dial_code": "+676", + }, + { + "name": "Trinidad and Tobago", + "code": "TT", + "dial_code": "+1868", + }, + { + "name": "تونس", + "code": "TN", + "dial_code": "+216", + }, + { + "name": "Türkiye", + "code": "TR", + "dial_code": "+90", + }, + { + "name": "Türkmenistan", + "code": "TM", + "dial_code": "+993", + }, + { + "name": "Turks and Caicos Islands", + "code": "TC", + "dial_code": "+1649", + }, + { + "name": "Tuvalu", + "code": "TV", + "dial_code": "+688", + }, + { + "name": "Uganda", + "code": "UG", + "dial_code": "+256", + }, + { + "name": "Україна", + "code": "UA", + "dial_code": "+380", + }, + { + "name": "دولة الإمارات العربية المتحدة", + "code": "AE", + "dial_code": "+971", + }, + { + "name": "United Kingdom", + "code": "GB", + "dial_code": "+44", + }, + { + "name": "United States", + "code": "US", + "dial_code": "+1", + }, + { + "name": "Uruguay", + "code": "UY", + "dial_code": "+598", + }, + { + "name": "O‘zbekiston", + "code": "UZ", + "dial_code": "+998", + }, + { + "name": "Vanuatu", + "code": "VU", + "dial_code": "+678", + }, + { + "name": "Venezuela", + "code": "VE", + "dial_code": "+58", + }, + { + "name": "Việt Nam", + "code": "VN", + "dial_code": "+84", + }, + { + "name": "British Virgin Islands", + "code": "VG", + "dial_code": "+1284", + }, + { + "name": "United States Virgin Islands", + "code": "VI", + "dial_code": "+1340", + }, + { + "name": "Wallis et Futuna", + "code": "WF", + "dial_code": "+681", + }, + { + "name": "اليَمَن", + "code": "YE", + "dial_code": "+967", + }, + { + "name": "Zambia", + "code": "ZM", + "dial_code": "+260", + }, + { + "name": "Zimbabwe", + "code": "ZW", + "dial_code": "+263", }, - {"name": "Samoa", "code": "WS", "dial_code": "+685"}, - {"name": "San Marino", "code": "SM", "dial_code": "+378"}, - {"name": "São Tomé e Príncipe", "code": "ST", "dial_code": "+239"}, - {"name": "العربية السعودية", "code": "SA", "dial_code": "+966"}, - {"name": "Sénégal", "code": "SN", "dial_code": "+221"}, - {"name": "Србија", "code": "RS", "dial_code": "+381"}, - {"name": "Seychelles", "code": "SC", "dial_code": "+248"}, - {"name": "Sierra Leone", "code": "SL", "dial_code": "+232"}, - {"name": "Singapore", "code": "SG", "dial_code": "+65"}, - {"name": "Slovensko", "code": "SK", "dial_code": "+421"}, - {"name": "Slovenija", "code": "SI", "dial_code": "+386"}, - {"name": "Solomon Islands", "code": "SB", "dial_code": "+677"}, - {"name": "Soomaaliya", "code": "SO", "dial_code": "+252"}, - {"name": "South Africa", "code": "ZA", "dial_code": "+27"}, - {"name": "South Sudan", "code": "SS", "dial_code": "+211"}, - {"name": "South Georgia", "code": "GS", "dial_code": "+500"}, - {"name": "España", "code": "ES", "dial_code": "+34"}, - {"name": "śrī laṃkāva", "code": "LK", "dial_code": "+94"}, - {"name": "السودان", "code": "SD", "dial_code": "+249"}, - {"name": "Suriname", "code": "SR", "dial_code": "+597"}, - {"name": "Svalbard og Jan Mayen", "code": "SJ", "dial_code": "+47"}, - {"name": "Swaziland", "code": "SZ", "dial_code": "+268"}, - {"name": "Sverige", "code": "SE", "dial_code": "+46"}, - {"name": "Schweiz", "code": "CH", "dial_code": "+41"}, - {"name": "سوريا", "code": "SY", "dial_code": "+963"}, - {"name": "臺灣", "code": "TW", "dial_code": "+886"}, - {"name": "Тоҷикистон", "code": "TJ", "dial_code": "+992"}, - {"name": "Tanzania", "code": "TZ", "dial_code": "+255"}, - {"name": "ประเทศไทย", "code": "TH", "dial_code": "+66"}, - {"name": "Timor-Leste", "code": "TL", "dial_code": "+670"}, - {"name": "Togo", "code": "TG", "dial_code": "+228"}, - {"name": "Tokelau", "code": "TK", "dial_code": "+690"}, - {"name": "Tonga", "code": "TO", "dial_code": "+676"}, - {"name": "Trinidad and Tobago", "code": "TT", "dial_code": "+1868"}, - {"name": "تونس", "code": "TN", "dial_code": "+216"}, - {"name": "Türkiye", "code": "TR", "dial_code": "+90"}, - {"name": "Türkmenistan", "code": "TM", "dial_code": "+993"}, - {"name": "Turks and Caicos Islands", "code": "TC", "dial_code": "+1649"}, - {"name": "Tuvalu", "code": "TV", "dial_code": "+688"}, - {"name": "Uganda", "code": "UG", "dial_code": "+256"}, - {"name": "Україна", "code": "UA", "dial_code": "+380"}, - {"name": "دولة الإمارات العربية المتحدة", "code": "AE", "dial_code": "+971"}, - {"name": "United Kingdom", "code": "GB", "dial_code": "+44"}, - {"name": "United States", "code": "US", "dial_code": "+1"}, - {"name": "Uruguay", "code": "UY", "dial_code": "+598"}, - {"name": "O‘zbekiston", "code": "UZ", "dial_code": "+998"}, - {"name": "Vanuatu", "code": "VU", "dial_code": "+678"}, - {"name": "Venezuela", "code": "VE", "dial_code": "+58"}, - {"name": "Việt Nam", "code": "VN", "dial_code": "+84"}, - {"name": "British Virgin Islands", "code": "VG", "dial_code": "+1284"}, - {"name": "United States Virgin Islands", "code": "VI", "dial_code": "+1340"}, - {"name": "Wallis et Futuna", "code": "WF", "dial_code": "+681"}, - {"name": "اليَمَن", "code": "YE", "dial_code": "+967"}, - {"name": "Zambia", "code": "ZM", "dial_code": "+260"}, - {"name": "Zimbabwe", "code": "ZW", "dial_code": "+263"} ]; diff --git a/lib/country_localizations.dart b/lib/country_localizations.dart new file mode 100644 index 0000000..873735d --- /dev/null +++ b/lib/country_localizations.dart @@ -0,0 +1,63 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class CountryLocalizations { + final Locale locale; + + CountryLocalizations(this.locale); + + static CountryLocalizations of(BuildContext context) { + return Localizations.of( + context, + CountryLocalizations, + ); + } + + static const LocalizationsDelegate delegate = + _CountryLocalizationsDelegate(); + + Map _localizedStrings; + + Future load() async { + print('locale.languageCode: ${locale.languageCode}'); + String jsonString = await rootBundle.loadString( + 'packages/country_code_picker/i18n/${locale.languageCode}.json'); + Map jsonMap = json.decode(jsonString); + + _localizedStrings = jsonMap.map((key, value) { + return MapEntry(key, value.toString()); + }); + + return true; + } + + String translate(String key) { + return _localizedStrings[key]; + } +} + +class _CountryLocalizationsDelegate + extends LocalizationsDelegate { + const _CountryLocalizationsDelegate(); + + @override + bool isSupported(Locale locale) { + return [ + 'en', + 'it', + 'fr', + ].contains(locale.languageCode); + } + + @override + Future load(Locale locale) async { + CountryLocalizations localizations = new CountryLocalizations(locale); + await localizations.load(); + return localizations; + } + + @override + bool shouldReload(_CountryLocalizationsDelegate old) => false; +} diff --git a/lib/i18n/en.json b/lib/i18n/en.json new file mode 100644 index 0000000..bb8a009 --- /dev/null +++ b/lib/i18n/en.json @@ -0,0 +1,252 @@ +{ + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BA": "Bosnia and Herzegovina", + "BB": "Barbados", + "WF": "Wallis and Futuna", + "BL": "Saint Barthelemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BT": "Bhutan", + "JM": "Jamaica", + "BV": "Bouvet Island", + "BW": "Botswana", + "WS": "Samoa", + "BQ": "Bonaire, Saint Eustatius and Saba ", + "BR": "Brazil", + "BS": "Bahamas", + "JE": "Jersey", + "BY": "Belarus", + "BZ": "Belize", + "RU": "Russia", + "RW": "Rwanda", + "RS": "Serbia", + "TL": "East Timor", + "RE": "Reunion", + "TM": "Turkmenistan", + "TJ": "Tajikistan", + "RO": "Romania", + "TK": "Tokelau", + "GW": "Guinea-Bissau", + "GU": "Guam", + "GT": "Guatemala", + "GS": "South Georgia and the South Sandwich Islands", + "GR": "Greece", + "GQ": "Equatorial Guinea", + "GP": "Guadeloupe", + "JP": "Japan", + "GY": "Guyana", + "GG": "Guernsey", + "GF": "French Guiana", + "GE": "Georgia", + "GD": "Grenada", + "GB": "United Kingdom", + "GA": "Gabon", + "SV": "El Salvador", + "GN": "Guinea", + "GM": "Gambia", + "GL": "Greenland", + "GI": "Gibraltar", + "GH": "Ghana", + "OM": "Oman", + "TN": "Tunisia", + "JO": "Jordan", + "HR": "Croatia", + "HT": "Haiti", + "HU": "Hungary", + "HK": "Hong Kong", + "HN": "Honduras", + "HM": "Heard Island and McDonald Islands", + "VE": "Venezuela", + "PR": "Puerto Rico", + "PS": "Palestinian Territory", + "PW": "Palau", + "PT": "Portugal", + "SJ": "Svalbard and Jan Mayen", + "PY": "Paraguay", + "IQ": "Iraq", + "PA": "Panama", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PE": "Peru", + "PK": "Pakistan", + "PH": "Philippines", + "PN": "Pitcairn", + "PL": "Poland", + "PM": "Saint Pierre and Miquelon", + "ZM": "Zambia", + "EH": "Western Sahara", + "EE": "Estonia", + "EG": "Egypt", + "ZA": "South Africa", + "EC": "Ecuador", + "IT": "Italy", + "VN": "Vietnam", + "SB": "Solomon Islands", + "ET": "Ethiopia", + "SO": "Somalia", + "ZW": "Zimbabwe", + "SA": "Saudi Arabia", + "ES": "Spain", + "ER": "Eritrea", + "ME": "Montenegro", + "MD": "Moldova", + "MG": "Madagascar", + "MF": "Saint Martin", + "MA": "Morocco", + "MC": "Monaco", + "UZ": "Uzbekistan", + "MM": "Myanmar", + "ML": "Mali", + "MO": "Macao", + "MN": "Mongolia", + "MH": "Marshall Islands", + "MK": "Macedonia", + "MU": "Mauritius", + "MT": "Malta", + "MW": "Malawi", + "MV": "Maldives", + "MQ": "Martinique", + "MP": "Northern Mariana Islands", + "MS": "Montserrat", + "MR": "Mauritania", + "IM": "Isle of Man", + "UG": "Uganda", + "TZ": "Tanzania", + "MY": "Malaysia", + "MX": "Mexico", + "IL": "Israel", + "FR": "France", + "IO": "British Indian Ocean Territory", + "SH": "Saint Helena", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands", + "FM": "Micronesia", + "FO": "Faroe Islands", + "NI": "Nicaragua", + "NL": "Netherlands", + "NO": "Norway", + "NA": "Namibia", + "VU": "Vanuatu", + "NC": "New Caledonia", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NZ": "New Zealand", + "NP": "Nepal", + "NR": "Nauru", + "NU": "Niue", + "CK": "Cook Islands", + "XK": "Kosovo", + "CI": "Ivory Coast", + "CH": "Switzerland", + "CO": "Colombia", + "CN": "China", + "CM": "Cameroon", + "CL": "Chile", + "CC": "Cocos Islands", + "CA": "Canada", + "CG": "Republic of the Congo", + "CF": "Central African Republic", + "CD": "Democratic Republic of the Congo", + "CZ": "Czech Republic", + "CY": "Cyprus", + "CX": "Christmas Island", + "CR": "Costa Rica", + "CW": "Curacao", + "CV": "Cape Verde", + "CU": "Cuba", + "SZ": "Swaziland", + "SY": "Syria", + "SX": "Sint Maarten", + "KG": "Kyrgyzstan", + "KE": "Kenya", + "SS": "South Sudan", + "SR": "Suriname", + "KI": "Kiribati", + "KH": "Cambodia", + "KN": "Saint Kitts and Nevis", + "KM": "Comoros", + "ST": "Sao Tome and Principe", + "SK": "Slovakia", + "KR": "South Korea", + "SI": "Slovenia", + "KP": "North Korea", + "KW": "Kuwait", + "SN": "Senegal", + "SM": "San Marino", + "SL": "Sierra Leone", + "SC": "Seychelles", + "KZ": "Kazakhstan", + "KY": "Cayman Islands", + "SG": "Singapore", + "SE": "Sweden", + "SD": "Sudan", + "DO": "Dominican Republic", + "DM": "Dominica", + "DJ": "Djibouti", + "DK": "Denmark", + "VG": "British Virgin Islands", + "DE": "Germany", + "YE": "Yemen", + "DZ": "Algeria", + "US": "United States", + "UY": "Uruguay", + "YT": "Mayotte", + "UM": "United States Minor Outlying Islands", + "LB": "Lebanon", + "LC": "Saint Lucia", + "LA": "Laos", + "TV": "Tuvalu", + "TW": "Taiwan", + "TT": "Trinidad and Tobago", + "TR": "Turkey", + "LK": "Sri Lanka", + "LI": "Liechtenstein", + "LV": "Latvia", + "TO": "Tonga", + "LT": "Lithuania", + "LU": "Luxembourg", + "LR": "Liberia", + "LS": "Lesotho", + "TH": "Thailand", + "TF": "French Southern Territories", + "TG": "Togo", + "TD": "Chad", + "TC": "Turks and Caicos Islands", + "LY": "Libya", + "VA": "Vatican", + "VC": "Saint Vincent and the Grenadines", + "AE": "United Arab Emirates", + "AD": "Andorra", + "AG": "Antigua and Barbuda", + "AF": "Afghanistan", + "AI": "Anguilla", + "VI": "U.S. Virgin Islands", + "IS": "Iceland", + "IR": "Iran", + "AM": "Armenia", + "AL": "Albania", + "AO": "Angola", + "AQ": "Antarctica", + "AS": "American Samoa", + "AR": "Argentina", + "AU": "Australia", + "AT": "Austria", + "AW": "Aruba", + "IN": "India", + "AX": "Aland Islands", + "AZ": "Azerbaijan", + "IE": "Ireland", + "ID": "Indonesia", + "UA": "Ukraine", + "QA": "Qatar", + "MZ": "Mozambique" +} \ No newline at end of file diff --git a/lib/i18n/fr.json b/lib/i18n/fr.json new file mode 100644 index 0000000..f5c6cf9 --- /dev/null +++ b/lib/i18n/fr.json @@ -0,0 +1,257 @@ +{ + "AF": "Afghanistan", + "ZA": "Afrique du Sud", + "AL": "Albanie", + "DZ": "Algérie", + "DE": "Allemagne", + "AD": "Andorre", + "AO": "Angola", + "AI": "Anguilla", + "AQ": "Antarctique", + "AG": "Antigua-et-Barbuda", + "SA": "Arabie saoudite", + "AR": "Argentine", + "AM": "Arménie", + "AW": "Aruba", + "AU": "Australie", + "AT": "Autriche", + "AZ": "Azerbaïdjan", + "BS": "Bahamas", + "BH": "Bahreïn", + "BD": "Bangladesh", + "BB": "Barbade", + "BE": "Belgique", + "BZ": "Belize", + "BJ": "Bénin", + "BM": "Bermudes", + "BT": "Bhoutan", + "BY": "Biélorussie", + "BO": "Bolivie", + "BA": "Bosnie-Herzégovine", + "BW": "Botswana", + "BR": "Brésil", + "BN": "Brunéi Darussalam", + "BG": "Bulgarie", + "BF": "Burkina Faso", + "BI": "Burundi", + "KH": "Cambodge", + "CM": "Cameroun", + "CA": "Canada", + "CV": "Cap-Vert", + "EA": "Ceuta et Melilla", + "CL": "Chili", + "CN": "Chine", + "CY": "Chypre", + "CO": "Colombie", + "KM": "Comores", + "CG": "Congo-Brazzaville", + "CD": "Congo-Kinshasa", + "KP": "Corée du Nord", + "KR": "Corée du Sud", + "CR": "Costa Rica", + "CI": "Côte d’Ivoire", + "HR": "Croatie", + "CU": "Cuba", + "CW": "Curaçao", + "DK": "Danemark", + "DG": "Diego Garcia", + "DJ": "Djibouti", + "DM": "Dominique", + "EG": "Égypte", + "AE": "Émirats arabes unis", + "EC": "Équateur", + "ER": "Érythrée", + "ES": "Espagne", + "EE": "Estonie", + "SZ": "Eswatini", + "VA": "État de la Cité du Vatican", + "FM": "États fédérés de Micronésie", + "US": "États-Unis", + "ET": "Éthiopie", + "FJ": "Fidji", + "FI": "Finlande", + "FR": "France", + "GA": "Gabon", + "GM": "Gambie", + "GE": "Géorgie", + "GS": "Géorgie du Sud et îles Sandwich du Sud", + "GH": "Ghana", + "GI": "Gibraltar", + "GR": "Grèce", + "GD": "Grenade", + "GL": "Groenland", + "GP": "Guadeloupe", + "GU": "Guam", + "GT": "Guatemala", + "GG": "Guernesey", + "GN": "Guinée", + "GQ": "Guinée équatoriale", + "GW": "Guinée-Bissau", + "GY": "Guyana", + "GF": "Guyane française", + "HT": "Haïti", + "HN": "Honduras", + "HU": "Hongrie", + "CX": "Île Christmas", + "AC": "Île de l’Ascension", + "IM": "Île de Man", + "NF": "Île Norfolk", + "AX": "Îles Åland", + "KY": "Îles Caïmans", + "IC": "Îles Canaries", + "CC": "Îles Cocos", + "CK": "Îles Cook", + "FO": "Îles Féroé", + "FK": "Îles Malouines", + "MP": "Îles Mariannes du Nord", + "MH": "Îles Marshall", + "UM": "Îles mineures éloignées des États-Unis", + "PN": "Îles Pitcairn", + "SB": "Îles Salomon", + "TC": "Îles Turques-et-Caïques", + "VG": "Îles Vierges britanniques", + "VI": "Îles Vierges des États-Unis", + "IN": "Inde", + "ID": "Indonésie", + "IQ": "Irak", + "IR": "Iran", + "IE": "Irlande", + "IS": "Islande", + "IL": "Israël", + "IT": "Italie", + "JM": "Jamaïque", + "JP": "Japon", + "JE": "Jersey", + "JO": "Jordanie", + "KZ": "Kazakhstan", + "KE": "Kenya", + "KG": "Kirghizistan", + "KI": "Kiribati", + "XK": "Kosovo", + "KW": "Koweït", + "RE": "La Réunion", + "LA": "Laos", + "LS": "Lesotho", + "LV": "Lettonie", + "LB": "Liban", + "LR": "Libéria", + "LY": "Libye", + "LI": "Liechtenstein", + "LT": "Lituanie", + "LU": "Luxembourg", + "MK": "Macédoine", + "MG": "Madagascar", + "MY": "Malaisie", + "MW": "Malawi", + "MV": "Maldives", + "ML": "Mali", + "MT": "Malte", + "MA": "Maroc", + "MQ": "Martinique", + "MU": "Maurice", + "MR": "Mauritanie", + "YT": "Mayotte", + "MX": "Mexique", + "MD": "Moldavie", + "MC": "Monaco", + "MN": "Mongolie", + "ME": "Monténégro", + "MS": "Montserrat", + "MZ": "Mozambique", + "MM": "Myanmar (Birmanie)", + "NA": "Namibie", + "NR": "Nauru", + "NP": "Népal", + "NI": "Nicaragua", + "NE": "Niger", + "NG": "Nigéria", + "NU": "Niue", + "NO": "Norvège", + "NC": "Nouvelle-Calédonie", + "NZ": "Nouvelle-Zélande", + "OM": "Oman", + "UG": "Ouganda", + "UZ": "Ouzbékistan", + "PK": "Pakistan", + "PW": "Palaos", + "PA": "Panama", + "PG": "Papouasie-Nouvelle-Guinée", + "PY": "Paraguay", + "NL": "Pays-Bas", + "BQ": "Pays-Bas caribéens", + "PE": "Pérou", + "PH": "Philippines", + "PL": "Pologne", + "PF": "Polynésie française", + "PR": "Porto Rico", + "PT": "Portugal", + "XA": "pseudo-accents", + "XB": "pseudo-bidi", + "QA": "Qatar", + "HK": "R.A.S. chinoise de Hong Kong", + "MO": "R.A.S. chinoise de Macao", + "CF": "République centrafricaine", + "DO": "République dominicaine", + "RO": "Roumanie", + "GB": "Royaume-Uni", + "RU": "Russie", + "RW": "Rwanda", + "EH": "Sahara occidental", + "BL": "Saint-Barthélemy", + "KN": "Saint-Christophe-et-Niévès", + "SM": "Saint-Marin", + "MF": "Saint-Martin", + "SX": "Saint-Martin (partie néerlandaise)", + "PM": "Saint-Pierre-et-Miquelon", + "VC": "Saint-Vincent-et-les-Grenadines", + "SH": "Sainte-Hélène", + "LC": "Sainte-Lucie", + "SV": "Salvador", + "WS": "Samoa", + "AS": "Samoa américaines", + "ST": "Sao Tomé-et-Principe", + "SN": "Sénégal", + "RS": "Serbie", + "SC": "Seychelles", + "SL": "Sierra Leone", + "SG": "Singapour", + "SK": "Slovaquie", + "SI": "Slovénie", + "SO": "Somalie", + "SD": "Soudan", + "SS": "Soudan du Sud", + "LK": "Sri Lanka", + "SE": "Suède", + "CH": "Suisse", + "SR": "Suriname", + "SJ": "Svalbard et Jan Mayen", + "SY": "Syrie", + "TJ": "Tadjikistan", + "TW": "Taïwan", + "TZ": "Tanzanie", + "TD": "Tchad", + "CZ": "Tchéquie", + "TF": "Terres australes françaises", + "IO": "Territoire britannique de l’océan Indien", + "PS": "Territoires palestiniens", + "TH": "Thaïlande", + "TL": "Timor oriental", + "TG": "Togo", + "TK": "Tokelau", + "TO": "Tonga", + "TT": "Trinité-et-Tobago", + "TA": "Tristan da Cunha", + "TN": "Tunisie", + "TM": "Turkménistan", + "TR": "Turquie", + "TV": "Tuvalu", + "UA": "Ukraine", + "UY": "Uruguay", + "VU": "Vanuatu", + "VE": "Venezuela", + "VN": "Vietnam", + "WF": "Wallis-et-Futuna", + "YE": "Yémen", + "ZM": "Zambie", + "ZW": "Zimbabwe" +} \ No newline at end of file diff --git a/lib/i18n/it.json b/lib/i18n/it.json new file mode 100644 index 0000000..32808cb --- /dev/null +++ b/lib/i18n/it.json @@ -0,0 +1,257 @@ +{ + "AF": "Afghanistan", + "AL": "Albania", + "DZ": "Algeria", + "UM": "Altre isole americane del Pacifico", + "AD": "Andorra", + "AO": "Angola", + "AI": "Anguilla", + "AQ": "Antartide", + "AG": "Antigua e Barbuda", + "SA": "Arabia Saudita", + "AR": "Argentina", + "AM": "Armenia", + "AW": "Aruba", + "AU": "Australia", + "AT": "Austria", + "AZ": "Azerbaigian", + "BS": "Bahamas", + "BH": "Bahrein", + "BD": "Bangladesh", + "BB": "Barbados", + "BE": "Belgio", + "BZ": "Belize", + "BJ": "Benin", + "BM": "Bermuda", + "BT": "Bhutan", + "BY": "Bielorussia", + "BO": "Bolivia", + "BA": "Bosnia ed Erzegovina", + "BW": "Botswana", + "BR": "Brasile", + "BN": "Brunei", + "BG": "Bulgaria", + "BF": "Burkina Faso", + "BI": "Burundi", + "KH": "Cambogia", + "CM": "Camerun", + "CA": "Canada", + "CV": "Capo Verde", + "BQ": "Caraibi olandesi", + "CZ": "Cechia", + "EA": "Ceuta e Melilla", + "TD": "Ciad", + "CL": "Cile", + "CN": "Cina", + "CY": "Cipro", + "VA": "Città del Vaticano", + "CO": "Colombia", + "KM": "Comore", + "CD": "Congo - Kinshasa", + "CG": "Congo-Brazzaville", + "KP": "Corea del Nord", + "KR": "Corea del Sud", + "CI": "Costa d’Avorio", + "CR": "Costa Rica", + "HR": "Croazia", + "CU": "Cuba", + "CW": "Curaçao", + "DK": "Danimarca", + "DG": "Diego Garcia", + "DM": "Dominica", + "EC": "Ecuador", + "EG": "Egitto", + "SV": "El Salvador", + "AE": "Emirati Arabi Uniti", + "ER": "Eritrea", + "EE": "Estonia", + "ET": "Etiopia", + "FJ": "Figi", + "PH": "Filippine", + "FI": "Finlandia", + "FR": "Francia", + "GA": "Gabon", + "GM": "Gambia", + "GE": "Georgia", + "GS": "Georgia del Sud e Sandwich australi", + "DE": "Germania", + "GH": "Ghana", + "JM": "Giamaica", + "JP": "Giappone", + "GI": "Gibilterra", + "DJ": "Gibuti", + "JO": "Giordania", + "GR": "Grecia", + "GD": "Grenada", + "GL": "Groenlandia", + "GP": "Guadalupa", + "GU": "Guam", + "GT": "Guatemala", + "GG": "Guernsey", + "GN": "Guinea", + "GQ": "Guinea Equatoriale", + "GW": "Guinea-Bissau", + "GY": "Guyana", + "GF": "Guyana francese", + "HT": "Haiti", + "HN": "Honduras", + "IN": "India", + "ID": "Indonesia", + "IR": "Iran", + "IQ": "Iraq", + "IE": "Irlanda", + "IS": "Islanda", + "AC": "Isola Ascensione", + "CX": "Isola Christmas", + "IM": "Isola di Man", + "NF": "Isola Norfolk", + "AX": "Isole Åland", + "IC": "Isole Canarie", + "KY": "Isole Cayman", + "CC": "Isole Cocos (Keeling)", + "CK": "Isole Cook", + "FO": "Isole Fær Øer", + "FK": "Isole Falkland", + "MP": "Isole Marianne settentrionali", + "MH": "Isole Marshall", + "PN": "Isole Pitcairn", + "SB": "Isole Salomone", + "TC": "Isole Turks e Caicos", + "VI": "Isole Vergini Americane", + "VG": "Isole Vergini Britanniche", + "IL": "Israele", + "IT": "Italia", + "JE": "Jersey", + "KZ": "Kazakistan", + "KE": "Kenya", + "KG": "Kirghizistan", + "KI": "Kiribati", + "XK": "Kosovo", + "KW": "Kuwait", + "LA": "Laos", + "LS": "Lesotho", + "LV": "Lettonia", + "LB": "Libano", + "LR": "Liberia", + "LY": "Libia", + "LI": "Liechtenstein", + "LT": "Lituania", + "LU": "Lussemburgo", + "MK": "Macedonia del Nord", + "MG": "Madagascar", + "MW": "Malawi", + "MY": "Malaysia", + "MV": "Maldive", + "ML": "Mali", + "MT": "Malta", + "MA": "Marocco", + "MQ": "Martinica", + "MR": "Mauritania", + "MU": "Mauritius", + "YT": "Mayotte", + "MX": "Messico", + "FM": "Micronesia", + "MD": "Moldavia", + "MC": "Monaco", + "MN": "Mongolia", + "ME": "Montenegro", + "MS": "Montserrat", + "MZ": "Mozambico", + "MM": "Myanmar (Birmania)", + "NA": "Namibia", + "NR": "Nauru", + "NP": "Nepal", + "NI": "Nicaragua", + "NE": "Niger", + "NG": "Nigeria", + "NU": "Niue", + "NO": "Norvegia", + "NC": "Nuova Caledonia", + "NZ": "Nuova Zelanda", + "OM": "Oman", + "NL": "Paesi Bassi", + "PK": "Pakistan", + "PW": "Palau", + "PA": "Panamá", + "PG": "Papua Nuova Guinea", + "PY": "Paraguay", + "PE": "Perù", + "PF": "Polinesia francese", + "PL": "Polonia", + "PT": "Portogallo", + "PR": "Portorico", + "XA": "pseudo-accenti", + "XB": "pseudo-bidi", + "QA": "Qatar", + "HK": "RAS di Hong Kong", + "MO": "RAS di Macao", + "GB": "Regno Unito", + "CF": "Repubblica Centrafricana", + "DO": "Repubblica Dominicana", + "RE": "Riunione", + "RO": "Romania", + "RW": "Ruanda", + "RU": "Russia", + "EH": "Sahara occidentale", + "KN": "Saint Kitts e Nevis", + "LC": "Saint Lucia", + "MF": "Saint Martin", + "VC": "Saint Vincent e Grenadine", + "BL": "Saint-Barthélemy", + "PM": "Saint-Pierre e Miquelon", + "WS": "Samoa", + "AS": "Samoa americane", + "SM": "San Marino", + "SH": "Sant’Elena", + "ST": "São Tomé e Príncipe", + "SN": "Senegal", + "RS": "Serbia", + "SC": "Seychelles", + "SL": "Sierra Leone", + "SG": "Singapore", + "SX": "Sint Maarten", + "SY": "Siria", + "SK": "Slovacchia", + "SI": "Slovenia", + "SO": "Somalia", + "ES": "Spagna", + "LK": "Sri Lanka", + "US": "Stati Uniti", + "SS": "Sud Sudan", + "ZA": "Sudafrica", + "SD": "Sudan", + "SR": "Suriname", + "SJ": "Svalbard e Jan Mayen", + "SE": "Svezia", + "CH": "Svizzera", + "SZ": "Swaziland", + "TJ": "Tagikistan", + "TW": "Taiwan", + "TZ": "Tanzania", + "TF": "Terre australi francesi", + "PS": "Territori palestinesi", + "IO": "Territorio britannico dell’Oceano Indiano", + "TH": "Thailandia", + "TL": "Timor Est", + "TG": "Togo", + "TK": "Tokelau", + "TO": "Tonga", + "TT": "Trinidad e Tobago", + "TA": "Tristan da Cunha", + "TN": "Tunisia", + "TR": "Turchia", + "TM": "Turkmenistan", + "TV": "Tuvalu", + "UA": "Ucraina", + "UG": "Uganda", + "HU": "Ungheria", + "UY": "Uruguay", + "UZ": "Uzbekistan", + "VU": "Vanuatu", + "VE": "Venezuela", + "VN": "Vietnam", + "WF": "Wallis e Futuna", + "YE": "Yemen", + "ZM": "Zambia", + "ZW": "Zimbabwe" +} \ No newline at end of file diff --git a/lib/selection_dialog.dart b/lib/selection_dialog.dart index f137089..46cba2e 100644 --- a/lib/selection_dialog.dart +++ b/lib/selection_dialog.dart @@ -13,17 +13,17 @@ class SelectionDialog extends StatefulWidget { /// elements passed as favorite final List favoriteElements; - SelectionDialog(this.elements, this.favoriteElements, { - Key key, - this.showCountryOnly, - this.emptySearchBuilder, - InputDecoration searchDecoration = const InputDecoration(), - this.searchStyle, - this.showFlag - }) : - assert(searchDecoration != null, 'searchDecoration must not be null!'), - this.searchDecoration = searchDecoration.copyWith(prefixIcon: Icon(Icons.search)), - super(key: key); + SelectionDialog(this.elements, this.favoriteElements, + {Key key, + this.showCountryOnly, + this.emptySearchBuilder, + InputDecoration searchDecoration = const InputDecoration(), + this.searchStyle, + this.showFlag}) + : assert(searchDecoration != null, 'searchDecoration must not be null!'), + this.searchDecoration = + searchDecoration.copyWith(prefixIcon: Icon(Icons.search)), + super(key: key); @override State createState() => _SelectionDialogState(); @@ -35,48 +35,51 @@ class _SelectionDialogState extends State { @override Widget build(BuildContext context) => SimpleDialog( - title: Column( - children: [ - TextField( - style: widget.searchStyle, - decoration: widget.searchDecoration, - onChanged: _filterElements, - ), - ], - ), - children: [ - Container( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height, - child: ListView( - children: [ - widget.favoriteElements.isEmpty - ? const DecoratedBox(decoration: BoxDecoration()) - : Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [] - ..addAll(widget.favoriteElements - .map( - (f) => SimpleDialogOption( - child: _buildOption(f), - onPressed: () { - _selectItem(f); - }, - ), - ) - .toList()) - ..add(const Divider())), - ]..addAll(filteredElements.isEmpty - ? [_buildEmptySearchWidget(context)] - : filteredElements.map( + title: Column( + children: [ + TextField( + style: widget.searchStyle, + decoration: widget.searchDecoration, + onChanged: _filterElements, + ), + ], + ), + children: [ + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height * 0.7, + child: ListView( + children: [ + widget.favoriteElements.isEmpty + ? const DecoratedBox(decoration: BoxDecoration()) + : Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ...widget.favoriteElements.map( + (f) => SimpleDialogOption( + child: _buildOption(f), + onPressed: () { + _selectItem(f); + }, + ), + ), + const Divider(), + ], + ), + if (filteredElements.isEmpty) + _buildEmptySearchWidget(context) + else + ...filteredElements.map( (e) => SimpleDialogOption( key: Key(e.toLongString()), child: _buildOption(e), onPressed: () { _selectItem(e); }, - ))) - ) + ), + ), + ], + ), ), ], ); @@ -87,22 +90,23 @@ class _SelectionDialogState extends State { child: Flex( direction: Axis.horizontal, children: [ - widget.showFlag ? Flexible( - child: Padding( - padding: const EdgeInsets.only(right: 16.0), - child: Image.asset( - e.flagUri, - package: 'country_code_picker', - width: 32.0, + if (widget.showFlag) + Flexible( + child: Padding( + padding: const EdgeInsets.only(right: 16.0), + child: Image.asset( + e.flagUri, + package: 'country_code_picker', + width: 32.0, + ), ), ), - ) : Container(), Expanded( flex: 4, child: Text( widget.showCountryOnly - ? e.toCountryStringOnly() - : e.toLongString(), + ? e.toCountryStringOnly(context) + : e.toLongString(context), overflow: TextOverflow.fade, ), ), @@ -116,7 +120,9 @@ class _SelectionDialogState extends State { return widget.emptySearchBuilder(context); } - return Center(child: Text('No Country Found')); + return Center( + child: Text('No country found'), + ); } @override diff --git a/pubspec.yaml b/pubspec.yaml index e496bcd..374219f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,10 +1,10 @@ name: country_code_picker description: A flutter package for showing a country code selector. In addition it gives the possibility to select a list of favorites countries, as well as to search using a simple searchbox -version: 1.2.4 +version: 1.3.0 homepage: https://github.com/Salvatore-Giordano/CountryCodePicker environment: - sdk: ">=1.19.0 <3.0.0" + sdk: ">=2.2.2 <3.0.0" dependencies: flutter: @@ -13,3 +13,6 @@ dependencies: flutter: assets: - flags/ + - packages/country_code_picker/i18n/en.json + - packages/country_code_picker/i18n/it.json + - packages/country_code_picker/i18n/fr.json