diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..73d61cb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,74 @@
+# Created by https://www.toptal.com/developers/gitignore/api/flutter,vscode
+# Edit at https://www.toptal.com/developers/gitignore?templates=flutter,vscode
+
+### Flutter ###
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.fvm/
+.packages
+.pub-cache/
+.pub/
+build/
+lib/generated_plugin_registrant.dart
+
+# Android related
+**/android/**/gradle-wrapper.jar
+**/android/.gradle
+**/android/captures/
+**/android/gradlew
+**/android/gradlew.bat
+**/android/key.properties
+**/android/local.properties
+**/android/**/GeneratedPluginRegistrant.java
+
+# iOS/XCode related
+**/ios/**/*.mode1v3
+**/ios/**/*.mode2v3
+**/ios/**/*.moved-aside
+**/ios/**/*.pbxuser
+**/ios/**/*.perspectivev3
+**/ios/**/*sync/
+**/ios/**/.sconsign.dblite
+**/ios/**/.tags*
+**/ios/**/.vagrant/
+**/ios/**/DerivedData/
+**/ios/**/Icon?
+**/ios/**/Pods/
+**/ios/**/.symlinks/
+**/ios/**/profile
+**/ios/**/xcuserdata
+**/ios/.generated/
+**/ios/Flutter/.last_build_id
+**/ios/Flutter/App.framework
+**/ios/Flutter/Flutter.framework
+**/ios/Flutter/Flutter.podspec
+**/ios/Flutter/Generated.xcconfig
+**/ios/Flutter/app.flx
+**/ios/Flutter/app.zip
+**/ios/Flutter/flutter_assets/
+**/ios/Flutter/flutter_export_environment.sh
+**/ios/ServiceDefinitions.json
+**/ios/Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!**/ios/**/default.mode1v3
+!**/ios/**/default.mode2v3
+!**/ios/**/default.pbxuser
+!**/ios/**/default.perspectivev3
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
+
+### vscode ###
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+*.code-workspace
+
+# Misc.
+.DS_Store
+
+# End of https://www.toptal.com/developers/gitignore/api/flutter,vscode
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..02f58f1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+
+## Getting Started
+
+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/android/app/build.gradle b/android/app/build.gradle
new file mode 100644
index 0000000..1c91652
--- /dev/null
+++ b/android/app/build.gradle
@@ -0,0 +1,93 @@
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterRoot = localProperties.getProperty('flutter.sdk')
+if (flutterRoot == null) {
+ throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+def keystoreProperties = new Properties()
+def keystorePropertiesFile = rootProject.file('key.properties')
+if (keystorePropertiesFile.exists()) {
+ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+}
+
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
+
+
+android {
+ compileSdkVersion 29
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
+
+ lintOptions {
+ disable 'InvalidPackage'
+ checkReleaseBuilds false
+ }
+
+ defaultConfig {
+ applicationId "com.huynh.listar_flutter"
+ minSdkVersion 21
+ targetSdkVersion 28
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ multiDexEnabled true
+ }
+
+// signingConfigs {
+// release {
+// keyAlias keystoreProperties['keyAlias']
+// keyPassword keystoreProperties['keyPassword']
+// storeFile file(keystoreProperties['storeFile']?keystoreProperties['storeFile']:'')
+// storePassword keystoreProperties['storePassword']
+// }
+// }
+
+ buildTypes {
+// release {
+// signingConfig signingConfigs.release
+// }
+ debug {
+ signingConfig signingConfigs.debug
+ }
+// signingConfig signingConfigs.debug
+//
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+apply plugin: 'com.android.application'
+
+dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'com.google.firebase:firebase-analytics:17.2.1'
+ 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'
+
+}
+
+apply plugin: 'com.google.gms.google-services'
diff --git a/android/app/google-services.json b/android/app/google-services.json
new file mode 100644
index 0000000..a160a91
--- /dev/null
+++ b/android/app/google-services.json
@@ -0,0 +1,47 @@
+{
+ "project_info": {
+ "project_number": "254789615258",
+ "firebase_url": "https://listarflutter.firebaseio.com",
+ "project_id": "listarflutter",
+ "storage_bucket": "listarflutter.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:254789615258:android:d186e35569214101f8a923",
+ "android_client_info": {
+ "package_name": "com.huynh.listar_flutter"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "254789615258-p9n1rlm99m0jb4jk4pc5ftnupbcd13i2.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyC9garNK6h2IGgZ74ocFXHVXLknC9bUCws"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "254789615258-p9n1rlm99m0jb4jk4pc5ftnupbcd13i2.apps.googleusercontent.com",
+ "client_type": 3
+ },
+ {
+ "client_id": "254789615258-qbpjmknq1u9473imrnnh2chlbcs6i2b1.apps.googleusercontent.com",
+ "client_type": 2,
+ "ios_info": {
+ "bundle_id": "com.huynh.listarFlutter"
+ }
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..22fbccc
--- /dev/null
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..fd7c4fb
--- /dev/null
+++ b/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/kotlin/com/huynh/listar_flutter/MainActivity.kt b/android/app/src/main/kotlin/com/huynh/listar_flutter/MainActivity.kt
new file mode 100644
index 0000000..efbb449
--- /dev/null
+++ b/android/app/src/main/kotlin/com/huynh/listar_flutter/MainActivity.kt
@@ -0,0 +1,12 @@
+package com.huynh.listar_flutter
+
+import android.os.Bundle
+
+import io.flutter.app.FlutterActivity
+import io.flutter.plugins.GeneratedPluginRegistrant
+
+class MainActivity: FlutterActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
+}
diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..304732f
--- /dev/null
+++ b/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/logo.png b/android/app/src/main/res/drawable/logo.png
new file mode 100644
index 0000000..5b57585
Binary files /dev/null and b/android/app/src/main/res/drawable/logo.png differ
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..3588730
Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..7e6c11c
Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..6a750cf
Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..7d257e5
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..2db4362
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..83de459
--- /dev/null
+++ b/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,13 @@
+
+ Mahaas Sports
+
+
+ 430258564493822
+ fb430258564493822
+
+
+ AIzaSyDSNYVC-8DU9BTcyqkeN9c5pgVhwOBAvGg
+
+
+ ca-app-pub-7432665165146018~2664444130
+
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..3d1e88d
--- /dev/null
+++ b/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,19 @@
+
+
+ #2eb0fe
+
+
+
+
+
diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..22fbccc
--- /dev/null
+++ b/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 0000000..7d9dd06
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,32 @@
+buildscript {
+ ext.kotlin_version = '1.3.50'
+ repositories {
+ google()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:4.0.1'
+ classpath 'com.google.gms:google-services:4.3.3'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/android/gradle.properties b/android/gradle.properties
new file mode 100644
index 0000000..a5965ab
--- /dev/null
+++ b/android/gradle.properties
@@ -0,0 +1,4 @@
+org.gradle.jvmargs=-Xmx1536M
+android.enableR8=true
+android.useAndroidX=true
+android.enableJetifier=true
\ No newline at end of file
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e4994ef
--- /dev/null
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Sun Dec 08 21:46:38 ICT 2019
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.4-all.zip
diff --git a/android/keystore.jks b/android/keystore.jks
new file mode 100644
index 0000000..b9c6aa9
Binary files /dev/null and b/android/keystore.jks differ
diff --git a/android/settings.gradle b/android/settings.gradle
new file mode 100644
index 0000000..5a2f14f
--- /dev/null
+++ b/android/settings.gradle
@@ -0,0 +1,15 @@
+include ':app'
+
+def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
+
+def plugins = new Properties()
+def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
+if (pluginsFile.exists()) {
+ pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
+}
+
+plugins.each { name, path ->
+ def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
+ include ":$name"
+ project(":$name").projectDir = pluginDirectory
+}
diff --git a/android/settings_aar.gradle b/android/settings_aar.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/android/settings_aar.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/assets/data/home.json b/assets/data/home.json
new file mode 100644
index 0000000..e76f645
--- /dev/null
+++ b/assets/data/home.json
@@ -0,0 +1,78 @@
+{
+ "success": true,
+ "data": {
+ "banner": [
+ {
+ "id": 1,
+ "image": "assets/images/hurricane-banner.jpg"
+ },
+ {
+ "id": 2,
+ "image": "assets/images/storm-banner.jpg"
+ },
+ {
+ "id": 3,
+ "image": "assets/images/tornado-banner.jpg"
+ }
+ ],
+ "category": [
+ {
+ "id": 1,
+ "title": "Storm Tracking",
+ "icon": "shopping_basket",
+ "color": "#ff8a65",
+ "type": "shop"
+ },
+ {
+ "id": 2,
+ "title": "Personal Safety",
+ "icon": "local_drink",
+ "color": "#5d6d7e",
+ "type": "drink"
+ },
+ {
+ "id": 3,
+ "title": "Personal Risk",
+ "icon": "event_available",
+ "color": "#a569bd",
+ "type": "event"
+ },
+ {
+ "id": 4,
+ "title": "Property Safety",
+ "icon": "all_inclusive",
+ "color": "#5dade2",
+ "type": "estate"
+ },
+ {
+ "id": 5,
+ "title": "Property Risk",
+ "icon": "card_travel",
+ "color": "#4a90a4",
+ "type": "job"
+ },
+ {
+ "id": 6,
+ "title": "Supplies",
+ "icon": "restaurant",
+ "color": "#58d68d",
+ "type": "restaurant"
+ },
+ {
+ "id": 7,
+ "title": "Evacuation",
+ "icon": "directions_car",
+ "color": "#fdc60a",
+ "type": "automotive"
+ },
+ {
+ "id": 8,
+ "title": "Stay in Touch",
+ "icon": "hotel",
+ "color": "#ff8a65",
+ "type": "hotel"
+ }
+ ]
+ },
+ "message": "get data success"
+}
\ No newline at end of file
diff --git a/assets/data/location.json b/assets/data/location.json
new file mode 100644
index 0000000..8213b7f
--- /dev/null
+++ b/assets/data/location.json
@@ -0,0 +1,38 @@
+{
+ "success": true,
+ "data": {
+ "location": [
+ {
+ "id": 1,
+ "name": "Bridgeport",
+ "lat": 37.774929,
+ "long": -122.419418
+ },
+ {
+ "id": 2,
+ "name": "Milford",
+ "lat": 37.774929,
+ "long": -122.419418
+ },
+ {
+ "id": 3,
+ "name": "New Haven",
+ "lat": 37.774929,
+ "long": -122.419418
+ },
+ {
+ "id": 4,
+ "name": "New London",
+ "lat": 37.774929,
+ "long": -122.419418
+ },
+ {
+ "id": 5,
+ "name": "Norwalk",
+ "lat": 37.774929,
+ "long": -122.419418
+ }
+ ]
+ },
+ "message": "get data success"
+}
\ No newline at end of file
diff --git a/assets/fonts/Merriweather-Black.ttf b/assets/fonts/Merriweather-Black.ttf
new file mode 100644
index 0000000..555f892
Binary files /dev/null and b/assets/fonts/Merriweather-Black.ttf differ
diff --git a/assets/fonts/Merriweather-BlackItalic.ttf b/assets/fonts/Merriweather-BlackItalic.ttf
new file mode 100644
index 0000000..01ab074
Binary files /dev/null and b/assets/fonts/Merriweather-BlackItalic.ttf differ
diff --git a/assets/fonts/Merriweather-Bold.ttf b/assets/fonts/Merriweather-Bold.ttf
new file mode 100644
index 0000000..c6374c0
Binary files /dev/null and b/assets/fonts/Merriweather-Bold.ttf differ
diff --git a/assets/fonts/Merriweather-BoldItalic.ttf b/assets/fonts/Merriweather-BoldItalic.ttf
new file mode 100644
index 0000000..b2e7663
Binary files /dev/null and b/assets/fonts/Merriweather-BoldItalic.ttf differ
diff --git a/assets/fonts/Merriweather-Italic.ttf b/assets/fonts/Merriweather-Italic.ttf
new file mode 100644
index 0000000..179acf3
Binary files /dev/null and b/assets/fonts/Merriweather-Italic.ttf differ
diff --git a/assets/fonts/Merriweather-Light.ttf b/assets/fonts/Merriweather-Light.ttf
new file mode 100644
index 0000000..843b8a8
Binary files /dev/null and b/assets/fonts/Merriweather-Light.ttf differ
diff --git a/assets/fonts/Merriweather-LightItalic.ttf b/assets/fonts/Merriweather-LightItalic.ttf
new file mode 100644
index 0000000..16ea25e
Binary files /dev/null and b/assets/fonts/Merriweather-LightItalic.ttf differ
diff --git a/assets/fonts/Merriweather-Regular.ttf b/assets/fonts/Merriweather-Regular.ttf
new file mode 100644
index 0000000..18da9e5
Binary files /dev/null and b/assets/fonts/Merriweather-Regular.ttf differ
diff --git a/assets/fonts/Raleway-Black.ttf b/assets/fonts/Raleway-Black.ttf
new file mode 100644
index 0000000..fa0be3b
Binary files /dev/null and b/assets/fonts/Raleway-Black.ttf differ
diff --git a/assets/fonts/Raleway-BlackItalic.ttf b/assets/fonts/Raleway-BlackItalic.ttf
new file mode 100644
index 0000000..f879014
Binary files /dev/null and b/assets/fonts/Raleway-BlackItalic.ttf differ
diff --git a/assets/fonts/Raleway-Bold.ttf b/assets/fonts/Raleway-Bold.ttf
new file mode 100644
index 0000000..156d4a1
Binary files /dev/null and b/assets/fonts/Raleway-Bold.ttf differ
diff --git a/assets/fonts/Raleway-BoldItalic.ttf b/assets/fonts/Raleway-BoldItalic.ttf
new file mode 100644
index 0000000..d2db573
Binary files /dev/null and b/assets/fonts/Raleway-BoldItalic.ttf differ
diff --git a/assets/fonts/Raleway-ExtraBold.ttf b/assets/fonts/Raleway-ExtraBold.ttf
new file mode 100644
index 0000000..045f204
Binary files /dev/null and b/assets/fonts/Raleway-ExtraBold.ttf differ
diff --git a/assets/fonts/Raleway-ExtraBoldItalic.ttf b/assets/fonts/Raleway-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..6780461
Binary files /dev/null and b/assets/fonts/Raleway-ExtraBoldItalic.ttf differ
diff --git a/assets/fonts/Raleway-ExtraLight.ttf b/assets/fonts/Raleway-ExtraLight.ttf
new file mode 100644
index 0000000..aa11269
Binary files /dev/null and b/assets/fonts/Raleway-ExtraLight.ttf differ
diff --git a/assets/fonts/Raleway-ExtraLightItalic.ttf b/assets/fonts/Raleway-ExtraLightItalic.ttf
new file mode 100644
index 0000000..0e7581b
Binary files /dev/null and b/assets/fonts/Raleway-ExtraLightItalic.ttf differ
diff --git a/assets/fonts/Raleway-Italic.ttf b/assets/fonts/Raleway-Italic.ttf
new file mode 100644
index 0000000..a0157a5
Binary files /dev/null and b/assets/fonts/Raleway-Italic.ttf differ
diff --git a/assets/fonts/Raleway-Light.ttf b/assets/fonts/Raleway-Light.ttf
new file mode 100644
index 0000000..b5ec486
Binary files /dev/null and b/assets/fonts/Raleway-Light.ttf differ
diff --git a/assets/fonts/Raleway-LightItalic.ttf b/assets/fonts/Raleway-LightItalic.ttf
new file mode 100644
index 0000000..f844efb
Binary files /dev/null and b/assets/fonts/Raleway-LightItalic.ttf differ
diff --git a/assets/fonts/Raleway-Medium.ttf b/assets/fonts/Raleway-Medium.ttf
new file mode 100644
index 0000000..070ac76
Binary files /dev/null and b/assets/fonts/Raleway-Medium.ttf differ
diff --git a/assets/fonts/Raleway-MediumItalic.ttf b/assets/fonts/Raleway-MediumItalic.ttf
new file mode 100644
index 0000000..bd61842
Binary files /dev/null and b/assets/fonts/Raleway-MediumItalic.ttf differ
diff --git a/assets/fonts/Raleway-Regular.ttf b/assets/fonts/Raleway-Regular.ttf
new file mode 100644
index 0000000..746c242
Binary files /dev/null and b/assets/fonts/Raleway-Regular.ttf differ
diff --git a/assets/fonts/Raleway-SemiBold.ttf b/assets/fonts/Raleway-SemiBold.ttf
new file mode 100644
index 0000000..34db420
Binary files /dev/null and b/assets/fonts/Raleway-SemiBold.ttf differ
diff --git a/assets/fonts/Raleway-SemiBoldItalic.ttf b/assets/fonts/Raleway-SemiBoldItalic.ttf
new file mode 100644
index 0000000..ade9ca6
Binary files /dev/null and b/assets/fonts/Raleway-SemiBoldItalic.ttf differ
diff --git a/assets/fonts/Raleway-Thin.ttf b/assets/fonts/Raleway-Thin.ttf
new file mode 100644
index 0000000..f623aba
Binary files /dev/null and b/assets/fonts/Raleway-Thin.ttf differ
diff --git a/assets/fonts/Raleway-ThinItalic.ttf b/assets/fonts/Raleway-ThinItalic.ttf
new file mode 100644
index 0000000..6abf43e
Binary files /dev/null and b/assets/fonts/Raleway-ThinItalic.ttf differ
diff --git a/assets/fonts/Roboto-Black.ttf b/assets/fonts/Roboto-Black.ttf
new file mode 100644
index 0000000..2d45238
Binary files /dev/null and b/assets/fonts/Roboto-Black.ttf differ
diff --git a/assets/fonts/Roboto-BlackItalic.ttf b/assets/fonts/Roboto-BlackItalic.ttf
new file mode 100644
index 0000000..29a4359
Binary files /dev/null and b/assets/fonts/Roboto-BlackItalic.ttf differ
diff --git a/assets/fonts/Roboto-Bold.ttf b/assets/fonts/Roboto-Bold.ttf
new file mode 100644
index 0000000..d998cf5
Binary files /dev/null and b/assets/fonts/Roboto-Bold.ttf differ
diff --git a/assets/fonts/Roboto-BoldItalic.ttf b/assets/fonts/Roboto-BoldItalic.ttf
new file mode 100644
index 0000000..b4e2210
Binary files /dev/null and b/assets/fonts/Roboto-BoldItalic.ttf differ
diff --git a/assets/fonts/Roboto-Italic.ttf b/assets/fonts/Roboto-Italic.ttf
new file mode 100644
index 0000000..5b390ff
Binary files /dev/null and b/assets/fonts/Roboto-Italic.ttf differ
diff --git a/assets/fonts/Roboto-Light.ttf b/assets/fonts/Roboto-Light.ttf
new file mode 100644
index 0000000..3526798
Binary files /dev/null and b/assets/fonts/Roboto-Light.ttf differ
diff --git a/assets/fonts/Roboto-LightItalic.ttf b/assets/fonts/Roboto-LightItalic.ttf
new file mode 100644
index 0000000..46e9bf7
Binary files /dev/null and b/assets/fonts/Roboto-LightItalic.ttf differ
diff --git a/assets/fonts/Roboto-Medium.ttf b/assets/fonts/Roboto-Medium.ttf
new file mode 100644
index 0000000..f714a51
Binary files /dev/null and b/assets/fonts/Roboto-Medium.ttf differ
diff --git a/assets/fonts/Roboto-MediumItalic.ttf b/assets/fonts/Roboto-MediumItalic.ttf
new file mode 100644
index 0000000..5dc6a2d
Binary files /dev/null and b/assets/fonts/Roboto-MediumItalic.ttf differ
diff --git a/assets/fonts/Roboto-Regular.ttf b/assets/fonts/Roboto-Regular.ttf
new file mode 100644
index 0000000..2b6392f
Binary files /dev/null and b/assets/fonts/Roboto-Regular.ttf differ
diff --git a/assets/fonts/Roboto-Thin.ttf b/assets/fonts/Roboto-Thin.ttf
new file mode 100644
index 0000000..4e797cf
Binary files /dev/null and b/assets/fonts/Roboto-Thin.ttf differ
diff --git a/assets/fonts/Roboto-ThinItalic.ttf b/assets/fonts/Roboto-ThinItalic.ttf
new file mode 100644
index 0000000..eea836f
Binary files /dev/null and b/assets/fonts/Roboto-ThinItalic.ttf differ
diff --git a/assets/images/beach.png b/assets/images/beach.png
new file mode 100644
index 0000000..2f950b0
Binary files /dev/null and b/assets/images/beach.png differ
diff --git a/assets/images/boat.png b/assets/images/boat.png
new file mode 100644
index 0000000..16f1b3a
Binary files /dev/null and b/assets/images/boat.png differ
diff --git a/assets/images/burger.png b/assets/images/burger.png
new file mode 100644
index 0000000..074056d
Binary files /dev/null and b/assets/images/burger.png differ
diff --git a/assets/images/care.png b/assets/images/care.png
new file mode 100644
index 0000000..598b338
Binary files /dev/null and b/assets/images/care.png differ
diff --git a/assets/images/category-4.jpg b/assets/images/category-4.jpg
new file mode 100755
index 0000000..19dd266
Binary files /dev/null and b/assets/images/category-4.jpg differ
diff --git a/assets/images/ct-alert.png b/assets/images/ct-alert.png
new file mode 100644
index 0000000..63aade2
Binary files /dev/null and b/assets/images/ct-alert.png differ
diff --git a/assets/images/ct-map.png b/assets/images/ct-map.png
new file mode 100644
index 0000000..137bad6
Binary files /dev/null and b/assets/images/ct-map.png differ
diff --git a/assets/images/dashboard.png b/assets/images/dashboard.png
new file mode 100644
index 0000000..6272d9f
Binary files /dev/null and b/assets/images/dashboard.png differ
diff --git a/assets/images/documents.png b/assets/images/documents.png
new file mode 100644
index 0000000..fe563a5
Binary files /dev/null and b/assets/images/documents.png differ
diff --git a/assets/images/drainage.png b/assets/images/drainage.png
new file mode 100644
index 0000000..3857884
Binary files /dev/null and b/assets/images/drainage.png differ
diff --git a/assets/images/emergency-service.png b/assets/images/emergency-service.png
new file mode 100644
index 0000000..35315dc
Binary files /dev/null and b/assets/images/emergency-service.png differ
diff --git a/assets/images/emergency.png b/assets/images/emergency.png
new file mode 100644
index 0000000..b736fdc
Binary files /dev/null and b/assets/images/emergency.png differ
diff --git a/assets/images/flood-zone.png b/assets/images/flood-zone.png
new file mode 100644
index 0000000..06f72d9
Binary files /dev/null and b/assets/images/flood-zone.png differ
diff --git a/assets/images/food.png b/assets/images/food.png
new file mode 100644
index 0000000..e73f994
Binary files /dev/null and b/assets/images/food.png differ
diff --git a/assets/images/green-check.png b/assets/images/green-check.png
new file mode 100644
index 0000000..0300d5c
Binary files /dev/null and b/assets/images/green-check.png differ
diff --git a/assets/images/home-flooding.png b/assets/images/home-flooding.png
new file mode 100644
index 0000000..5dadd22
Binary files /dev/null and b/assets/images/home-flooding.png differ
diff --git a/assets/images/house.png b/assets/images/house.png
new file mode 100644
index 0000000..e915dd0
Binary files /dev/null and b/assets/images/house.png differ
diff --git a/assets/images/hurricane-banner.jpg b/assets/images/hurricane-banner.jpg
new file mode 100644
index 0000000..e2b4075
Binary files /dev/null and b/assets/images/hurricane-banner.jpg differ
diff --git a/assets/images/logo.png b/assets/images/logo.png
new file mode 100644
index 0000000..59a42e4
Binary files /dev/null and b/assets/images/logo.png differ
diff --git a/assets/images/map.png b/assets/images/map.png
new file mode 100644
index 0000000..2c68a2b
Binary files /dev/null and b/assets/images/map.png differ
diff --git a/assets/images/medical.png b/assets/images/medical.png
new file mode 100644
index 0000000..73dd809
Binary files /dev/null and b/assets/images/medical.png differ
diff --git a/assets/images/nhc.png b/assets/images/nhc.png
new file mode 100644
index 0000000..8b40345
Binary files /dev/null and b/assets/images/nhc.png differ
diff --git a/assets/images/phone.png b/assets/images/phone.png
new file mode 100644
index 0000000..a00457d
Binary files /dev/null and b/assets/images/phone.png differ
diff --git a/assets/images/police.png b/assets/images/police.png
new file mode 100644
index 0000000..eebc490
Binary files /dev/null and b/assets/images/police.png differ
diff --git a/assets/images/power.png b/assets/images/power.png
new file mode 100644
index 0000000..ce499f4
Binary files /dev/null and b/assets/images/power.png differ
diff --git a/assets/images/property-risk.png b/assets/images/property-risk.png
new file mode 100644
index 0000000..bf4ebf8
Binary files /dev/null and b/assets/images/property-risk.png differ
diff --git a/assets/images/report.png b/assets/images/report.png
new file mode 100644
index 0000000..2108601
Binary files /dev/null and b/assets/images/report.png differ
diff --git a/assets/images/resources.png b/assets/images/resources.png
new file mode 100644
index 0000000..67bae51
Binary files /dev/null and b/assets/images/resources.png differ
diff --git a/assets/images/safety.png b/assets/images/safety.png
new file mode 100644
index 0000000..ddeb86c
Binary files /dev/null and b/assets/images/safety.png differ
diff --git a/assets/images/social_media.png b/assets/images/social_media.png
new file mode 100644
index 0000000..a284218
Binary files /dev/null and b/assets/images/social_media.png differ
diff --git a/assets/images/storm-banner.jpg b/assets/images/storm-banner.jpg
new file mode 100644
index 0000000..f9b21d1
Binary files /dev/null and b/assets/images/storm-banner.jpg differ
diff --git a/assets/images/storm.png b/assets/images/storm.png
new file mode 100644
index 0000000..70f5aa3
Binary files /dev/null and b/assets/images/storm.png differ
diff --git a/assets/images/structure.png b/assets/images/structure.png
new file mode 100644
index 0000000..e764558
Binary files /dev/null and b/assets/images/structure.png differ
diff --git a/assets/images/tools.png b/assets/images/tools.png
new file mode 100644
index 0000000..131f843
Binary files /dev/null and b/assets/images/tools.png differ
diff --git a/assets/images/tornado-banner.jpg b/assets/images/tornado-banner.jpg
new file mode 100644
index 0000000..761e711
Binary files /dev/null and b/assets/images/tornado-banner.jpg differ
diff --git a/assets/images/tv.png b/assets/images/tv.png
new file mode 100644
index 0000000..f6d5f8b
Binary files /dev/null and b/assets/images/tv.png differ
diff --git a/assets/images/water.png b/assets/images/water.png
new file mode 100644
index 0000000..f32ac32
Binary files /dev/null and b/assets/images/water.png differ
diff --git a/assets/locale/ar.json b/assets/locale/ar.json
new file mode 100644
index 0000000..9915eca
--- /dev/null
+++ b/assets/locale/ar.json
@@ -0,0 +1,132 @@
+{
+ "home": "الصفحة الرئيسية",
+ "wish_list": "قائمة الرغبات",
+ "message": "الرسائل",
+ "notification": "تنبيه",
+ "account": "الحساب",
+ "change_language": "تغيير اللغة",
+ "dynamic_theme": "هاتف النظام",
+ "always_on": "دائما متاح",
+ "always_off": "دائما خارج",
+ "about_us": "معلومات عنا",
+ "who_we_are": "من نحن ؟",
+ "what_we_do": "الذي نفعله ؟",
+ "meet_our_team": "التق بفريقنا",
+ "category": "الفئة",
+ "search": "بحث ...",
+ "category_not_found": "لم يتم العثور على الفئة",
+ "password": "كلمه السر",
+ "change_password": "تغيير كلمة المرور",
+ "input_your_password": "أدخل كلمة المرور الخاصة بك",
+ "confirm_password": "تأكيد كلمة المرور",
+ "confirm_your_password": "أكد رقمك السري",
+ "confirm": "تؤكد",
+ "type_something": "اطبع شيئا...",
+ "location": "موقعك",
+ "apply": "تطبيق",
+ "contact_us": "اتصل بنا",
+ "send": "إرسال",
+ "name": "اسم",
+ "input_name": "أدخل اسمك",
+ "email": "البريد الإلكتروني",
+ "input_email": "أدخل بريدك الإلكتروني",
+ "information": "معلومات",
+ "input_information": "أدخل معلوماتك",
+ "value_not_empty": "الإدخال ليس فارغًا",
+ "value_not_valid_range": "الإدخال ليس نطاقًا صالحًا",
+ "value_not_valid_email": "الإدخال غير صالح",
+ "value_not_valid_phone": "الإدخال غير صالح",
+ "value_not_valid_password": "الإدخال غير صالح لكلمة المرور",
+ "value_not_valid_id": "الإدخال غير صالح",
+ "edit_profile": "تعديل الملف الشخصي",
+ "address": "عنوان",
+ "input_address": "أدخل عنوانك",
+ "website": "موقع الكتروني",
+ "input_website": "أدخل موقع الويب الخاص بك",
+ "feedback": "ردود الفعل",
+ "replay": "إعادة",
+ "tap_rate": "انقر على نجمة للتقييم",
+ "title": "عنوان",
+ "input_title": "أدخل عنوانك",
+ "description": "وصف",
+ "input_feedback": "أدخل تعليقاتك",
+ "filter": "منقي",
+ "facilities": "مرافق",
+ "area": "منطقة",
+ "select_location": "اختر موقعا",
+ "price_range": "نطاق السعر",
+ "avg_price": "متوسط السعر",
+ "business_color": "لون الأعمال",
+ "open_time": "وقت متاح",
+ "start_time": "وقت البدء",
+ "end_time": "وقت النهاية",
+ "rating": "تقييم",
+ "font": "الخط",
+ "forgot_password": "هل نسيت كلمة المرور",
+ "reset_password": "إعادة تعيين كلمة المرور",
+ "search_location": "موقع البحث",
+ "more": "أكثر",
+ "popular_location": "موقع شعبي",
+ "let_find_interesting": "دعنا نكتشف الأشياء الأكثر إثارة للاهتمام",
+ "recent_location": "الموقع الأخير",
+ "what_happen": "ماذا يمكن أن يحدث",
+ "shopping": "التسوق",
+ "shopping_intro": "العلامات التجارية المفضلة والاتجاهات الأكثر سخونة.",
+ "payment": "دفع",
+ "payment_intro": "شريكك الاستراتيجي عبر الإنترنت.",
+ "location_intro": "الموقع ، المجتمع ، جودة المعيشة. يبدأ هنا!",
+ "lasted_post": "مشاركة مشاركة",
+ "oldest_post": "أقدم وظيفة",
+ "most_view": "معظم المشاهدات",
+ "review_rating": "تقييم المراجعة",
+ "delete": "حذف",
+ "image": "صورة",
+ "phone": "هاتف",
+ "date_established": "تحدد الموعد",
+ "featured": "متميز",
+ "nearly": "تقريبا",
+ "related": "ذات صلة",
+ "profile": "الملف الشخصي",
+ "sign_in": "تسجيل الدخول",
+ "sign_out": "خروج",
+ "setting": "ضبط",
+ "review": "المراجعات",
+ "write": "كتابة",
+ "out_of": "بعيدا عن المكان",
+ "loading": "جار التحميل...",
+ "search_title": "بحث",
+ "search_history": "سجل البحث",
+ "discover_more": "إكتشف أكثر",
+ "recently_viewed": "شوهدت مؤخرا",
+ "clear": "واضح",
+ "language": "لغة",
+ "theme": "موضوع",
+ "dark_mode": "الوضع الداكن",
+ "version": "الإصدار",
+ "post": "بريد",
+ "follower": "تابع",
+ "sign_up": "سجل",
+ "input_id": "أدخل حسابك",
+ "default": "إفتراضي",
+ "brown": "بنى",
+ "pink": "زهري",
+ "orange": "البرتقالي",
+ "green": "أخضر",
+ "monday": "يوم الاثنين",
+ "tuesday": "الثلاثاء",
+ "wednesday": "الأربعاء",
+ "thursday": "الخميس",
+ "friday": "يوم الجمعة",
+ "saturday": "يوم السبت",
+ "sunday": "الأحد",
+ "day_off": "يوم عطلة",
+ "close": "قريب",
+ "pull_down_refresh": "سحب التحديث لأسفل",
+ "refreshing": "منعش...",
+ "refresh_completed": "اكتمل التحديث",
+ "release_to_refresh": "حرر للتحديث",
+ "release_to_load_more": "حرر لتحميل المزيد",
+ "pull_to_load_more": "اسحب لتحميل المزيد",
+ "explore_product": "استكشاف المنتج",
+ "view_list": "عرض القائمة"
+}
diff --git a/assets/locale/da.json b/assets/locale/da.json
new file mode 100644
index 0000000..387c0ba
--- /dev/null
+++ b/assets/locale/da.json
@@ -0,0 +1,132 @@
+{
+ "home": "Hjem",
+ "wish_list": "ønskeliste",
+ "message": "Beskeder",
+ "notification": "Notifikation",
+ "account": "Konto",
+ "change_language": "Skift sprog",
+ "dynamic_theme": "Systemtelefon",
+ "always_on": "Altid på",
+ "always_off": "Altid slukket",
+ "about_us": "Om os",
+ "who_we_are": "HVEM VI ER ?",
+ "what_we_do": "HVAD VI GØR ?",
+ "meet_our_team": "Mød Vores team",
+ "category": "Kategori",
+ "search": "Søg ...",
+ "category_not_found": "Kategori ikke fundet",
+ "password": "Adgangskode",
+ "change_password": "Skift kodeord",
+ "input_your_password": "Indtast din adgangskode",
+ "confirm_password": "Bekræft kodeord",
+ "confirm_your_password": "Bekræft dit kodeord",
+ "confirm": "Bekræfte",
+ "type_something": "Skriv noget ...",
+ "location": "Beliggenhed",
+ "apply": "ansøge",
+ "contact_us": "Kontakt os",
+ "send": "Sende",
+ "name": "Navn",
+ "input_name": "Indtast dit navn",
+ "email": "E-mail",
+ "input_email": "Indtast din e-mail",
+ "information": "Information",
+ "input_information": "Indtast dine oplysninger",
+ "value_not_empty": "Input er ikke tom",
+ "value_not_valid_range": "Input ikke gyldigt interval",
+ "value_not_valid_email": "Input ikke gyldig e-mail",
+ "value_not_valid_phone": "Input ikke gyldig telefon",
+ "value_not_valid_password": "Input ikke gyldigt kodeord",
+ "value_not_valid_id": "Input ikke gyldigt ID",
+ "edit_profile": "Rediger profil",
+ "address": "Adresse",
+ "input_address": "Indtast din adresse",
+ "website": "Internet side",
+ "input_website": "Indtast dit websted",
+ "feedback": "Feedback",
+ "replay": "Replay",
+ "tap_rate": "Tryk på en stjerne for at vurdere",
+ "title": "Titel",
+ "input_title": "Indtast din titel",
+ "description": "Beskrivelse",
+ "input_feedback": "Indtast din feedback",
+ "filter": "Filter",
+ "facilities": "Faciliteter",
+ "area": "Areal",
+ "select_location": "Vælg placering",
+ "price_range": "Prisklasse",
+ "avg_price": "AVG-pris",
+ "business_color": "Virksomhedsfarve",
+ "open_time": "Åben tid",
+ "start_time": "Starttidspunkt",
+ "end_time": "Sluttid",
+ "rating": "Bedømmelse",
+ "font": "Skrifttype",
+ "forgot_password": "Glemt kodeord",
+ "reset_password": "Nulstille kodeord",
+ "search_location": "Søg efter placering",
+ "more": "Mere",
+ "popular_location": "Populær placering",
+ "let_find_interesting": "Lad os finde ud af, hvad der er mest interessante ting",
+ "recent_location": "Seneste placering",
+ "what_happen": "Hvad der kunne ske",
+ "shopping": "Handle ind",
+ "shopping_intro": "Favoritmærker og hotteste trends.",
+ "payment": "Betaling",
+ "payment_intro": "Din strategiske online forretningspartner.",
+ "location_intro": "Beliggenhed, samfund, kvalitetsleje. Det begynder her!",
+ "lasted_post": "Sidste post",
+ "oldest_post": "Ældste post",
+ "most_view": "De fleste visninger",
+ "review_rating": "Gennemgå vurdering",
+ "delete": "Slet",
+ "image": "Billede",
+ "phone": "telefon",
+ "date_established": "Dato fastlagt",
+ "featured": "Udvalgte",
+ "nearly": "Næsten",
+ "related": "Relaterede",
+ "profile": "Profil",
+ "sign_in": "Log ind",
+ "sign_out": "Log ud",
+ "setting": "Indstilling",
+ "review": "Anmeldelser",
+ "write": "Skrive",
+ "out_of": "Ud af",
+ "loading": "Indlæser...",
+ "search_title": "Søg",
+ "search_history": "Søgningshistorie",
+ "discover_more": "Oplev mere",
+ "recently_viewed": "Senest set",
+ "clear": "Klar",
+ "language": "Sprog",
+ "theme": "Tema",
+ "dark_mode": "Mørk tilstand",
+ "version": "Version",
+ "post": "Stolpe",
+ "follower": "Follower",
+ "sign_up": "Tilmelde",
+ "input_id": "Indtast din konto",
+ "default": "Standard",
+ "brown": "Brun",
+ "pink": "Lyserød",
+ "orange": "orange",
+ "green": "Grøn",
+ "monday": "Mandag",
+ "tuesday": "tirsdag",
+ "wednesday": "onsdag",
+ "thursday": "torsdag",
+ "friday": "Fredag",
+ "saturday": "lørdag",
+ "sunday": "Søndag",
+ "day_off": "Fridag",
+ "close": "Tæt",
+ "pull_down_refresh": "Træk opdateringen ned",
+ "refreshing": "Forfriskende ...",
+ "refresh_completed": "Opdatering afsluttet",
+ "release_to_refresh": "Slip for at opdatere",
+ "release_to_load_more": "Slip for at indlæse mere",
+ "pull_to_load_more": "Træk op for at indlæse mere",
+ "explore_product": "Udforsk produkt",
+ "view_list": "Vis liste"
+}
diff --git a/assets/locale/de.json b/assets/locale/de.json
new file mode 100644
index 0000000..4788991
--- /dev/null
+++ b/assets/locale/de.json
@@ -0,0 +1,132 @@
+{
+ "home": "Zuhause",
+ "wish_list": "Wunschzettel",
+ "message": "Mitteilungen",
+ "notification": "Benachrichtigung",
+ "account": "Konto",
+ "change_language": "Sprache ändern",
+ "dynamic_theme": "Systemtelefon",
+ "always_on": "Immer auf",
+ "always_off": "Immer aus",
+ "about_us": "Über uns",
+ "who_we_are": "WER WIR SIND ?",
+ "what_we_do": "WAS WIR TUN ?",
+ "meet_our_team": "TRIFF UNSER TEAM",
+ "category": "Kategorie",
+ "search": "Suche ...",
+ "category_not_found": "Kategorie nicht gefunden",
+ "password": "Passwort",
+ "change_password": "Ändere das Passwort",
+ "input_your_password": "Geben Sie Ihr Passwort ein",
+ "confirm_password": "Kennwort bestätigen",
+ "confirm_your_password": "Bestätigen Sie Ihr Passwort",
+ "confirm": "Bestätigen",
+ "type_something": "Schreibe etwas...",
+ "location": "Lage",
+ "apply": "Anwenden",
+ "contact_us": "Kontaktiere uns",
+ "send": "Senden",
+ "name": "Name",
+ "input_name": "Geben Sie Ihren Namen ein",
+ "email": "Email",
+ "input_email": "Geben Sie Ihre E-Mail-Adresse ein",
+ "information": "Information",
+ "input_information": "Geben Sie Ihre Daten ein",
+ "value_not_empty": "Eingabe ist nicht leer",
+ "value_not_valid_range": "Geben Sie keinen gültigen Bereich ein",
+ "value_not_valid_email": "Geben Sie keine gültige E-Mail-Adresse ein",
+ "value_not_valid_phone": "Geben Sie ein ungültiges Telefon ein",
+ "value_not_valid_password": "Geben Sie ein ungültiges Passwort ein",
+ "value_not_valid_id": "Geben Sie keine gültige ID ein",
+ "edit_profile": "Profil bearbeiten",
+ "address": "Adresse",
+ "input_address": "Geben Sie Ihre Adresse ein",
+ "website": "Webseite",
+ "input_website": "Geben Sie Ihre Website ein",
+ "feedback": "Feedback",
+ "replay": "Wiederholung",
+ "tap_rate": "Tippen Sie auf einen Stern, um ihn zu bewerten",
+ "title": "Titel",
+ "input_title": "Geben Sie Ihren Titel ein",
+ "description": "Beschreibung",
+ "input_feedback": "Geben Sie Ihr Feedback ein",
+ "filter": "Filter",
+ "facilities": "Anlagen",
+ "area": "Bereich",
+ "select_location": "Ort auswählen",
+ "price_range": "Preisklasse",
+ "avg_price": "AVG Preis",
+ "business_color": "Geschäftsfarbe",
+ "open_time": "Offene Zeit",
+ "start_time": "Startzeit",
+ "end_time": "Endzeit",
+ "rating": "Bewertung",
+ "font": "Schriftart",
+ "forgot_password": "Passwort vergessen",
+ "reset_password": "Passwort zurücksetzen",
+ "search_location": "Ort suchen",
+ "more": "Mehr",
+ "popular_location": "Beliebte Lage",
+ "let_find_interesting": "Lassen Sie uns herausfinden, was am interessantesten ist",
+ "recent_location": "Letzter Standort",
+ "what_happen": "Was könnte das passieren?",
+ "shopping": "Einkaufen",
+ "shopping_intro": "Lieblingsmarken und heißeste Trends.",
+ "payment": "Zahlung",
+ "payment_intro": "Ihr strategischer Online-Geschäftspartner.",
+ "location_intro": "Lage, Gemeinschaft, Lebensqualität. Hier fängt es an!",
+ "lasted_post": "Lasted Post",
+ "oldest_post": "Ältester Beitrag",
+ "most_view": "Die meisten Ansichten",
+ "review_rating": "Bewertung bewerten",
+ "delete": "Löschen",
+ "image": "Bild",
+ "phone": "Telefon",
+ "date_established": "Gründungsdatum",
+ "featured": "Vorgestellt",
+ "nearly": "Fast",
+ "related": "verbunden",
+ "profile": "Profil",
+ "sign_in": "Einloggen",
+ "sign_out": "Ausloggen",
+ "setting": "Rahmen",
+ "review": "Bewertungen",
+ "write": "Schreiben",
+ "out_of": "Aus",
+ "loading": "Wird geladen...",
+ "search_title": "Suche",
+ "search_history": "Suchverlauf",
+ "discover_more": "Entdecke mehr",
+ "recently_viewed": "zuletzt angesehen",
+ "clear": "klar",
+ "language": "Sprache",
+ "theme": "Thema",
+ "dark_mode": "Dunkler Modus",
+ "version": "Ausführung",
+ "post": "Post",
+ "follower": "Anhänger",
+ "sign_up": "Anmelden",
+ "input_id": "Geben Sie Ihr Konto ein",
+ "default": "Standard",
+ "brown": "Braun",
+ "pink": "Rosa",
+ "orange": "Orange",
+ "green": "Grün",
+ "monday": "Montag",
+ "tuesday": "Dienstag",
+ "wednesday": "Mittwoch",
+ "thursday": "Donnerstag",
+ "friday": "Freitag",
+ "saturday": "Samstag",
+ "sunday": "Sonntag",
+ "day_off": "Freier Tag",
+ "close": "Schließen",
+ "pull_down_refresh": "Aktualisierung nach unten ziehen",
+ "refreshing": "Erfrischend...",
+ "refresh_completed": "Aktualisierung abgeschlossen",
+ "release_to_refresh": "Zum Aktualisieren loslassen",
+ "release_to_load_more": "Lassen Sie los, um mehr zu laden",
+ "pull_to_load_more": "Ziehen Sie nach oben, um mehr zu laden",
+ "explore_product": "Produkt entdecken",
+ "view_list": "Liste anzeigen"
+}
diff --git a/assets/locale/el.json b/assets/locale/el.json
new file mode 100644
index 0000000..b0fbc9e
--- /dev/null
+++ b/assets/locale/el.json
@@ -0,0 +1,132 @@
+{
+ "home": "Σπίτι",
+ "wish_list": "Λίστα επιθυμιών",
+ "message": "Μηνύματα",
+ "notification": "Γνωστοποίηση",
+ "account": "λογαριασμός",
+ "change_language": "Αλλαξε γλώσσα",
+ "dynamic_theme": "Τηλέφωνο συστήματος",
+ "always_on": "Πάντα ανοιχτό",
+ "always_off": "Πάντα εκτός λειτουργίας",
+ "about_us": "Σχετικά με εμάς",
+ "who_we_are": "ΠΟΙΟΙ ΕΙΜΑΣΤΕ ?",
+ "what_we_do": "ΑΥΤΟ ΠΟΥ ΚΑΝΟΥΜΕ ?",
+ "meet_our_team": "ΣΥΝΕΧΕΤΕ ΤΗΝ ΟΜΑΔΑ ΜΑΣ",
+ "category": "Κατηγορία",
+ "search": "Αναζήτηση ...",
+ "category_not_found": "Η κατηγορία δεν βρέθηκε",
+ "password": "Κωδικός πρόσβασης",
+ "change_password": "Άλλαξε κωδικό",
+ "input_your_password": "Εισάγετε τον κωδικό πρόσβασής σας",
+ "confirm_password": "Επιβεβαίωση Κωδικού",
+ "confirm_your_password": "Επιβεβαιώστε τον κωδικό πρόσβασής σας",
+ "confirm": "Επιβεβαιώνω",
+ "type_something": "Πληκτρολόγησε κάτι...",
+ "location": "Τοποθεσία",
+ "apply": "Ισχύουν",
+ "contact_us": "Επικοινωνήστε μαζί μας",
+ "send": "Στείλετε",
+ "name": "Ονομα",
+ "input_name": "Εισάγετε το όνομά σας",
+ "email": "ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ",
+ "input_email": "Εισάγετε το email σας",
+ "information": "Πληροφορίες",
+ "input_information": "Εισάγετε τις πληροφορίες σας",
+ "value_not_empty": "Η είσοδος δεν είναι κενή",
+ "value_not_valid_range": "Η είσοδος δεν είναι έγκυρη",
+ "value_not_valid_email": "Μη εισαγωγή έγκυρου μηνύματος ηλεκτρονικού ταχυδρομείου",
+ "value_not_valid_phone": "Μη εισαγωγή έγκυρου τηλεφώνου",
+ "value_not_valid_password": "Εισαγωγή δεν είναι έγκυρος κωδικός πρόσβασης",
+ "value_not_valid_id": "Η εισαγωγή δεν είναι έγκυρη ταυτότητα",
+ "edit_profile": "Επεξεργασία προφίλ",
+ "address": "Διεύθυνση",
+ "input_address": "Εισαγάγετε τη διεύθυνσή σας",
+ "website": "Δικτυακός τόπος",
+ "input_website": "Εισάγετε τον ιστότοπό σας",
+ "feedback": "Ανατροφοδότηση",
+ "replay": "Επανάληψη",
+ "tap_rate": "Αγγίξτε ένα αστέρι για να αξιολογήσετε",
+ "title": "Τίτλος",
+ "input_title": "Εισάγετε τον τίτλο σας",
+ "description": "Περιγραφή",
+ "input_feedback": "Εισάγετε τα σχόλιά σας",
+ "filter": "Φίλτρο",
+ "facilities": "Εγκαταστάσεις",
+ "area": "Περιοχή",
+ "select_location": "Επιλέξτε Τοποθεσία",
+ "price_range": "Εύρος τιμών",
+ "avg_price": "AVG Τιμή",
+ "business_color": "Επιχειρηματικό χρώμα",
+ "open_time": "Άνοιγμα ώρας",
+ "start_time": "Ωρα έναρξης",
+ "end_time": "Τέλος χρόνου",
+ "rating": "Εκτίμηση",
+ "font": "Γραμματοσειρά",
+ "forgot_password": "Ξεχάσατε τον κωδικό",
+ "reset_password": "Επαναφέρετε τον κωδικό πρόσβασης",
+ "search_location": "Τοποθεσία αναζήτησης",
+ "more": "Περισσότερο",
+ "popular_location": "Δημοφιλής τοποθεσία",
+ "let_find_interesting": "Ας μάθουμε ποια είναι τα πιο ενδιαφέροντα πράγματα",
+ "recent_location": "Πρόσφατη τοποθεσία",
+ "what_happen": "Τι μπορεί να συμβεί αυτό",
+ "shopping": "Ψώνια",
+ "shopping_intro": "Αγαπημένες μάρκες και πιο καυτές τάσεις.",
+ "payment": "Πληρωμή",
+ "payment_intro": "Ο στρατηγικός συνεργάτης σας στο διαδίκτυο.",
+ "location_intro": "Τοποθεσία, Κοινότητα, Ποιότητα Ζωής. Ξεκινά εδώ!",
+ "lasted_post": "Δημοσίευση",
+ "oldest_post": "Παλαιότερη Δημοσίευση",
+ "most_view": "Οι περισσότερες προβολές",
+ "review_rating": "Αξιολόγηση αξιολόγησης",
+ "delete": "Διαγράφω",
+ "image": "Εικόνα",
+ "phone": "Τηλέφωνο",
+ "date_established": "Η ημερομηνία καθιερώθηκε",
+ "featured": "Προτεινόμενα",
+ "nearly": "Σχεδόν",
+ "related": "Σχετίζεται με",
+ "profile": "Προφίλ",
+ "sign_in": "Συνδεθείτε",
+ "sign_out": "Αποσύνδεση",
+ "setting": "Σύνθεση",
+ "review": "Κριτικές",
+ "write": "Γράφω",
+ "out_of": "Εκτός",
+ "loading": "Φόρτωση...",
+ "search_title": "Αναζήτηση",
+ "search_history": "Ιστορικό αναζήτησης",
+ "discover_more": "Ανακάλυψε περισσότερα",
+ "recently_viewed": "Πρόσφατα προβεβλημένα",
+ "clear": "Σαφή",
+ "language": "Γλώσσα",
+ "theme": "Θέμα",
+ "dark_mode": "Σκοτεινή λειτουργία",
+ "version": "Εκδοχή",
+ "post": "Θέση",
+ "follower": "Οπαδός",
+ "sign_up": "Εγγραφείτε",
+ "input_id": "Εισαγάγετε το λογαριασμό σας",
+ "default": "Προκαθορισμένο",
+ "brown": "καφέ",
+ "pink": "Ροζ",
+ "orange": "Πορτοκάλι",
+ "green": "Πράσινος",
+ "monday": "Δευτέρα",
+ "tuesday": "Τρίτη",
+ "wednesday": "Τετάρτη",
+ "thursday": "Πέμπτη",
+ "friday": "Παρασκευή",
+ "saturday": "Σάββατο",
+ "sunday": "Κυριακή",
+ "day_off": "Ρεπό",
+ "close": "Κλείσε",
+ "pull_down_refresh": "Τραβήξτε προς τα κάτω την ανανέωση",
+ "refreshing": "Δροσιστικός...",
+ "refresh_completed": "Η ανανέωση ολοκληρώθηκε",
+ "release_to_refresh": "Απελευθερώστε για ανανέωση",
+ "release_to_load_more": "Απελευθερώστε για να φορτώσετε περισσότερο",
+ "pull_to_load_more": "Τραβήξτε προς τα πάνω για να φορτώσετε περισσότερο",
+ "explore_product": "Εξερευνήστε το προϊόν",
+ "view_list": "Προβολή λίστας"
+}
diff --git a/assets/locale/en.json b/assets/locale/en.json
new file mode 100644
index 0000000..cc08346
--- /dev/null
+++ b/assets/locale/en.json
@@ -0,0 +1,137 @@
+{
+ "home": "Home",
+ "wish_list": "Wishlist",
+ "message": "Messages",
+ "notification": "Notification",
+ "account": "Account",
+ "change_language": "Change Language",
+ "dynamic_theme": "System",
+ "always_on": "Dark Mode",
+ "always_off": "Light Mode",
+ "about_us": "About Us",
+ "who_we_are": "WHO WE ARE ?",
+ "what_we_do": "WHAT WE DO ?",
+ "meet_our_team": "MEET OUR TEAM",
+ "category": "Category",
+ "search": "Search ...",
+ "category_not_found": "Category not found",
+ "password": "Password",
+ "change_password": "Change Password",
+ "input_your_password": "Input your password",
+ "confirm_password": "Confirm Password",
+ "confirm_your_password": "Confirm your password",
+ "confirm": "Confirm",
+ "type_something": "Type Something...",
+ "location": "Select Location",
+ "apply": "Apply",
+ "contact_us": "Contact Us",
+ "send": "Send",
+ "name": "Name",
+ "input_name": "Input your name",
+ "email": "Email",
+ "input_email": "Input your email",
+ "information": "Information",
+ "input_information": "Input your information",
+ "value_not_empty": "Input is not empty",
+ "value_not_valid_range": "Input not valid range",
+ "value_not_valid_email": "Input not valid email",
+ "value_not_valid_phone": "Input not valid phone",
+ "value_not_valid_password": "Input not valid password",
+ "value_not_valid_id": "Input not valid ID",
+ "edit_profile": "Edit Profile",
+ "address": "Address",
+ "input_address": "Input your address",
+ "website": "Website",
+ "input_website": "Input your website",
+ "feedback": "Feedback",
+ "replay": "Replay",
+ "tap_rate": "Tap a star to rate",
+ "title": "Title",
+ "input_title": "Input your title",
+ "description": "Description",
+ "input_feedback": "Input your feedback",
+ "filter": "Filter",
+ "facilities": "Facilities",
+ "area": "Area",
+ "select_location": "Select Location",
+ "price_range": "Price Range",
+ "avg_price": "AVG Price",
+ "business_color": "Business Color",
+ "open_time": "Open Time",
+ "start_time": "Start Time",
+ "end_time": "End Time",
+ "rating": "Rating",
+ "font": "Font",
+ "forgot_password": "Forgot Password",
+ "reset_password": "Reset Password",
+ "search_location": "Search Location",
+ "more": "More",
+ "popular_location": "Popular Locations",
+ "quick_lookups": "Quick Lookups",
+ "get_info": "Get the safety information for any of the locations below.",
+ "recent_location": "Recent Location",
+ "what_happen": "What’s that could happen",
+ "shopping": "Shopping",
+ "shopping_intro": "Favorite brands and hottest trends.",
+ "payment": "Payment",
+ "payment_intro": "Your strategic online business partner.",
+ "location_intro": "Location, Community, Quality Living. It Starts Here!",
+ "lasted_post": "Lasted Post",
+ "oldest_post": "Oldest Post",
+ "most_view": "Most Views",
+ "review_rating": "Review Rating",
+ "delete": "Delete",
+ "image": "Image",
+ "phone": "Phone",
+ "date_established": "Date Established",
+ "featured": "Featured",
+ "nearly": "Nearly",
+ "related": "Related",
+ "profile": "Profile",
+ "sign_in": "Sign In",
+ "sign_out": "Sign Out",
+ "settings": "Settings",
+ "review": "Reviews",
+ "write": "Write",
+ "out_of": "Out of",
+ "loading": "Loading...",
+ "search_title": "Search",
+ "search_history": "Search History",
+ "discover_more": "Discover More",
+ "recently_viewed": "Recently Viewed",
+ "clear": "Clear",
+ "language": "Language",
+ "theme": "Theme",
+ "dark_mode": "Appearance",
+ "version": "Version",
+ "post": "Post",
+ "follower": "Follower",
+ "sign_up": "Sign Up",
+ "input_id": "Input your account",
+ "default": "Default",
+ "brown": "Brown",
+ "pink": "Pink",
+ "orange": "Orange",
+ "green": "Green",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday",
+ "day_off": "Day Off",
+ "close": "Close",
+ "pull_down_refresh": "Pull down refresh",
+ "refreshing": "Refreshing...",
+ "refresh_completed": "Refresh completed",
+ "release_to_refresh": "Release to refresh",
+ "release_to_load_more": "Release to load more",
+ "pull_to_load_more": "Pull up to load more",
+ "explore_product": "Explore Product",
+ "view_list": "View List",
+ "more_options": "Explore More Options",
+ "pref": "Preferences",
+ "general": "General",
+ "terms_of_use": "Terms of Use"
+}
\ No newline at end of file
diff --git a/assets/locale/fa.json b/assets/locale/fa.json
new file mode 100644
index 0000000..fcf55c6
--- /dev/null
+++ b/assets/locale/fa.json
@@ -0,0 +1,132 @@
+{
+ "home": "خانه",
+ "wish_list": "لیست علاقه مندیها",
+ "message": "پیام ها",
+ "notification": "اطلاع",
+ "account": "حساب",
+ "change_language": "تغییر زبان",
+ "dynamic_theme": "تلفن تلفن",
+ "always_on": "همیشه روشن است",
+ "always_off": "همیشه خاموش",
+ "about_us": "درباره ما",
+ "who_we_are": "ما کی هستیم ؟",
+ "what_we_do": "چه کاری انجام می دهیم؟",
+ "meet_our_team": "دیدار با تیم ما",
+ "category": "دسته بندی",
+ "search": "جستجو کردن ...",
+ "category_not_found": "دسته یافت نشد",
+ "password": "کلمه عبور",
+ "change_password": "تغییر رمز عبور",
+ "input_your_password": "گذرواژه خود را وارد کنید",
+ "confirm_password": "رمز عبور را تأیید کنید",
+ "confirm_your_password": "رمز عبور خود را تأیید کنید",
+ "confirm": "تایید",
+ "type_something": "چیزی بنویسید ...",
+ "location": "محل",
+ "apply": "درخواست دادن",
+ "contact_us": "با ما تماس بگیرید",
+ "send": "ارسال",
+ "name": "نام",
+ "input_name": "نام خود را وارد کنید",
+ "email": "پست الکترونیک",
+ "input_email": "ایمیل خود را وارد کنید",
+ "information": "اطلاعات",
+ "input_information": "اطلاعات خود را وارد کنید",
+ "value_not_empty": "ورودی خالی نیست",
+ "value_not_valid_range": "دامنه ورودی معتبر نیست",
+ "value_not_valid_email": "ایمیل ورودی معتبر نیست",
+ "value_not_valid_phone": "ورودی تلفن معتبر نیست",
+ "value_not_valid_password": "رمز ورود معتبر نیست",
+ "value_not_valid_id": "شناسه معتبر ورودی نیست",
+ "edit_profile": "ویرایش نمایه",
+ "address": "نشانی",
+ "input_address": "آدرس خود را وارد کنید",
+ "website": "سایت اینترنتی",
+ "input_website": "وب سایت خود را وارد کنید",
+ "feedback": "بازخورد",
+ "replay": "بازپخش",
+ "tap_rate": "برای امتیاز دادن به یک ستاره ضربه بزنید",
+ "title": "عنوان",
+ "input_title": "عنوان خود را وارد کنید",
+ "description": "شرح",
+ "input_feedback": "بازخورد خود را وارد کنید",
+ "filter": "فیلتر",
+ "facilities": "امکانات",
+ "area": "حوزه",
+ "select_location": "موقعیت مکانی را انتخاب کنید",
+ "price_range": "حدود قیمت",
+ "avg_price": "قیمت AVG",
+ "business_color": "رنگ کسب و کار",
+ "open_time": "زمان باز",
+ "start_time": "زمان شروع",
+ "end_time": "زمان پایان",
+ "rating": "رتبه بندی",
+ "font": "قلم",
+ "forgot_password": "رمز عبور را فراموش کرده اید",
+ "reset_password": "بازنشانی گذرواژه",
+ "search_location": "جستجوی موقعیت مکانی",
+ "more": "بیشتر",
+ "popular_location": "موقعیت مکانی محبوب",
+ "let_find_interesting": "بگذارید دریابید که جالب ترین چیزها چیست",
+ "recent_location": "موقعیت مکانی اخیر",
+ "what_happen": "چه اتفاقی می افتد",
+ "shopping": "خريد كردن",
+ "shopping_intro": "مارک های مورد علاقه و داغترین روند.",
+ "payment": "پرداخت",
+ "payment_intro": "شریک استراتژیک تجارت آنلاین شما",
+ "location_intro": "مکان ، اجتماع ، کیفیت زندگی. از اینجا شروع می شود!",
+ "lasted_post": "ارسال طولانی شد",
+ "oldest_post": "قدیمی ترین پست",
+ "most_view": "بیشترین بازدیدها",
+ "review_rating": "بررسی رتبه بندی",
+ "delete": "حذف",
+ "image": "تصویر",
+ "phone": "تلفن",
+ "date_established": "تاریخ تأسیس",
+ "featured": "ویژه",
+ "nearly": "تقریبا",
+ "related": "مربوط",
+ "profile": "مشخصات",
+ "sign_in": "ورود",
+ "sign_out": "خروج از سیستم",
+ "setting": "تنظیمات",
+ "review": "بررسی ها",
+ "write": "نوشتن",
+ "out_of": "بیرون از",
+ "loading": "بارگذاری...",
+ "search_title": "جستجو کردن",
+ "search_history": "تاریخچه جستجو",
+ "discover_more": "بیشتر پیدا کن",
+ "recently_viewed": "به تازگی بازدید شده",
+ "clear": "پاک کردن",
+ "language": "زبان",
+ "theme": "موضوع",
+ "dark_mode": "حالت تاریک",
+ "version": "نسخه",
+ "post": "پست",
+ "follower": "دنباله رو",
+ "sign_up": "ثبت نام",
+ "input_id": "وارد حساب کاربری خود شوید",
+ "default": "پیش فرض",
+ "brown": "رنگ قهوه ای",
+ "pink": "رنگ صورتی",
+ "orange": "نارنجی",
+ "green": "سبز",
+ "monday": "دوشنبه",
+ "tuesday": "سهشنبه",
+ "wednesday": "چهار شنبه",
+ "thursday": "پنج شنبه",
+ "friday": "جمعه",
+ "saturday": "شنبه",
+ "sunday": "یکشنبه",
+ "day_off": "مرخصی روزانه",
+ "close": "نزدیک",
+ "pull_down_refresh": "تازه کردن را پایین بیاورید",
+ "refreshing": "طراوت ...",
+ "refresh_completed": "تازه کردن به پایان رسید",
+ "release_to_refresh": "انتشار برای تازه کردن",
+ "release_to_load_more": "برای بارگیری بیشتر رها کنید",
+ "pull_to_load_more": "برای بارگیری بیشتر بکشید",
+ "explore_product": "کاوش محصول",
+ "view_list": "لیست نمایش"
+}
diff --git a/assets/locale/fr.json b/assets/locale/fr.json
new file mode 100644
index 0000000..c022f72
--- /dev/null
+++ b/assets/locale/fr.json
@@ -0,0 +1,132 @@
+{
+ "home": "Accueil",
+ "wish_list": "Liste de souhaits",
+ "message": "messages",
+ "notification": "Notification",
+ "account": "Compte",
+ "change_language": "Changer de langue",
+ "dynamic_theme": "Téléphone système",
+ "always_on": "Toujours allumé",
+ "always_off": "Toujours désactivé",
+ "about_us": "À propos de nous",
+ "who_we_are": "QUI NOUS SOMMES ?",
+ "what_we_do": "CE QUE NOUS FAISONS",
+ "meet_our_team": "RENCONTREZ NOTRE ÉQUIPE",
+ "category": "Catégorie",
+ "search": "Chercher ...",
+ "category_not_found": "Catégorie non trouvée",
+ "password": "Mot de passe",
+ "change_password": "Changer le mot de passe",
+ "input_your_password": "Saisissez votre mot de passe",
+ "confirm_password": "Confirmez le mot de passe",
+ "confirm_your_password": "Confirmer votre mot de passe",
+ "confirm": "Confirmer",
+ "type_something": "Tapez quelque chose ...",
+ "location": "Emplacement",
+ "apply": "Appliquer",
+ "contact_us": "Nous contacter",
+ "send": "Envoyer",
+ "name": "Nom",
+ "input_name": "Entrez votre nom",
+ "email": "Email",
+ "input_email": "Saisissez votre email",
+ "information": "Information",
+ "input_information": "Entrez vos informations",
+ "value_not_empty": "L'entrée n'est pas vide",
+ "value_not_valid_range": "Plage d'entrée non valide",
+ "value_not_valid_email": "E-mail non valide",
+ "value_not_valid_phone": "Saisie d'un téléphone non valide",
+ "value_not_valid_password": "Saisissez un mot de passe non valide",
+ "value_not_valid_id": "ID d'entrée non valide",
+ "edit_profile": "Editer le profil",
+ "address": "Adresse",
+ "input_address": "Entrez votre adresse",
+ "website": "Site Internet",
+ "input_website": "Saisissez votre site Web",
+ "feedback": "Retour d'information",
+ "replay": "Rejouer",
+ "tap_rate": "Appuyez sur une étoile pour noter",
+ "title": "Titre",
+ "input_title": "Entrez votre titre",
+ "description": "La description",
+ "input_feedback": "Entrez vos commentaires",
+ "filter": "Filtre",
+ "facilities": "Installations",
+ "area": "Surface",
+ "select_location": "Sélectionnez l'emplacement",
+ "price_range": "Échelle des prix",
+ "avg_price": "Prix AVG",
+ "business_color": "Couleur de l'entreprise",
+ "open_time": "Temps ouvert",
+ "start_time": "Heure de début",
+ "end_time": "Heure de fin",
+ "rating": "Évaluation",
+ "font": "Font",
+ "forgot_password": "Mot de passe oublié",
+ "reset_password": "réinitialiser le mot de passe",
+ "search_location": "Lieu de recherche",
+ "more": "Plus",
+ "popular_location": "Emplacement populaire",
+ "let_find_interesting": "Voyons quelles sont les choses les plus intéressantes",
+ "recent_location": "Lieu récent",
+ "what_happen": "Qu'est-ce qui pourrait arriver",
+ "shopping": "Achats",
+ "shopping_intro": "Marques préférées et tendances les plus en vogue.",
+ "payment": "Paiement",
+ "payment_intro": "Votre partenaire commercial stratégique en ligne.",
+ "location_intro": "Emplacement, communauté, qualité de vie. Ça commence ici!",
+ "lasted_post": "Message duré",
+ "oldest_post": "Post le plus ancien",
+ "most_view": "Les plus vus",
+ "review_rating": "Évaluation des avis",
+ "delete": "Effacer",
+ "image": "Image",
+ "phone": "Téléphone",
+ "date_established": "Date établie",
+ "featured": "En vedette",
+ "nearly": "Presque",
+ "related": "en relation",
+ "profile": "Profil",
+ "sign_in": "Se connecter",
+ "sign_out": "Déconnexion",
+ "setting": "Réglage",
+ "review": "Commentaires",
+ "write": "Écrire",
+ "out_of": "Hors de",
+ "loading": "Chargement...",
+ "search_title": "Chercher",
+ "search_history": "Historique des recherches",
+ "discover_more": "Découvrir plus",
+ "recently_viewed": "vu récemment",
+ "clear": "Clair",
+ "language": "Langue",
+ "theme": "Thème",
+ "dark_mode": "Mode sombre",
+ "version": "Version",
+ "post": "Publier",
+ "follower": "Disciple",
+ "sign_up": "S'inscrire",
+ "input_id": "Saisissez votre compte",
+ "default": "Défaut",
+ "brown": "marron",
+ "pink": "Rose",
+ "orange": "Orange",
+ "green": "vert",
+ "monday": "Lundi",
+ "tuesday": "Mardi",
+ "wednesday": "Mercredi",
+ "thursday": "Jeudi",
+ "friday": "Vendredi",
+ "saturday": "samedi",
+ "sunday": "dimanche",
+ "day_off": "Jour de congé",
+ "close": "Fermer",
+ "pull_down_refresh": "Rafraîchir vers le bas",
+ "refreshing": "Rafraîchissant...",
+ "refresh_completed": "Actualisation terminée",
+ "release_to_refresh": "Relâcher pour rafraîchir",
+ "release_to_load_more": "Relâchez pour charger plus",
+ "pull_to_load_more": "Tirez pour charger plus",
+ "explore_product": "Découvrir le produit",
+ "view_list": "Afficher la liste"
+}
diff --git a/assets/locale/he.json b/assets/locale/he.json
new file mode 100644
index 0000000..119fe68
--- /dev/null
+++ b/assets/locale/he.json
@@ -0,0 +1,132 @@
+{
+ "home": "בית",
+ "wish_list": "רשימת משאלות",
+ "message": "הודעות",
+ "notification": "הודעה",
+ "account": "חשבון",
+ "change_language": "שנה שפה",
+ "dynamic_theme": "טלפון מערכת",
+ "always_on": "תמיד פועל",
+ "always_off": "תמיד כבוי",
+ "about_us": "עלינו",
+ "who_we_are": "מי אנחנו ?",
+ "what_we_do": "מה אנחנו עושים ?",
+ "meet_our_team": "פגש את הצוות שלנו",
+ "category": "קטגוריה",
+ "search": "לחפש ...",
+ "category_not_found": "הקטגוריה לא נמצאה",
+ "password": "סיסמה",
+ "change_password": "שנה סיסמא",
+ "input_your_password": "הזן את הסיסמה שלך",
+ "confirm_password": "אשר סיסמה",
+ "confirm_your_password": "אמת סיסמתך",
+ "confirm": "אשר",
+ "type_something": "הקלד משהו...",
+ "location": "מקום",
+ "apply": "להגיש מועמדות",
+ "contact_us": "צור קשר",
+ "send": "שלח",
+ "name": "שם",
+ "input_name": "הזן את שמך",
+ "email": "אימייל",
+ "input_email": "הזן את הדוא"ל שלך",
+ "information": "מידע",
+ "input_information": "הזן את המידע שלך",
+ "value_not_empty": "הקלט אינו ריק",
+ "value_not_valid_range": "הקלט אינו תקף",
+ "value_not_valid_email": "הקלט אינו דוא"ל חוקי",
+ "value_not_valid_phone": "הקלט לא חוקי טלפון",
+ "value_not_valid_password": "הקלט אינו סיסמא חוקית",
+ "value_not_valid_id": "הקלט אינו מזהה חוקי",
+ "edit_profile": "ערוך פרופיל",
+ "address": "כתובת",
+ "input_address": "הזן את הכתובת שלך",
+ "website": "אתר אינטרנט",
+ "input_website": "הזן את האתר שלך",
+ "feedback": "משוב",
+ "replay": "שידור חוזר",
+ "tap_rate": "הקש על כוכב כדי לדרג",
+ "title": "כותרת",
+ "input_title": "הזן את הכותרת שלך",
+ "description": "תיאור",
+ "input_feedback": "הזן את המשוב שלך",
+ "filter": "סנן",
+ "facilities": "מתקנים",
+ "area": "אזור",
+ "select_location": "תבחר מיקום",
+ "price_range": "טווח מחירים",
+ "avg_price": "מחיר ממוצע",
+ "business_color": "צבע עסקי",
+ "open_time": "זמן הפתיחה",
+ "start_time": "שעת התחלה",
+ "end_time": "זמן סיום",
+ "rating": "דירוג",
+ "font": "גופן",
+ "forgot_password": "שכחת ססמא",
+ "reset_password": "לאפס את הסיסמה",
+ "search_location": "חיפוש מיקום",
+ "more": "יותר",
+ "popular_location": "מיקום פופולרי",
+ "let_find_interesting": "בואו לגלות מה הדברים המעניינים ביותר",
+ "recent_location": "מיקום אחרון",
+ "what_happen": "מה זה יכול לקרות",
+ "shopping": "קניות",
+ "shopping_intro": "מותגים אהובים וטרנדים הכי חמים.",
+ "payment": "תשלום",
+ "payment_intro": "השותף העסקי המקוון האסטרטגי שלך.",
+ "location_intro": "מיקום, קהילה, מגורים איכותיים. זה מתחיל כאן!",
+ "lasted_post": "הודעה אחרונה",
+ "oldest_post": "הפוסט העתיק ביותר",
+ "most_view": "רוב הנופים",
+ "review_rating": "דירוג סקירה",
+ "delete": "מחק",
+ "image": "תמונה",
+ "phone": "מכשיר טלפון",
+ "date_established": "נקבע תאריך",
+ "featured": "מומלצים",
+ "nearly": "כמעט",
+ "related": "קשורים",
+ "profile": "פרופיל",
+ "sign_in": "להתחבר",
+ "sign_out": "התנתק",
+ "setting": "הגדרה",
+ "review": "ביקורות",
+ "write": "כתוב",
+ "out_of": "מתוך",
+ "loading": "טוען...",
+ "search_title": "לחפש",
+ "search_history": "חפש היסטוריה",
+ "discover_more": "לגלות עוד",
+ "recently_viewed": "נראה לאחרונה",
+ "clear": "ברור",
+ "language": "שפה",
+ "theme": "נושא",
+ "dark_mode": "מצב אפל",
+ "version": "גרסה",
+ "post": "הודעה",
+ "follower": "עוקב",
+ "sign_up": "הירשם",
+ "input_id": "הזן את חשבונך",
+ "default": "ברירת מחדל",
+ "brown": "חום",
+ "pink": "ורוד",
+ "orange": "תפוז",
+ "green": "ירוק",
+ "monday": "יום שני",
+ "tuesday": "יום שלישי",
+ "wednesday": "יום רביעי",
+ "thursday": "יום חמישי",
+ "friday": "יום שישי",
+ "saturday": "יום שבת",
+ "sunday": "יום ראשון",
+ "day_off": "יום חופש",
+ "close": "סגור",
+ "pull_down_refresh": "הורד את הרענון",
+ "refreshing": "מרענן ...",
+ "refresh_completed": "הרענון הושלם",
+ "release_to_refresh": "שחרר כדי לרענן",
+ "release_to_load_more": "שחרר כדי לטעון יותר",
+ "pull_to_load_more": "משוך למעלה כדי לטעון יותר",
+ "explore_product": "חקור את המוצר",
+ "view_list": "רשימת צפיה"
+}
diff --git a/assets/locale/id.json b/assets/locale/id.json
new file mode 100644
index 0000000..76f5d3f
--- /dev/null
+++ b/assets/locale/id.json
@@ -0,0 +1,132 @@
+{
+ "home": "Rumah",
+ "wish_list": "Wishlist",
+ "message": "Pesan",
+ "notification": "Pemberitahuan",
+ "account": "Akun",
+ "change_language": "Ganti BAHASA",
+ "dynamic_theme": "Telepon Sistem",
+ "always_on": "Selalu Aktif",
+ "always_off": "Selalu Mati",
+ "about_us": "Tentang kami",
+ "who_we_are": "SIAPA KITA ?",
+ "what_we_do": "APA YANG KITA LAKUKAN ?",
+ "meet_our_team": "RAPAT TIM KAMI",
+ "category": "Kategori",
+ "search": "Cari ...",
+ "category_not_found": "Kategori tidak ditemukan",
+ "password": "Kata sandi",
+ "change_password": "Ganti kata sandi",
+ "input_your_password": "Masukkan kata sandi Anda",
+ "confirm_password": "konfirmasi sandi",
+ "confirm_your_password": "Konfirmasi password Anda",
+ "confirm": "Konfirmasi",
+ "type_something": "Ketik Sesuatu ...",
+ "location": "Lokasi",
+ "apply": "Menerapkan",
+ "contact_us": "Hubungi kami",
+ "send": "Kirim",
+ "name": "Nama",
+ "input_name": "Masukkan nama Anda",
+ "email": "Surel",
+ "input_email": "Masukkan email Anda",
+ "information": "Informasi",
+ "input_information": "Masukkan informasi Anda",
+ "value_not_empty": "Masukan tidak kosong",
+ "value_not_valid_range": "Input bukan rentang yang valid",
+ "value_not_valid_email": "Masukan bukan email yang valid",
+ "value_not_valid_phone": "Masukan telepon tidak valid",
+ "value_not_valid_password": "Masukkan bukan kata sandi yang valid",
+ "value_not_valid_id": "Masukkan bukan ID yang valid",
+ "edit_profile": "Sunting profil",
+ "address": "Alamat",
+ "input_address": "Masukkan alamat Anda",
+ "website": "Situs web",
+ "input_website": "Masukkan situs web Anda",
+ "feedback": "Umpan balik",
+ "replay": "Ulangan",
+ "tap_rate": "Ketuk bintang untuk memberi peringkat",
+ "title": "Judul",
+ "input_title": "Masukkan judul Anda",
+ "description": "Deskripsi",
+ "input_feedback": "Masukkan umpan balik Anda",
+ "filter": "Saring",
+ "facilities": "Fasilitas",
+ "area": "Daerah",
+ "select_location": "Pilih lokasi",
+ "price_range": "Kisaran harga",
+ "avg_price": "Harga AVG",
+ "business_color": "Warna Bisnis",
+ "open_time": "Waktu Terbuka",
+ "start_time": "Waktu mulai",
+ "end_time": "Akhir waktu",
+ "rating": "Peringkat",
+ "font": "Font",
+ "forgot_password": "Tidak ingat kata sandi",
+ "reset_password": "Setel Ulang Kata Sandi",
+ "search_location": "Lokasi Pencarian",
+ "more": "Lebih",
+ "popular_location": "Lokasi Populer",
+ "let_find_interesting": "Biarkan mencari tahu hal-hal apa yang paling menarik",
+ "recent_location": "Lokasi Terbaru",
+ "what_happen": "Apa yang bisa terjadi?",
+ "shopping": "Perbelanjaan",
+ "shopping_intro": "Merek favorit dan tren terpanas.",
+ "payment": "Pembayaran",
+ "payment_intro": "Mitra bisnis online strategis Anda.",
+ "location_intro": "Lokasi, Komunitas, Kualitas Hidup. Mulai Di Sini!",
+ "lasted_post": "Posting Terakhir",
+ "oldest_post": "Pos Tertua",
+ "most_view": "Kebanyakan Tampilan",
+ "review_rating": "Peringkat Ulasan",
+ "delete": "Menghapus",
+ "image": "Gambar",
+ "phone": "Telepon",
+ "date_established": "Tanggal Didirikan",
+ "featured": "Unggulan",
+ "nearly": "Hampir",
+ "related": "Terkait",
+ "profile": "Profil",
+ "sign_in": "Masuk",
+ "sign_out": "Keluar",
+ "setting": "Pengaturan",
+ "review": "Ulasan",
+ "write": "Menulis",
+ "out_of": "Dari",
+ "loading": "Memuat...",
+ "search_title": "Cari",
+ "search_history": "Sejarah pencarian",
+ "discover_more": "Temukan Lebih Banyak",
+ "recently_viewed": "baru saja dilihat",
+ "clear": "Bersih",
+ "language": "Bahasa",
+ "theme": "Tema",
+ "dark_mode": "Mode Gelap",
+ "version": "Versi: kapan",
+ "post": "Pos",
+ "follower": "Pengikut",
+ "sign_up": "Daftar",
+ "input_id": "Masukkan akun Anda",
+ "default": "Default",
+ "brown": "cokelat",
+ "pink": "Merah Jambu",
+ "orange": "jeruk",
+ "green": "hijau",
+ "monday": "Senin",
+ "tuesday": "Selasa",
+ "wednesday": "Rabu",
+ "thursday": "Kamis",
+ "friday": "Jumat",
+ "saturday": "Sabtu",
+ "sunday": "Minggu",
+ "day_off": "Libur",
+ "close": "Menutup",
+ "pull_down_refresh": "Tarik penyegaran ke bawah",
+ "refreshing": "Segar...",
+ "refresh_completed": "Segarkan selesai",
+ "release_to_refresh": "Lepaskan untuk menyegarkan",
+ "release_to_load_more": "Lepaskan untuk memuat lebih banyak",
+ "pull_to_load_more": "Tarik ke atas untuk memuat lebih banyak",
+ "explore_product": "Jelajahi Produk",
+ "view_list": "Lihat Daftar"
+}
diff --git a/assets/locale/ja.json b/assets/locale/ja.json
new file mode 100644
index 0000000..4726cf0
--- /dev/null
+++ b/assets/locale/ja.json
@@ -0,0 +1,132 @@
+{
+ "home": "ホーム",
+ "wish_list": "ウィッシュリスト",
+ "message": "メッセージ",
+ "notification": "お知らせ",
+ "account": "アカウント",
+ "change_language": "言語を変えてください",
+ "dynamic_theme": "システム電話",
+ "always_on": "常にオン",
+ "always_off": "常にオフ",
+ "about_us": "私たちに関しては",
+ "who_we_are": "私たちは誰ですか?",
+ "what_we_do": "私達がすること ?",
+ "meet_our_team": "私たちのチームに会う",
+ "category": "カテゴリー",
+ "search": "探す ...",
+ "category_not_found": "カテゴリが見つかりません",
+ "password": "パスワード",
+ "change_password": "パスワードを変更する",
+ "input_your_password": "パスワードを入力してください",
+ "confirm_password": "パスワードを認証する",
+ "confirm_your_password": "あなたのパスワードを確認",
+ "confirm": "確認",
+ "type_something": "何かを入力...",
+ "location": "ロケーション",
+ "apply": "申し込む",
+ "contact_us": "お問い合わせ",
+ "send": "送る",
+ "name": "名前",
+ "input_name": "名前を入力してください",
+ "email": "Eメール",
+ "input_email": "メールアドレスを入力してください",
+ "information": "情報",
+ "input_information": "情報を入力してください",
+ "value_not_empty": "入力が空ではありません",
+ "value_not_valid_range": "入力が無効な範囲です",
+ "value_not_valid_email": "無効なメールアドレスを入力してください",
+ "value_not_valid_phone": "入力が無効な電話",
+ "value_not_valid_password": "無効なパスワードを入力してください",
+ "value_not_valid_id": "入力したIDが無効です",
+ "edit_profile": "プロファイル編集",
+ "address": "住所",
+ "input_address": "住所を入力してください",
+ "website": "ウェブサイト",
+ "input_website": "あなたのウェブサイトを入力してください",
+ "feedback": "フィードバック",
+ "replay": "リプレイ",
+ "tap_rate": "星をタップして評価",
+ "title": "題名",
+ "input_title": "タイトルを入力してください",
+ "description": "説明文",
+ "input_feedback": "フィードバックを入力してください",
+ "filter": "フィルタ",
+ "facilities": "施設紹介",
+ "area": "範囲",
+ "select_location": "場所を選択",
+ "price_range": "価格帯",
+ "avg_price": "AVG価格",
+ "business_color": "ビジネスカラー",
+ "open_time": "オープンタイム",
+ "start_time": "始まる時間",
+ "end_time": "終了時間",
+ "rating": "評価",
+ "font": "書体",
+ "forgot_password": "パスワードをお忘れですか",
+ "reset_password": "パスワードを再設定する",
+ "search_location": "場所を検索",
+ "more": "もっと",
+ "popular_location": "人気の場所",
+ "let_find_interesting": "最も興味深いものを見つけましょう",
+ "recent_location": "最近の場所",
+ "what_happen": "何が起こる可能性がありますか",
+ "shopping": "ショッピング",
+ "shopping_intro": "お気に入りのブランドと最も人気のあるトレンド。",
+ "payment": "支払い",
+ "payment_intro": "戦略的なオンラインビジネスパートナー。",
+ "location_intro": "場所、コミュニティ、質の高い生活。ここから始まります!",
+ "lasted_post": "長続きする投稿",
+ "oldest_post": "最古の投稿",
+ "most_view": "ほとんどのビュー",
+ "review_rating": "レビューの評価",
+ "delete": "削除する",
+ "image": "画像",
+ "phone": "電話",
+ "date_established": "設立日",
+ "featured": "特徴",
+ "nearly": "ほぼ",
+ "related": "関連した",
+ "profile": "プロフィール",
+ "sign_in": "サインイン",
+ "sign_out": "サインアウト",
+ "setting": "設定",
+ "review": "レビュー",
+ "write": "書く",
+ "out_of": "のうち",
+ "loading": "読み込んでいます...",
+ "search_title": "探す",
+ "search_history": "検索履歴",
+ "discover_more": "もっと知る",
+ "recently_viewed": "最近見た",
+ "clear": "晴れ",
+ "language": "言語",
+ "theme": "テーマ",
+ "dark_mode": "ダークモード",
+ "version": "バージョン",
+ "post": "役職",
+ "follower": "フォロワー",
+ "sign_up": "サインアップ",
+ "input_id": "アカウントを入力してください",
+ "default": "デフォルト",
+ "brown": "褐色",
+ "pink": "ピンク",
+ "orange": "オレンジ",
+ "green": "緑",
+ "monday": "月曜",
+ "tuesday": "火曜日",
+ "wednesday": "水曜日",
+ "thursday": "木曜日",
+ "friday": "金曜日",
+ "saturday": "土曜日",
+ "sunday": "日曜日",
+ "day_off": "休みの日",
+ "close": "閉じる",
+ "pull_down_refresh": "プルダウンリフレッシュ",
+ "refreshing": "更新しています...",
+ "refresh_completed": "更新が完了しました",
+ "release_to_refresh": "リリースして更新",
+ "release_to_load_more": "解放してさらに読み込む",
+ "pull_to_load_more": "引き上げてさらにロード",
+ "explore_product": "製品を探す",
+ "view_list": "リストを表示"
+}
diff --git a/assets/locale/km.json b/assets/locale/km.json
new file mode 100644
index 0000000..265b742
--- /dev/null
+++ b/assets/locale/km.json
@@ -0,0 +1,132 @@
+{
+ "home": "ផ្ទះ",
+ "wish_list": "បញ្ជីប្រាថ្នា",
+ "message": "សារ",
+ "notification": "ការជូនដំណឹង",
+ "account": "គណនី",
+ "change_language": "ប្ដូរភាសា",
+ "dynamic_theme": "ទូរស័ព្ទប្រព័ន្ធ",
+ "always_on": "បើកជានិច្ច",
+ "always_off": "បិទជានិច្ច",
+ "about_us": "អំពីពួកយើង",
+ "who_we_are": "យើងជានរណា ?",
+ "what_we_do": "តើយើងធ្វើអ្វី?",
+ "meet_our_team": "ជួបជាមួយក្រុមរបស់យើង",
+ "category": "ប្រភេទ",
+ "search": "ស្វែងរក",
+ "category_not_found": "រកមិនឃើញចំណាត់ថ្នាក់",
+ "password": "ពាក្យសម្ងាត់",
+ "change_password": "ផ្លាស់ប្តូរពាក្យសម្ងាត់",
+ "input_your_password": "បញ្ចូលពាក្យសម្ងាត់របស់អ្នក",
+ "confirm_password": "បញ្ជាក់ពាក្យសម្ងាត់",
+ "confirm_your_password": "បញ្ជាក់ពាក្យសម្ងាត់របស់អ្នក",
+ "confirm": "បញ្ជាក់",
+ "type_something": "វាយអ្វីមួយ ...",
+ "location": "ទីតាំង",
+ "apply": "អនុវត្ត",
+ "contact_us": "ទាក់ទងមកពួកយើង",
+ "send": "ផ្ញើ",
+ "name": "ឈ្មោះ",
+ "input_name": "បញ្ចូលឈ្មោះរបស់អ្នក",
+ "email": "អ៊ីមែល",
+ "input_email": "បញ្ចូលអ៊ីមែលរបស់អ្នក",
+ "information": "ព័ត៌មាន",
+ "input_information": "បញ្ចូលព័ត៌មានរបស់អ្នក",
+ "value_not_empty": "ការបញ្ចូលមិនទទេ",
+ "value_not_valid_range": "ការបញ្ចូលជួរមិនត្រឹមត្រូវ",
+ "value_not_valid_email": "ការបញ្ចូលមិនមានអ៊ីមែលត្រឹមត្រូវ",
+ "value_not_valid_phone": "ការបញ្ចូលមិនមានទូរស័ព្ទត្រឹមត្រូវ",
+ "value_not_valid_password": "ការបញ្ចូលពាក្យសម្ងាត់មិនត្រឹមត្រូវ",
+ "value_not_valid_id": "ការបញ្ចូលមិនមានអត្តសញ្ញាណប័ណ្ណត្រឹមត្រូវ",
+ "edit_profile": "កែប្រែពត៌មាន",
+ "address": "អាសយដ្ឋាន",
+ "input_address": "បញ្ចូលអាសយដ្ឋានរបស់អ្នក",
+ "website": "គេហទំព័រ",
+ "input_website": "បញ្ចូលគេហទំព័ររបស់អ្នក",
+ "feedback": "មតិប្រតិកម្ម",
+ "replay": "ចាក់ឡើងវិញ",
+ "tap_rate": "ប៉ះផ្កាយដើម្បីវាយតម្លៃ",
+ "title": "ចំណងជើង",
+ "input_title": "បញ្ចូលចំណងជើងរបស់អ្នក",
+ "description": "ការពិពណ៌នា",
+ "input_feedback": "បញ្ចូលមតិត្រឡប់របស់អ្នក",
+ "filter": "ត្រង",
+ "facilities": "គ្រឿងបរិក្ខារ",
+ "area": "តំបន់",
+ "select_location": "ជ្រើសរើសទីតាំង",
+ "price_range": "ជួរតម្លៃ",
+ "avg_price": "តម្លៃ AVG",
+ "business_color": "ពណ៌អាជីវកម្ម",
+ "open_time": "ពេលវេលាបើកចំហ",
+ "start_time": "ពេលវេលាចាប់ផ្តើម",
+ "end_time": "ពេលវេលាបញ្ចប់",
+ "rating": "ការវាយតម្លៃ",
+ "font": "ពុម្ពអក្សរ",
+ "forgot_password": "ភ្លេចលេខសំងាត់",
+ "reset_password": "កំណត់ពាក្យសម្ងាត់ឡើងវិញ",
+ "search_location": "ស្វែងរកទីតាំង",
+ "more": "ច្រើនទៀត",
+ "popular_location": "ទីតាំងពេញនិយម",
+ "let_find_interesting": "សូមស្វែងយល់នូវអ្វីដែលគួរឱ្យចាប់អារម្មណ៍បំផុត",
+ "recent_location": "ទីតាំងថ្មីៗ",
+ "what_happen": "អ្វីដែលអាចកើតឡើង",
+ "shopping": "ដើរទិញឥវ៉ាន់",
+ "shopping_intro": "យីហោដែលខ្ញុំចូលចិត្តនិងនិន្នាការពេញនិយមបំផុត។",
+ "payment": "ការទូទាត់",
+ "payment_intro": "ដៃគូអាជីវកម្មតាមអ៊ិនធរណេតរបស់អ្នក។",
+ "location_intro": "ទីតាំងសហគមន៍ការរស់នៅប្រកបដោយគុណភាព។ វាចាប់ផ្តើមនៅទីនេះ!",
+ "lasted_post": "ប្រកាសចុងក្រោយ",
+ "oldest_post": "ប៉ុស្តិ៍ចាស់ជាងគេ",
+ "most_view": "ការមើលច្រើនបំផុត",
+ "review_rating": "ការវាយតម្លៃឡើងវិញ",
+ "delete": "លុប",
+ "image": "រូបភាព",
+ "phone": "ទូរស័ព្ទ",
+ "date_established": "កាលបរិច្ឆេទបង្កើតឡើង",
+ "featured": "លក្ខណៈពិសេស",
+ "nearly": "ជិតហើយ",
+ "related": "ពាក់ព័ន្ធ",
+ "profile": "ប្រវត្តិរូប",
+ "sign_in": "ចូល",
+ "sign_out": "ចាកចេញ",
+ "setting": "ការកំណត់",
+ "review": "ការពិនិត្យឡើងវិញ",
+ "write": "សរសេរ",
+ "out_of": "ចេញពី",
+ "loading": "កំពុងផ្ទុក ...",
+ "search_title": "ស្វែងរក",
+ "search_history": "ប្រវត្តិស្វែងរក",
+ "discover_more": "ស្វែងយល់បន្ថែម",
+ "recently_viewed": "បានមើលថ្មីៗ",
+ "clear": "ច្បាស់",
+ "language": "ភាសា",
+ "theme": "ស្បែក",
+ "dark_mode": "របៀបងងឹត",
+ "version": "កំណែ",
+ "post": "ប្រកាស",
+ "follower": "អ្នកតាម",
+ "sign_up": "ចុះឈ្មោះ",
+ "input_id": "បញ្ចូលគណនីរបស់អ្នក",
+ "default": "លំនាំដើម",
+ "brown": "ត្នោត",
+ "pink": "ពណ៌ផ្កាឈូក",
+ "orange": "ទឹកក្រូច",
+ "green": "បៃតង",
+ "monday": "ថ្ងៃច័ន្ទ",
+ "tuesday": "ថ្ងៃអង្គារ",
+ "wednesday": "ថ្ងៃពុធ",
+ "thursday": "ថ្ងៃព្រហស្បតិ៍",
+ "friday": "ថ្ងៃសុក្រ",
+ "saturday": "ថ្ងៃសៅរ៍",
+ "sunday": "ថ្ងៃអាទិត្យ",
+ "day_off": "ថ្ងៃឈប់សម្រាក",
+ "close": "បិទ",
+ "pull_down_refresh": "ទាញធ្វើឱ្យស្រស់",
+ "refreshing": "កំពុងធ្វើឱ្យស្រស់ ...",
+ "refresh_completed": "បានបញ្ចប់ការផ្ទុកឡើងវិញ",
+ "release_to_refresh": "ដោះលែងដើម្បីធ្វើឱ្យស្រស់",
+ "release_to_load_more": "ចេញផ្សាយដើម្បីផ្ទុកបន្ថែមទៀត",
+ "pull_to_load_more": "ទាញឡើងដើម្បីផ្ទុកបន្ថែម",
+ "explore_product": "ស្វែងរកផលិតផល",
+ "view_list": "មើលបញ្ជី"
+}
diff --git a/assets/locale/ko.json b/assets/locale/ko.json
new file mode 100644
index 0000000..89c27b6
--- /dev/null
+++ b/assets/locale/ko.json
@@ -0,0 +1,132 @@
+{
+ "home": "집",
+ "wish_list": "위시리스트",
+ "message": "메시지",
+ "notification": "공고",
+ "account": "계정",
+ "change_language": "언어 변경",
+ "dynamic_theme": "시스템 전화",
+ "always_on": "항상 켜기",
+ "always_off": "항상 끄기",
+ "about_us": "회사 소개",
+ "who_we_are": "우리는 누구입니까?",
+ "what_we_do": "우리는 무엇을합니까?",
+ "meet_our_team": "우리의 팀을 만나",
+ "category": "범주",
+ "search": "검색 ...",
+ "category_not_found": "카테고리를 찾을 수 없습니다",
+ "password": "암호",
+ "change_password": "비밀번호 변경",
+ "input_your_password": "비밀번호를 입력하십시오",
+ "confirm_password": "비밀번호 확인",
+ "confirm_your_password": "암호를 확인",
+ "confirm": "확인",
+ "type_something": "뭔가를 입력하십시오 ...",
+ "location": "위치",
+ "apply": "대다",
+ "contact_us": "문의하기",
+ "send": "보내다",
+ "name": "이름",
+ "input_name": "당신의 이름을 입력",
+ "email": "이메일",
+ "input_email": "이메일을 입력하십시오",
+ "information": "정보",
+ "input_information": "정보를 입력하십시오",
+ "value_not_empty": "입력이 비어 있지 않습니다",
+ "value_not_valid_range": "유효하지 않은 입력 범위",
+ "value_not_valid_email": "유효하지 않은 이메일 입력",
+ "value_not_valid_phone": "잘못된 전화 번호를 입력했습니다",
+ "value_not_valid_password": "유효하지 않은 비밀번호를 입력했습니다",
+ "value_not_valid_id": "유효하지 않은 ID를 입력했습니다",
+ "edit_profile": "프로필 수정",
+ "address": "주소",
+ "input_address": "주소를 입력하십시오",
+ "website": "웹 사이트",
+ "input_website": "귀하의 웹 사이트를 입력하십시오",
+ "feedback": "피드백",
+ "replay": "다시 하다",
+ "tap_rate": "별표를 탭하여 평가",
+ "title": "표제",
+ "input_title": "제목을 입력하십시오",
+ "description": "기술",
+ "input_feedback": "의견을 입력하세요",
+ "filter": "필터",
+ "facilities": "시설",
+ "area": "지역",
+ "select_location": "위치를 선택하십시오",
+ "price_range": "가격 범위",
+ "avg_price": "AVG 가격",
+ "business_color": "비즈니스 컬러",
+ "open_time": "영업 시간",
+ "start_time": "시작 시간",
+ "end_time": "종료 시간",
+ "rating": "평가",
+ "font": "폰트",
+ "forgot_password": "비밀번호를 잊으 셨나요",
+ "reset_password": "암호를 재설정",
+ "search_location": "위치 검색",
+ "more": "더",
+ "popular_location": "인기있는 위치",
+ "let_find_interesting": "가장 흥미로운 것들을 찾아 보자",
+ "recent_location": "최근 위치",
+ "what_happen": "일어날 수있는 일",
+ "shopping": "쇼핑",
+ "shopping_intro": "좋아하는 브랜드와 인기 트렌드.",
+ "payment": "지불",
+ "payment_intro": "전략적 온라인 비즈니스 파트너.",
+ "location_intro": "위치, 지역 사회, 양질의 생활. 여기에서 시작합니다!",
+ "lasted_post": "지속 된 게시물",
+ "oldest_post": "가장 오래된 포스트",
+ "most_view": "대부분의 조회수",
+ "review_rating": "평가 등급",
+ "delete": "지우다",
+ "image": "영상",
+ "phone": "전화",
+ "date_established": "설립일",
+ "featured": "특집",
+ "nearly": "거의",
+ "related": "관련",
+ "profile": "프로필",
+ "sign_in": "로그인",
+ "sign_out": "로그 아웃",
+ "setting": "환경",
+ "review": "리뷰",
+ "write": "쓰다",
+ "out_of": "밖으로",
+ "loading": "불러오는 중 ...",
+ "search_title": "검색",
+ "search_history": "검색 기록",
+ "discover_more": "더 발견하다",
+ "recently_viewed": "최근에 본",
+ "clear": "명확한",
+ "language": "언어",
+ "theme": "테마",
+ "dark_mode": "다크 모드",
+ "version": "버전",
+ "post": "게시하다",
+ "follower": "수행원",
+ "sign_up": "가입하기",
+ "input_id": "계정을 입력하십시오",
+ "default": "기본",
+ "brown": "갈색",
+ "pink": "분홍",
+ "orange": "주황색",
+ "green": "초록",
+ "monday": "월요일",
+ "tuesday": "화요일",
+ "wednesday": "수요일",
+ "thursday": "목요일",
+ "friday": "금요일",
+ "saturday": "토요일",
+ "sunday": "일요일",
+ "day_off": "휴일",
+ "close": "닫기",
+ "pull_down_refresh": "새로 고침 풀다운",
+ "refreshing": "새로 고침 중 ...",
+ "refresh_completed": "새로 고침 완료",
+ "release_to_refresh": "새로 고침하려면 놓습니다",
+ "release_to_load_more": "더로드하려면 놓으십시오",
+ "pull_to_load_more": "더로드하려면 위로 당기십시오",
+ "explore_product": "제품 둘러보기",
+ "view_list": "리스트보기"
+}
diff --git a/assets/locale/lo.json b/assets/locale/lo.json
new file mode 100644
index 0000000..f4ea5b0
--- /dev/null
+++ b/assets/locale/lo.json
@@ -0,0 +1,132 @@
+{
+ "home": "ເຮືອນ",
+ "wish_list": "ລາຍການທີ່ຕ້ອງການ",
+ "message": "ຂໍ້ຄວາມ",
+ "notification": "ແຈ້ງການ",
+ "account": "ບັນຊີ",
+ "change_language": "ປ່ຽນພາສາ",
+ "dynamic_theme": "ໂທລະສັບລະບົບ",
+ "always_on": "ສະເຫມີໄປ",
+ "always_off": "ເບີຢູ່ສະ ເໝີ",
+ "about_us": "ກ່ຽວກັບພວກເຮົາ",
+ "who_we_are": "ພວກເຮົາແມ່ນໃຜ ?",
+ "what_we_do": "ພວກເຮົາເຮັດຫຍັງ ?",
+ "meet_our_team": "ພົບກັບທິມງານຂອງພວກເຮົາ",
+ "category": "ໝວດ",
+ "search": "ຄົ້ນຫາ ...",
+ "category_not_found": "ບໍ່ພົບ ໝວດ ໝູ່",
+ "password": "ລະຫັດຜ່ານ",
+ "change_password": "ປ່ຽນລະຫັດຜ່ານ",
+ "input_your_password": "ປ້ອນລະຫັດຜ່ານຂອງທ່ານ",
+ "confirm_password": "ຢືນຢັນລະຫັດ",
+ "confirm_your_password": "ຢືນຢັນລະຫັດຜ່ານຂອງທ່ານ",
+ "confirm": "ຢືນຢັນ",
+ "type_something": "ພິມບາງສິ່ງບາງຢ່າງ ...",
+ "location": "ສະຖານທີ່",
+ "apply": "ສະ ໝັກ",
+ "contact_us": "ຕິດຕໍ່ພວກເຮົາ",
+ "send": "ສົ່ງ",
+ "name": "ຊື່",
+ "input_name": "ປ້ອນຊື່ຂອງທ່ານ",
+ "email": "ອີເມວ",
+ "input_email": "ປ້ອນອີເມວຂອງທ່ານ",
+ "information": "ຂໍ້ມູນ",
+ "input_information": "ປ້ອນຂໍ້ມູນຂອງທ່ານ",
+ "value_not_empty": "ການປ້ອນຂໍ້ມູນບໍ່ແມ່ນວ່າງເປົ່າ",
+ "value_not_valid_range": "ການປ້ອນຂໍ້ມູນບໍ່ມີລະດັບທີ່ຖືກຕ້ອງ",
+ "value_not_valid_email": "ການປ້ອນຂໍ້ມູນບໍ່ແມ່ນອີເມວທີ່ຖືກຕ້ອງ",
+ "value_not_valid_phone": "ການປ້ອນຂໍ້ມູນໂທລະສັບບໍ່ຖືກຕ້ອງ",
+ "value_not_valid_password": "ການປ້ອນຂໍ້ມູນບໍ່ຖືກຕ້ອງລະຫັດຜ່ານ",
+ "value_not_valid_id": "ການປ້ອນຂໍ້ມູນບໍ່ຖືກຕ້ອງ",
+ "edit_profile": "ແກ້ໄຂຂໍ້ມູນ",
+ "address": "ທີ່ຢູ່",
+ "input_address": "ປ້ອນທີ່ຢູ່ຂອງທ່ານ",
+ "website": "ເວບໄຊທ໌",
+ "input_website": "ປ້ອນເວັບໄຊທ໌ຂອງທ່ານ",
+ "feedback": "ຄຳ ຕິຊົມ",
+ "replay": "ເປີດ ໃໝ່",
+ "tap_rate": "ແຕະດາວເພື່ອໃຫ້ຄະແນນ",
+ "title": "ຫົວຂໍ້",
+ "input_title": "ປ້ອນຫົວຂໍ້ຂອງທ່ານ",
+ "description": "ລາຍລະອຽດ",
+ "input_feedback": "ໃສ່ ຄຳ ຕິຊົມຂອງທ່ານ",
+ "filter": "ການກັ່ນຕອງ",
+ "facilities": "ສິ່ງ ອຳ ນວຍຄວາມສະດວກ",
+ "area": "ພື້ນທີ່",
+ "select_location": "ເລືອກສະຖານທີ່",
+ "price_range": "ລະດັບລາຄາ",
+ "avg_price": "ລາຄາ AVG",
+ "business_color": "ສີທຸລະກິດ",
+ "open_time": "ເວລາເປີດ",
+ "start_time": "ເວລາເລີ່ມຕົ້ນ",
+ "end_time": "ເວລາສິ້ນສຸດ",
+ "rating": "ການໃຫ້ຄະແນນ",
+ "font": "ຕົວອັກສອນ",
+ "forgot_password": "ລືມລະຫັດຜ່ານ",
+ "reset_password": "ຕັ້ງລະຫັດຜ່ານຄືນ",
+ "search_location": "ສະຖານທີ່ຄົ້ນຫາ",
+ "more": "ຫຼາຍ",
+ "popular_location": "ສະຖານທີ່ທີ່ນິຍົມ",
+ "let_find_interesting": "ໃຫ້ເຮົາຄົ້ນຫາສິ່ງທີ່ ໜ້າ ສົນໃຈທີ່ສຸດ",
+ "recent_location": "ສະຖານທີ່ທີ່ຜ່ານມາ",
+ "what_happen": "ສິ່ງທີ່ອາດຈະເກີດຂື້ນ",
+ "shopping": "ຊື້ເຄື່ອງ",
+ "shopping_intro": "ຍີ່ຫໍ້ທີ່ມັກແລະແນວໂນ້ມທີ່ຮ້ອນທີ່ສຸດ.",
+ "payment": "ການຈ່າຍເງິນ",
+ "payment_intro": "ຄູ່ຮ່ວມທຸລະກິດທາງຍຸດທະສາດຂອງທ່ານ.",
+ "location_intro": "ສະຖານທີ່, ຊຸມຊົນ, ການ ດຳ ລົງຊີວິດທີ່ມີຄຸນນະພາບ. ມັນເລີ່ມຕົ້ນທີ່ນີ້!",
+ "lasted_post": "ຕອບຫຼ້າສຸດ",
+ "oldest_post": "Post ເກົ່າແກ່ທີ່ສຸດ",
+ "most_view": "ການເບິ່ງຫລາຍທີ່ສຸດ",
+ "review_rating": "ການໃຫ້ຄະແນນການທົບທວນຄືນ",
+ "delete": "ລົບ",
+ "image": "ຮູບພາບ",
+ "phone": "ໂທລະສັບ",
+ "date_established": "ວັນສ້າງຕັ້ງ",
+ "featured": "ທີ່ໂດດເດັ່ນ",
+ "nearly": "ເກືອບ",
+ "related": "ທີ່ກ່ຽວຂ້ອງ",
+ "profile": "ຂໍ້ມູນ",
+ "sign_in": "ເຂົ້າສູ່ລະບົບ",
+ "sign_out": "ອອກຈາກລະບົບ",
+ "setting": "ການຕັ້ງຄ່າ",
+ "review": "ການທົບທວນຄືນ",
+ "write": "ຂຽນ",
+ "out_of": "ອອກຈາກ",
+ "loading": "ກຳ ລັງໂຫລດ ...",
+ "search_title": "ຄົ້ນຫາ",
+ "search_history": "ປະຫວັດການຄົ້ນຫາ",
+ "discover_more": "ຄົ້ນພົບຕື່ມອີກ",
+ "recently_viewed": "ເມື່ອມໍ່ໆມານີ້ເບິ່ງ",
+ "clear": "ແຈ້ງ",
+ "language": "ພາສາ",
+ "theme": "ຫົວຂໍ້",
+ "dark_mode": "ຮູບແບບມືດ",
+ "version": "ຮຸ່ນ",
+ "post": "ໂພສ",
+ "follower": "ຜູ້ຕິດຕາມ",
+ "sign_up": "ລົງທະບຽນ",
+ "input_id": "ປ້ອນບັນຊີຂອງທ່ານ",
+ "default": "ເລີ່ມຕົ້ນ",
+ "brown": "ສີນ້ ຳ ຕານ",
+ "pink": "ສີບົວ",
+ "orange": "ສົ້ມ",
+ "green": "ສີຂຽວ",
+ "monday": "ວັນຈັນ",
+ "tuesday": "ວັນອັງຄານ",
+ "wednesday": "ວັນພຸດ",
+ "thursday": "ວັນພະຫັດ",
+ "friday": "ວັນສຸກ",
+ "saturday": "ວັນເສົາ",
+ "sunday": "ວັນອາທິດ",
+ "day_off": "ມື້ພັກ",
+ "close": "ປິດ",
+ "pull_down_refresh": "ດຶງການໂຫຼດຫນ້າຈໍຄືນ",
+ "refreshing": "ກຳ ລັງ ໃໝ່ ...",
+ "refresh_completed": "ການໂຫຼດ ໜ້າ ຈໍ ສຳ ເລັດແລ້ວ",
+ "release_to_refresh": "ປ່ອຍເພື່ອສົດຊື່ນ",
+ "release_to_load_more": "ປ່ອຍເພື່ອໃຫ້ໂຫລດຫຼາຍ",
+ "pull_to_load_more": "ດຶງຂຶ້ນມາເພື່ອໂຫຼດຫຼາຍ",
+ "explore_product": "ສຳ ຫຼວດຜະລິດຕະພັນ",
+ "view_list": "ເບິ່ງບັນຊີລາຍຊື່"
+}
diff --git a/assets/locale/nl.json b/assets/locale/nl.json
new file mode 100644
index 0000000..3484c08
--- /dev/null
+++ b/assets/locale/nl.json
@@ -0,0 +1,132 @@
+{
+ "home": "Huis",
+ "wish_list": "Verlanglijst",
+ "message": "Berichten",
+ "notification": "Kennisgeving",
+ "account": "Account",
+ "change_language": "Wijzig taal",
+ "dynamic_theme": "Systeemtelefoon",
+ "always_on": "Altijd aan",
+ "always_off": "Altijd uit",
+ "about_us": "Over ons",
+ "who_we_are": "WIE WE ZIJN ?",
+ "what_we_do": "WAT WE DOEN ?",
+ "meet_our_team": "ONTMOET ONS TEAM",
+ "category": "Categorie",
+ "search": "Zoeken ...",
+ "category_not_found": "Categorie niet gevonden",
+ "password": "Wachtwoord",
+ "change_password": "Verander wachtwoord",
+ "input_your_password": "Voer uw wachtwoord in",
+ "confirm_password": "bevestig wachtwoord",
+ "confirm_your_password": "Bevestig je wachtwoord",
+ "confirm": "Bevestigen",
+ "type_something": "Typ iets...",
+ "location": "Plaats",
+ "apply": "Van toepassing zijn",
+ "contact_us": "Neem contact op",
+ "send": "Sturen",
+ "name": "Naam",
+ "input_name": "Voer uw naam in",
+ "email": "E-mail",
+ "input_email": "Voer uw e-mailadres in",
+ "information": "Informatie",
+ "input_information": "Voer uw gegevens in",
+ "value_not_empty": "Invoer is niet leeg",
+ "value_not_valid_range": "Invoer niet geldig bereik",
+ "value_not_valid_email": "Voer geen geldige e-mail in",
+ "value_not_valid_phone": "Invoer ongeldige telefoon",
+ "value_not_valid_password": "Voer een ongeldig wachtwoord in",
+ "value_not_valid_id": "Voer een ongeldige ID in",
+ "edit_profile": "Bewerk profiel",
+ "address": "Adres",
+ "input_address": "Voer uw adres in",
+ "website": "Website",
+ "input_website": "Voer uw website in",
+ "feedback": "Feedback",
+ "replay": "Herhaling",
+ "tap_rate": "Tik op een ster om te beoordelen",
+ "title": "Titel",
+ "input_title": "Voer uw titel in",
+ "description": "Beschrijving",
+ "input_feedback": "Voer uw feedback in",
+ "filter": "Filter",
+ "facilities": "Voorzieningen",
+ "area": "Oppervlakte",
+ "select_location": "Selecteer een locatie",
+ "price_range": "Prijsklasse",
+ "avg_price": "AVG-prijs",
+ "business_color": "Zakelijke kleur",
+ "open_time": "Openingsuren",
+ "start_time": "Starttijd",
+ "end_time": "Eindtijd",
+ "rating": "Beoordeling",
+ "font": "Lettertype",
+ "forgot_password": "Wachtwoord vergeten",
+ "reset_password": "Wachtwoord opnieuw instellen",
+ "search_location": "Zoek locatie",
+ "more": "Meer",
+ "popular_location": "Populaire locatie",
+ "let_find_interesting": "Laten we eens kijken wat de meest interessante dingen zijn",
+ "recent_location": "Recente locatie",
+ "what_happen": "Wat kan er gebeuren?",
+ "shopping": "Boodschappen doen",
+ "shopping_intro": "Favoriete merken en populairste trends.",
+ "payment": "Betaling",
+ "payment_intro": "Uw strategische online zakenpartner.",
+ "location_intro": "Locatie, gemeenschap, kwaliteit van leven. Het begint hier!",
+ "lasted_post": "Duurde bericht",
+ "oldest_post": "Oudste bericht",
+ "most_view": "De meeste weergaven",
+ "review_rating": "Beoordeling beoordelen",
+ "delete": "Verwijderen",
+ "image": "Beeld",
+ "phone": "Telefoon",
+ "date_established": "datum Opgericht",
+ "featured": "Aanbevolen",
+ "nearly": "Bijna",
+ "related": "Verwant",
+ "profile": "Profiel",
+ "sign_in": "Log in",
+ "sign_out": "Afmelden",
+ "setting": "Omgeving",
+ "review": "Recensies",
+ "write": "Schrijven",
+ "out_of": "Uit",
+ "loading": "Bezig met laden...",
+ "search_title": "Zoeken",
+ "search_history": "Zoek geschiedenis",
+ "discover_more": "Ontdek meer",
+ "recently_viewed": "Recent bekeken",
+ "clear": "Doorzichtig",
+ "language": "Taal",
+ "theme": "Thema",
+ "dark_mode": "Donkere modus",
+ "version": "Versie",
+ "post": "Post",
+ "follower": "Volger",
+ "sign_up": "Inschrijven",
+ "input_id": "Voer uw account in",
+ "default": "Standaard",
+ "brown": "Bruin",
+ "pink": "Roze",
+ "orange": "Oranje",
+ "green": "Groen",
+ "monday": "maandag",
+ "tuesday": "dinsdag",
+ "wednesday": "woensdag",
+ "thursday": "donderdag",
+ "friday": "vrijdag",
+ "saturday": "zaterdag",
+ "sunday": "zondag",
+ "day_off": "Vrije dag",
+ "close": "Dichtbij",
+ "pull_down_refresh": "Trek vernieuwen naar beneden",
+ "refreshing": "Verfrissend...",
+ "refresh_completed": "Vernieuwen voltooid",
+ "release_to_refresh": "Laat los om te verversen",
+ "release_to_load_more": "Laat los om meer te laden",
+ "pull_to_load_more": "Trek omhoog om meer te laden",
+ "explore_product": "Ontdek Product",
+ "view_list": "Weergave lijst"
+}
diff --git a/assets/locale/vi.json b/assets/locale/vi.json
new file mode 100644
index 0000000..82a2a71
--- /dev/null
+++ b/assets/locale/vi.json
@@ -0,0 +1,132 @@
+{
+ "home": "Trang Chủ",
+ "wish_list": "Danh sách mong muốn",
+ "message": "Tin nhắn",
+ "notification": "Thông báo",
+ "account": "Tài khoản",
+ "change_language": "Thay đổi ngôn ngữ",
+ "dynamic_theme": "Điện thoại hệ thống",
+ "always_on": "Luôn luôn",
+ "always_off": "Luôn luôn tắt",
+ "about_us": "Về chúng tôi",
+ "who_we_are": "CHÚNG TA LÀ AI ?",
+ "what_we_do": "CHÚNG TA LÀM GÌ ?",
+ "meet_our_team": "GẶP ĐỘI CỦA CHÚNG TÔI",
+ "category": "thể loại",
+ "search": "Tìm kiếm ...",
+ "category_not_found": "Không tìm thấy danh mục",
+ "password": "Mật khẩu",
+ "change_password": "Đổi mật khẩu",
+ "input_your_password": "Nhập mật khẩu của bạn",
+ "confirm_password": "Xác nhận mật khẩu",
+ "confirm_your_password": "Xác nhận mật khẩu của bạn",
+ "confirm": "Xác nhận",
+ "type_something": "Nhập một cái gì đó ...",
+ "location": "Vị trí",
+ "apply": "Ứng dụng",
+ "contact_us": "Liên hệ chúng tôi",
+ "send": "Gửi",
+ "name": "Tên",
+ "input_name": "Nhập tên của bạn",
+ "email": "E-mail",
+ "input_email": "Nhập email của bạn",
+ "information": "Thông tin",
+ "input_information": "Nhập thông tin của bạn",
+ "value_not_empty": "Đầu vào không trống",
+ "value_not_valid_range": "Phạm vi đầu vào không hợp lệ",
+ "value_not_valid_email": "Đầu vào email không hợp lệ",
+ "value_not_valid_phone": "Điện thoại nhập không hợp lệ",
+ "value_not_valid_password": "Nhập mật khẩu không hợp lệ",
+ "value_not_valid_id": "ID không hợp lệ",
+ "edit_profile": "Chỉnh sửa hồ sơ",
+ "address": "Địa chỉ",
+ "input_address": "Nhập địa chỉ của bạn",
+ "website": "Trang mạng",
+ "input_website": "Nhập trang web của bạn",
+ "feedback": "Phản hồi",
+ "replay": "phát lại",
+ "tap_rate": "Nhấn vào một ngôi sao để xếp hạng",
+ "title": "Tiêu đề",
+ "input_title": "Nhập tiêu đề của bạn",
+ "description": "Sự miêu tả",
+ "input_feedback": "Nhập phản hồi của bạn",
+ "filter": "Bộ lọc",
+ "facilities": "Cơ sở vật chất",
+ "area": "Khu vực",
+ "select_location": "Chọn địa điểm",
+ "price_range": "Phạm vi giá",
+ "avg_price": "Giá AVG",
+ "business_color": "Màu kinh doanh",
+ "open_time": "Thời gian mở",
+ "start_time": "Thời gian bắt đầu",
+ "end_time": "Thời gian kết thúc",
+ "rating": "Xếp hạng",
+ "font": "Phông chữ",
+ "forgot_password": "Quên mật khẩu",
+ "reset_password": "Đặt lại mật khẩu",
+ "search_location": "Địa điểm tìm kiếm",
+ "more": "Hơn",
+ "popular_location": "Địa điểm nổi tiếng",
+ "let_find_interesting": "Hãy tìm hiểu những điều thú vị nhất",
+ "recent_location": "Địa điểm gần đây",
+ "what_happen": "Điều gì có thể xảy ra",
+ "shopping": "Mua sắm",
+ "shopping_intro": "Thương hiệu yêu thích và xu hướng nóng nhất.",
+ "payment": "Thanh toán",
+ "payment_intro": "Đối tác kinh doanh trực tuyến chiến lược của bạn.",
+ "location_intro": "Địa điểm, Cộng đồng, Cuộc sống Chất lượng. Nó bắt đầu từ đây!",
+ "lasted_post": "Bài cuối",
+ "oldest_post": "Bài cũ nhất",
+ "most_view": "Lượt xem nhiều nhất",
+ "review_rating": "Đánh giá xếp hạng",
+ "delete": "Xóa bỏ",
+ "image": "Hình ảnh",
+ "phone": "Điện thoại",
+ "date_established": "Ngày thành lập",
+ "featured": "Đặc sắc",
+ "nearly": "Gần",
+ "related": "Liên quan",
+ "profile": "Hồ sơ",
+ "sign_in": "Đăng nhập",
+ "sign_out": "Đăng xuất",
+ "setting": "Cài đặt",
+ "review": "Nhận xét",
+ "write": "Viết",
+ "out_of": "Hết",
+ "loading": "Đang tải...",
+ "search_title": "Tìm kiếm",
+ "search_history": "Lịch sử tìm kiếm",
+ "discover_more": "Khám phá nhiều hơn",
+ "recently_viewed": "Đã xem gần đây",
+ "clear": "Thông thoáng",
+ "language": "Ngôn ngữ",
+ "theme": "Chủ đề",
+ "dark_mode": "Chế độ tối",
+ "version": "Phiên bản",
+ "post": "Bài đăng",
+ "follower": "Người theo dõi",
+ "sign_up": "Đăng ký",
+ "input_id": "Nhập tài khoản của bạn",
+ "default": "Mặc định",
+ "brown": "nâu",
+ "pink": "Hồng",
+ "orange": "trái cam",
+ "green": "màu xanh lá",
+ "monday": "Thứ hai",
+ "tuesday": "Thứ ba",
+ "wednesday": "Thứ tư",
+ "thursday": "Thứ năm",
+ "friday": "Thứ sáu",
+ "saturday": "ngày thứ bảy",
+ "sunday": "chủ nhật",
+ "day_off": "Ngày nghỉ",
+ "close": "Đóng",
+ "pull_down_refresh": "Kéo xuống làm mới",
+ "refreshing": "Làm mới ...",
+ "refresh_completed": "Làm mới hoàn thành",
+ "release_to_refresh": "Phát hành để làm mới",
+ "release_to_load_more": "Phát hành để tải thêm",
+ "pull_to_load_more": "Kéo lên để tải thêm",
+ "explore_product": "Khám phá sản phẩm",
+ "view_list": "Xem danh sách"
+}
diff --git a/assets/locale/zh.json b/assets/locale/zh.json
new file mode 100644
index 0000000..2e7581b
--- /dev/null
+++ b/assets/locale/zh.json
@@ -0,0 +1,132 @@
+{
+ "home": "家",
+ "wish_list": "心愿单",
+ "message": "留言内容",
+ "notification": "通知",
+ "account": "帐户",
+ "change_language": "改变语言",
+ "dynamic_theme": "系统电话",
+ "always_on": "永远在线",
+ "always_off": "总是关闭",
+ "about_us": "关于我们",
+ "who_we_are": "我们是谁 ?",
+ "what_we_do": "我们所做的 ?",
+ "meet_our_team": "认识我们的团队",
+ "category": "类别",
+ "search": "搜索...",
+ "category_not_found": "找不到类别",
+ "password": "密码",
+ "change_password": "更改密码",
+ "input_your_password": "输入密码",
+ "confirm_password": "确认密码",
+ "confirm_your_password": "确认你的密码",
+ "confirm": "确认",
+ "type_something": "输入一些东西...",
+ "location": "位置",
+ "apply": "应用",
+ "contact_us": "联系我们",
+ "send": "发送",
+ "name": "名称",
+ "input_name": "输入你的名字",
+ "email": "电子邮件",
+ "input_email": "输入您的电子邮件",
+ "information": "信息",
+ "input_information": "输入您的信息",
+ "value_not_empty": "输入不为空",
+ "value_not_valid_range": "输入无效范围",
+ "value_not_valid_email": "输入无效的电子邮件",
+ "value_not_valid_phone": "输入的电话无效",
+ "value_not_valid_password": "输入的密码无效",
+ "value_not_valid_id": "输入无效的ID",
+ "edit_profile": "编辑个人资料",
+ "address": "地址",
+ "input_address": "输入你的地址",
+ "website": "网站",
+ "input_website": "输入您的网站",
+ "feedback": "反馈",
+ "replay": "重播",
+ "tap_rate": "点按星星即可评分",
+ "title": "标题",
+ "input_title": "输入您的标题",
+ "description": "描述",
+ "input_feedback": "输入您的反馈",
+ "filter": "过滤",
+ "facilities": "设备",
+ "area": "区域",
+ "select_location": "选择位置",
+ "price_range": "价格范围",
+ "avg_price": "平均价格",
+ "business_color": "商业色彩",
+ "open_time": "开放时间",
+ "start_time": "开始时间",
+ "end_time": "时间结束",
+ "rating": "评分",
+ "font": "字形",
+ "forgot_password": "忘记密码",
+ "reset_password": "重设密码",
+ "search_location": "搜索位置",
+ "more": "更多",
+ "popular_location": "热门地点",
+ "let_find_interesting": "让我们找出最有趣的事情",
+ "recent_location": "最近位置",
+ "what_happen": "那会发生什么",
+ "shopping": "购物",
+ "shopping_intro": "最喜欢的品牌和最热门的趋势。",
+ "payment": "付款",
+ "payment_intro": "您的战略在线业务合作伙伴。",
+ "location_intro": "位置,社区,优质生活。它从这里开始!",
+ "lasted_post": "持续发布",
+ "oldest_post": "最旧的帖子",
+ "most_view": "大多数观看",
+ "review_rating": "评价等级",
+ "delete": "删除",
+ "image": "图片",
+ "phone": "电话",
+ "date_established": "成立日期",
+ "featured": "精选",
+ "nearly": "几乎",
+ "related": "有关",
+ "profile": "轮廓",
+ "sign_in": "登入",
+ "sign_out": "登出",
+ "setting": "设置",
+ "review": "评论",
+ "write": "写",
+ "out_of": "在......之外",
+ "loading": "载入中...",
+ "search_title": "搜索",
+ "search_history": "搜索历史记录",
+ "discover_more": "发现更多",
+ "recently_viewed": "最近浏览过的",
+ "clear": "明确",
+ "language": "语言",
+ "theme": "主题",
+ "dark_mode": "暗模式",
+ "version": "版",
+ "post": "发布",
+ "follower": "追随者",
+ "sign_up": "注册",
+ "input_id": "输入您的帐号",
+ "default": "默认",
+ "brown": "棕色",
+ "pink": "粉",
+ "orange": "橙子",
+ "green": "绿色",
+ "monday": "星期一",
+ "tuesday": "星期二",
+ "wednesday": "星期三",
+ "thursday": "星期四",
+ "friday": "星期五",
+ "saturday": "星期六",
+ "sunday": "星期日",
+ "day_off": "休假",
+ "close": "关",
+ "pull_down_refresh": "下拉刷新",
+ "refreshing": "正在刷新...",
+ "refresh_completed": "刷新完成",
+ "release_to_refresh": "释放刷新",
+ "release_to_load_more": "释放以加载更多",
+ "pull_to_load_more": "拉起以加载更多",
+ "explore_product": "探索产品",
+ "view_list": "查看清单"
+}
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..6b4c0f7
--- /dev/null
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 8.0
+
+
diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..e8efba1
--- /dev/null
+++ b/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Generated.xcconfig"
diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..399e934
--- /dev/null
+++ b/ios/Flutter/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Generated.xcconfig"
diff --git a/ios/Podfile b/ios/Podfile
new file mode 100644
index 0000000..1e8c3c9
--- /dev/null
+++ b/ios/Podfile
@@ -0,0 +1,41 @@
+# Uncomment this line to define a global platform for your project
+# platform :ios, '9.0'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_ios_build_settings(target)
+ end
+end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 0000000..b5d1b7f
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,34 @@
+PODS:
+ - Flutter (1.0.0)
+ - image_picker (0.0.1):
+ - Flutter
+ - shared_preferences (0.0.1):
+ - Flutter
+ - url_launcher (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - Flutter (from `Flutter`)
+ - image_picker (from `.symlinks/plugins/image_picker/ios`)
+ - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
+ - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
+
+EXTERNAL SOURCES:
+ Flutter:
+ :path: Flutter
+ image_picker:
+ :path: ".symlinks/plugins/image_picker/ios"
+ shared_preferences:
+ :path: ".symlinks/plugins/shared_preferences/ios"
+ url_launcher:
+ :path: ".symlinks/plugins/url_launcher/ios"
+
+SPEC CHECKSUMS:
+ Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
+ image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09
+ shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
+ url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
+
+PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
+
+COCOAPODS: 1.10.1
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..fa95b1f
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,595 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 923E169924431AA200D35845 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 923E169824431AA200D35845 /* GoogleService-Info.plist */; };
+ 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 */; };
+ CBEB752E65FC6CB6D6A71AD6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B60CB223184C5ED24B84A49 /* Pods_Runner.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* 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 = ""; };
+ 263764E540538D053E7E47F3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; 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 = ""; };
+ 7EBF5206239B9AEC00FA3132 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; };
+ 8B60CB223184C5ED24B84A49 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 923E169824431AA200D35845 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; 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 = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 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 = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ D3F9A3F4084D93F1D35D44BD /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ DB8F105C2156385117CE16BE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ CBEB752E65FC6CB6D6A71AD6 /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 419E50F7F167742DA13D404A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8B60CB223184C5ED24B84A49 /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ D47ECCD636798EBF7154A1EA /* Pods */,
+ 419E50F7F167742DA13D404A /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 7EBF5206239B9AEC00FA3132 /* Runner.entitlements */,
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 97C146F11CF9000F007C117D /* Supporting Files */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ 923E169824431AA200D35845 /* GoogleService-Info.plist */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ 97C146F11CF9000F007C117D /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+ D47ECCD636798EBF7154A1EA /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 263764E540538D053E7E47F3 /* Pods-Runner.debug.xcconfig */,
+ DB8F105C2156385117CE16BE /* Pods-Runner.release.xcconfig */,
+ D3F9A3F4084D93F1D35D44BD /* Pods-Runner.profile.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ CD483E5625382251E9C790C3 /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ 389916D673969572A174367F /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1240;
+ ORGANIZATIONNAME = "The Chromium Authors";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ DevelopmentTeam = 3C2ZJ87Z72;
+ LastSwiftMigration = 0910;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ 923E169924431AA200D35845 /* GoogleService-Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 389916D673969572A174367F /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
+ "${BUILT_PRODUCTS_DIR}/image_picker/image_picker.framework",
+ "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
+ "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+ CD483E5625382251E9C790C3 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ 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 = 12.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = 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;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CURRENT_PROJECT_VERSION = 2;
+ DEVELOPMENT_TEAM = 3C2ZJ87Z72;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ MARKETING_VERSION = 1.0.3;
+ PRODUCT_BUNDLE_IDENTIFIER = com.huynh.listarFlutter;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 4.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ 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;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ 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 = 12.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ 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_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ 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 = 12.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CURRENT_PROJECT_VERSION = 2;
+ DEVELOPMENT_TEAM = 3C2ZJ87Z72;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ MARKETING_VERSION = 1.0.3;
+ PRODUCT_BUNDLE_IDENTIFIER = com.huynh.listarFlutter;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 4.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CURRENT_PROJECT_VERSION = 2;
+ DEVELOPMENT_TEAM = 3C2ZJ87Z72;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ MARKETING_VERSION = 1.0.3;
+ PRODUCT_BUNDLE_IDENTIFIER = com.huynh.listarFlutter;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 4.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..46d2d0d
--- /dev/null
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
new file mode 100644
index 0000000..cea67b1
--- /dev/null
+++ b/ios/Runner/AppDelegate.swift
@@ -0,0 +1,20 @@
+import UIKit
+import Flutter
+// import Firebase
+// import GoogleMaps
+
+@UIApplicationMain
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ // FirebaseApp.configure() //Firebase
+ // GMSServices.provideAPIKey("AIzaSyBRB5_8rkANX4dYFkqQ8hIDE60ELN4TCt8") //Google API key
+ if #available(iOS 10.0, *) {
+ UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
+ } //Request permistion notification
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 0000000..c88f9d7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000..c2f6659
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000..31f4f25
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000..cb0f385
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 0000000..1249890
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 0000000..f5bce2f
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 0000000..f84b9a6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000..c1c9d38
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 0000000..1bfefe4
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000..6c50f80
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000..f4a0f99
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 0000000..4c6a3b5
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000..719fb6d
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000..1055500
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000..87f8e1b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 0000000..7864b07
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 0000000..bdb7bc1
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000..848c760
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000..796ee1b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..65b74d7
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1 @@
+{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"72x72","expected-size":"72","filename":"72.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"76x76","expected-size":"152","filename":"152.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"50x50","expected-size":"100","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"76x76","expected-size":"76","filename":"76.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"50x50","expected-size":"50","filename":"50.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"72x72","expected-size":"144","filename":"144.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"40x40","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"83.5x83.5","expected-size":"167","filename":"167.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"},{"size":"20x20","expected-size":"20","filename":"20.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"1x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"ipad","scale":"2x"}]}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/icon.imageset/icon.png b/ios/Runner/Assets.xcassets/icon.imageset/icon.png
new file mode 100644
index 0000000..5b1b72b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/icon.imageset/icon.png differ
diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..0c9fe7f
--- /dev/null
+++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist
new file mode 100644
index 0000000..15b7426
--- /dev/null
+++ b/ios/Runner/GoogleService-Info.plist
@@ -0,0 +1,36 @@
+
+
+
+
+ CLIENT_ID
+ 254789615258-qbpjmknq1u9473imrnnh2chlbcs6i2b1.apps.googleusercontent.com
+ REVERSED_CLIENT_ID
+ com.googleusercontent.apps.254789615258-qbpjmknq1u9473imrnnh2chlbcs6i2b1
+ API_KEY
+ AIzaSyC-hfYmzFW_hF2JMYF1tOkYHfcwE2xyJwY
+ GCM_SENDER_ID
+ 254789615258
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ com.huynh.listarFlutter
+ PROJECT_ID
+ listarflutter
+ STORAGE_BUCKET
+ listarflutter.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:254789615258:ios:6a158b7c95902906f8a923
+ DATABASE_URL
+ https://listarflutter.firebaseio.com
+
+
\ No newline at end of file
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
new file mode 100644
index 0000000..9454169
--- /dev/null
+++ b/ios/Runner/Info.plist
@@ -0,0 +1,64 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Safer
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ FirebaseAppDelegateProxyEnabled
+
+ LSRequiresIPhoneOS
+
+ NSCameraUsageDescription
+ Would like to access your camera roll to upload your photo.
+ NSLocationAlwaysUsageDescription
+ We need access to your location to show you relevant place result.
+ NSLocationWhenInUseUsageDescription
+ We need access to your location to show you relevant place result.
+ NSMicrophoneUsageDescription
+ Would like to access your microphone to upload your video.
+ NSPhotoLibraryUsageDescription
+ Would like to access your photo to upload photo.
+ UIBackgroundModes
+
+ fetch
+ remote-notification
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+ io.flutter.embedded_views_preview
+
+
+
diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..7335fdf
--- /dev/null
+++ b/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
\ No newline at end of file
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
new file mode 100644
index 0000000..903def2
--- /dev/null
+++ b/ios/Runner/Runner.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ aps-environment
+ development
+
+
diff --git a/lib/api/api.dart b/lib/api/api.dart
new file mode 100644
index 0000000..0b88105
--- /dev/null
+++ b/lib/api/api.dart
@@ -0,0 +1,29 @@
+import 'dart:async';
+
+import 'package:listar_flutter/models/model.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class Api {
+ ///Get Home
+ static Future getHome() async {
+ await Future.delayed(Duration(seconds: 1));
+ final result = await UtilAsset.loadJson("assets/data/home.json");
+ return ResultApiModel.fromJson(result);
+ }
+
+ ///Get Location List
+ static Future getLocationList() async {
+ await Future.delayed(Duration(seconds: 1));
+ final result = await UtilAsset.loadJson("assets/data/location.json");
+ return ResultApiModel.fromJson(result);
+ }
+
+ ///Singleton factory
+ static final Api _instance = Api._internal();
+
+ factory Api() {
+ return _instance;
+ }
+
+ Api._internal();
+}
diff --git a/lib/app.dart b/lib/app.dart
new file mode 100644
index 0000000..3ba0d2a
--- /dev/null
+++ b/lib/app.dart
@@ -0,0 +1,90 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_localizations/flutter_localizations.dart';
+import 'package:listar_flutter/blocs/bloc.dart';
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/main_navigation.dart';
+import 'package:listar_flutter/screens/screen.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class App extends StatefulWidget {
+ @override
+ _AppState createState() => _AppState();
+}
+
+class _AppState extends State {
+ final Routes route = Routes();
+
+ ApplicationBloc _applicationBloc;
+ LanguageBloc _languageBloc;
+ ThemeBloc _themeBloc;
+
+ @override
+ void initState() {
+ ///Bloc business logic
+ _languageBloc = LanguageBloc();
+ _themeBloc = ThemeBloc();
+ _applicationBloc = ApplicationBloc(
+ themeBloc: _themeBloc,
+ languageBloc: _languageBloc,
+ );
+ super.initState();
+ }
+
+ @override
+ void dispose() {
+ _applicationBloc.close();
+ _languageBloc.close();
+ _themeBloc.close();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return MultiBlocProvider(
+ providers: [
+ BlocProvider(
+ create: (context) => _applicationBloc,
+ ),
+ BlocProvider(
+ create: (context) => _languageBloc,
+ ),
+ BlocProvider(
+ create: (context) => _themeBloc,
+ ),
+ ],
+ child: BlocBuilder(
+ builder: (context, lang) {
+ return BlocBuilder(
+ builder: (context, theme) {
+ return MaterialApp(
+ debugShowCheckedModeBanner: false,
+ theme: AppTheme.lightTheme,
+ darkTheme: AppTheme.darkTheme,
+ onGenerateRoute: route.generateRoute,
+ locale: AppLanguage.defaultLanguage,
+ localizationsDelegates: [
+ Translate.delegate,
+ GlobalMaterialLocalizations.delegate,
+ GlobalWidgetsLocalizations.delegate,
+ ],
+ supportedLocales: AppLanguage.supportLanguage,
+ home: BlocBuilder(
+ builder: (context, app) {
+ if (app is ApplicationSetupCompleted) {
+ return MainNavigation();
+ }
+ if (app is ApplicationIntroView) {
+ return MainNavigation();
+ }
+ return SplashScreen();
+ },
+ ),
+ );
+ },
+ );
+ },
+ ),
+ );
+ }
+}
diff --git a/lib/app_locale_delegate.dart b/lib/app_locale_delegate.dart
new file mode 100644
index 0000000..8ea7375
--- /dev/null
+++ b/lib/app_locale_delegate.dart
@@ -0,0 +1,22 @@
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class AppLocaleDelegate extends LocalizationsDelegate {
+ const AppLocaleDelegate();
+
+ @override
+ bool isSupported(Locale locale) {
+ return AppLanguage.supportLanguage.contains(locale);
+ }
+
+ @override
+ Future load(Locale locale) async {
+ Translate localizations = Translate(locale);
+ await localizations.load();
+ return localizations;
+ }
+
+ @override
+ bool shouldReload(AppLocaleDelegate old) => false;
+}
diff --git a/lib/blocs/application/application_bloc.dart b/lib/blocs/application/application_bloc.dart
new file mode 100644
index 0000000..865233c
--- /dev/null
+++ b/lib/blocs/application/application_bloc.dart
@@ -0,0 +1,116 @@
+import 'dart:async';
+
+import 'package:bloc/bloc.dart';
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/blocs/bloc.dart';
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/models/model.dart';
+import 'package:listar_flutter/utils/utils.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+
+class ApplicationBloc extends Bloc {
+ final ThemeBloc themeBloc;
+ final LanguageBloc languageBloc;
+
+ ApplicationBloc({
+ @required this.themeBloc,
+ @required this.languageBloc,
+ });
+
+ @override
+ ApplicationState get initialState => InitialApplicationState();
+
+ @override
+ Stream mapEventToState(event) async* {
+ if (event is SetupApplication) {
+ ///Pending loading to UI
+ yield ApplicationWaiting();
+
+ ///Setup SharedPreferences
+ Application.preferences = await SharedPreferences.getInstance();
+
+ ///Get old Theme & Font & Language
+ final oldTheme = UtilPreferences.getString(Preferences.theme);
+ final oldFont = UtilPreferences.getString(Preferences.font);
+ final oldLanguage = UtilPreferences.getString(Preferences.language);
+ final oldDarkOption = UtilPreferences.getString(Preferences.darkOption);
+
+ ThemeModel theme;
+ String font;
+ DarkOption darkOption;
+
+ ///Setup Language
+ if (oldLanguage != null) {
+ languageBloc.add(
+ ChangeLanguage(Locale(oldLanguage)),
+ );
+ }
+
+ ///Find font support available
+ final fontAvailable = AppTheme.fontSupport.where((item) {
+ return item == oldFont;
+ }).toList();
+
+ ///Find theme support available
+ final themeAvailable = AppTheme.themeSupport.where((item) {
+ return item.name == oldTheme;
+ }).toList();
+
+ ///Check theme and font available
+ if (fontAvailable.isNotEmpty) {
+ font = fontAvailable[0];
+ }
+
+ if (themeAvailable.isNotEmpty) {
+ theme = themeAvailable[0];
+ }
+
+ ///check old dark option
+
+ if (oldDarkOption != null) {
+ switch (oldDarkOption) {
+ case DARK_ALWAYS_OFF:
+ darkOption = DarkOption.alwaysOff;
+ break;
+ case DARK_ALWAYS_ON:
+ darkOption = DarkOption.alwaysOn;
+ break;
+ default:
+ darkOption = DarkOption.alwaysOff;
+ }
+ }
+
+ ///Setup Theme & Font with dark Option
+ themeBloc.add(
+ ChangeTheme(
+ theme: theme ?? AppTheme.currentTheme,
+ font: font ?? AppTheme.currentFont,
+ darkOption: darkOption ?? AppTheme.darkThemeOption,
+ ),
+ );
+
+ ///First or After upgrade version show intro preview app
+ final hasReview = UtilPreferences.containsKey(
+ '${Preferences.reviewIntro}.${Application.version}',
+ );
+ if (hasReview) {
+ ///Become app
+ yield ApplicationSetupCompleted();
+ } else {
+ ///Pending preview intro
+ yield ApplicationIntroView();
+ }
+ }
+
+ ///Event Completed IntroView
+ if (event is OnCompletedIntro) {
+ await UtilPreferences.setBool(
+ '${Preferences.reviewIntro}.${Application.version}',
+ true,
+ );
+
+ ///Become app
+ yield ApplicationSetupCompleted();
+ }
+ }
+}
diff --git a/lib/blocs/application/application_event.dart b/lib/blocs/application/application_event.dart
new file mode 100644
index 0000000..eac63d5
--- /dev/null
+++ b/lib/blocs/application/application_event.dart
@@ -0,0 +1,10 @@
+import 'package:meta/meta.dart';
+
+@immutable
+abstract class ApplicationEvent {}
+
+///Event notification setup application
+class SetupApplication extends ApplicationEvent {}
+
+///Event notification completed preview intro
+class OnCompletedIntro extends ApplicationEvent {}
diff --git a/lib/blocs/application/application_state.dart b/lib/blocs/application/application_state.dart
new file mode 100644
index 0000000..42f7ca1
--- /dev/null
+++ b/lib/blocs/application/application_state.dart
@@ -0,0 +1,12 @@
+import 'package:meta/meta.dart';
+
+@immutable
+abstract class ApplicationState {}
+
+class InitialApplicationState extends ApplicationState {}
+
+class ApplicationWaiting extends ApplicationState {}
+
+class ApplicationSetupCompleted extends ApplicationState {}
+
+class ApplicationIntroView extends ApplicationState {}
diff --git a/lib/blocs/application/bloc.dart b/lib/blocs/application/bloc.dart
new file mode 100644
index 0000000..d5ac72b
--- /dev/null
+++ b/lib/blocs/application/bloc.dart
@@ -0,0 +1,3 @@
+export 'application_bloc.dart';
+export 'application_event.dart';
+export 'application_state.dart';
diff --git a/lib/blocs/bloc.dart b/lib/blocs/bloc.dart
new file mode 100644
index 0000000..33a3148
--- /dev/null
+++ b/lib/blocs/bloc.dart
@@ -0,0 +1,3 @@
+export 'application/bloc.dart';
+export 'language/bloc.dart';
+export 'theme/bloc.dart';
diff --git a/lib/blocs/language/bloc.dart b/lib/blocs/language/bloc.dart
new file mode 100644
index 0000000..5456908
--- /dev/null
+++ b/lib/blocs/language/bloc.dart
@@ -0,0 +1,3 @@
+export 'language_bloc.dart';
+export 'language_event.dart';
+export 'language_state.dart';
diff --git a/lib/blocs/language/language_bloc.dart b/lib/blocs/language/language_bloc.dart
new file mode 100644
index 0000000..fcfcd23
--- /dev/null
+++ b/lib/blocs/language/language_bloc.dart
@@ -0,0 +1,31 @@
+import 'dart:async';
+
+import 'package:bloc/bloc.dart';
+import 'package:listar_flutter/blocs/language/bloc.dart';
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class LanguageBloc extends Bloc {
+ @override
+ LanguageState get initialState => InitialLanguageState();
+
+ @override
+ Stream mapEventToState(event) async* {
+ if (event is ChangeLanguage) {
+ if (event.locale == AppLanguage.defaultLanguage) {
+ yield LanguageUpdated();
+ } else {
+ yield LanguageUpdating();
+ AppLanguage.defaultLanguage = event.locale;
+
+ ///Preference save
+ UtilPreferences.setString(
+ Preferences.language,
+ event.locale.languageCode,
+ );
+
+ yield LanguageUpdated();
+ }
+ }
+ }
+}
diff --git a/lib/blocs/language/language_event.dart b/lib/blocs/language/language_event.dart
new file mode 100644
index 0000000..5266289
--- /dev/null
+++ b/lib/blocs/language/language_event.dart
@@ -0,0 +1,9 @@
+import 'package:flutter/cupertino.dart';
+
+abstract class LanguageEvent {}
+
+class ChangeLanguage extends LanguageEvent {
+ final Locale locale;
+
+ ChangeLanguage(this.locale);
+}
diff --git a/lib/blocs/language/language_state.dart b/lib/blocs/language/language_state.dart
new file mode 100644
index 0000000..d82db62
--- /dev/null
+++ b/lib/blocs/language/language_state.dart
@@ -0,0 +1,7 @@
+abstract class LanguageState {}
+
+class InitialLanguageState extends LanguageState {}
+
+class LanguageUpdating extends LanguageState {}
+
+class LanguageUpdated extends LanguageState {}
diff --git a/lib/blocs/theme/bloc.dart b/lib/blocs/theme/bloc.dart
new file mode 100644
index 0000000..766b199
--- /dev/null
+++ b/lib/blocs/theme/bloc.dart
@@ -0,0 +1,3 @@
+export 'theme_bloc.dart';
+export 'theme_event.dart';
+export 'theme_state.dart';
diff --git a/lib/blocs/theme/theme_bloc.dart b/lib/blocs/theme/theme_bloc.dart
new file mode 100644
index 0000000..94ab1cc
--- /dev/null
+++ b/lib/blocs/theme/theme_bloc.dart
@@ -0,0 +1,98 @@
+import 'dart:async';
+
+import 'package:bloc/bloc.dart';
+import 'package:listar_flutter/blocs/theme/bloc.dart';
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+const DARK_DYNAMIC = 'dynamic';
+const DARK_ALWAYS_OFF = 'off';
+const DARK_ALWAYS_ON = 'on';
+
+class ThemeBloc extends Bloc {
+ @override
+ ThemeState get initialState => InitialThemeState();
+
+ @override
+ Stream mapEventToState(event) async* {
+ ///Update theme style and font
+ if (event is ChangeTheme) {
+ yield ThemeUpdating();
+
+ AppTheme.currentTheme = event.theme ?? AppTheme.currentTheme;
+ AppTheme.currentFont = event.font ?? AppTheme.currentFont;
+ AppTheme.darkThemeOption = event.darkOption ?? AppTheme.darkThemeOption;
+
+ ///Setup Theme with setting darkOption
+ switch (AppTheme.darkThemeOption) {
+ case DarkOption.dynamic:
+ AppTheme.lightTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.lightTheme,
+ font: AppTheme.currentFont,
+ );
+ AppTheme.darkTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.darkTheme,
+ font: AppTheme.currentFont,
+ );
+ break;
+ case DarkOption.alwaysOn:
+ AppTheme.lightTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.darkTheme,
+ font: AppTheme.currentFont,
+ );
+ AppTheme.darkTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.darkTheme,
+ font: AppTheme.currentFont,
+ );
+ break;
+ case DarkOption.alwaysOff:
+ AppTheme.lightTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.lightTheme,
+ font: AppTheme.currentFont,
+ );
+ AppTheme.darkTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.lightTheme,
+ font: AppTheme.currentFont,
+ );
+ break;
+ default:
+ AppTheme.lightTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.lightTheme,
+ font: AppTheme.currentFont,
+ );
+ AppTheme.darkTheme = CollectionTheme.getCollectionTheme(
+ theme: AppTheme.currentTheme.darkTheme,
+ font: AppTheme.currentFont,
+ );
+ break;
+ }
+
+ ///Preference save
+ UtilPreferences.setString(Preferences.location, AppTheme.currentLocation);
+
+ ///Preference save
+ UtilPreferences.setString(Preferences.theme, AppTheme.currentTheme.name);
+
+ ///Preference save
+ UtilPreferences.setString(Preferences.font, AppTheme.currentFont);
+
+ ///Preference save
+ switch (AppTheme.darkThemeOption) {
+ case DarkOption.dynamic:
+ UtilPreferences.setString(Preferences.darkOption, DARK_DYNAMIC);
+ break;
+ case DarkOption.alwaysOn:
+ UtilPreferences.setString(Preferences.darkOption, DARK_ALWAYS_ON);
+ break;
+ case DarkOption.alwaysOff:
+ UtilPreferences.setString(Preferences.darkOption, DARK_ALWAYS_OFF);
+ break;
+ default:
+ break;
+ }
+
+ ///Notification UI
+ yield ThemeUpdated();
+ }
+ }
+}
diff --git a/lib/blocs/theme/theme_event.dart b/lib/blocs/theme/theme_event.dart
new file mode 100644
index 0000000..5d52bd5
--- /dev/null
+++ b/lib/blocs/theme/theme_event.dart
@@ -0,0 +1,24 @@
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/models/model.dart';
+import 'package:meta/meta.dart';
+
+@immutable
+abstract class ThemeEvent {}
+
+class ChangeTheme extends ThemeEvent {
+ final ThemeModel theme;
+ final String font;
+ final DarkOption darkOption;
+
+ ChangeTheme({
+ this.theme,
+ this.font,
+ this.darkOption,
+ });
+}
+
+class ChangeDarkOption extends ThemeEvent {
+ final DarkOption darkOption;
+
+ ChangeDarkOption({this.darkOption});
+}
diff --git a/lib/blocs/theme/theme_state.dart b/lib/blocs/theme/theme_state.dart
new file mode 100644
index 0000000..aa75411
--- /dev/null
+++ b/lib/blocs/theme/theme_state.dart
@@ -0,0 +1,10 @@
+import 'package:meta/meta.dart';
+
+@immutable
+abstract class ThemeState {}
+
+class InitialThemeState extends ThemeState {}
+
+class ThemeUpdating extends ThemeState {}
+
+class ThemeUpdated extends ThemeState {}
diff --git a/lib/configs/application.dart b/lib/configs/application.dart
new file mode 100644
index 0000000..19117a9
--- /dev/null
+++ b/lib/configs/application.dart
@@ -0,0 +1,19 @@
+import 'package:listar_flutter/models/model.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+
+class Application {
+ static bool debug = false;
+ static String version = '1.0.0';
+ static SharedPreferences preferences;
+ static UserModel user;
+ static String pushToken;
+
+ ///Singleton factory
+ static final Application _instance = Application._internal();
+
+ factory Application() {
+ return _instance;
+ }
+
+ Application._internal();
+}
diff --git a/lib/configs/config.dart b/lib/configs/config.dart
new file mode 100644
index 0000000..f44aa5a
--- /dev/null
+++ b/lib/configs/config.dart
@@ -0,0 +1,8 @@
+export 'application.dart';
+export 'image.dart';
+export 'language.dart';
+export 'preferences.dart';
+export 'routes.dart';
+export 'sort.dart';
+export 'theme.dart';
+export 'theme_collection.dart';
diff --git a/lib/configs/image.dart b/lib/configs/image.dart
new file mode 100644
index 0000000..c7effea
--- /dev/null
+++ b/lib/configs/image.dart
@@ -0,0 +1,73 @@
+class Images {
+ static const String Intro1 = "assets/images/intro_1.png";
+ static const String Intro2 = "assets/images/intro_2.png";
+ static const String Intro3 = "assets/images/intro_3.png";
+ static const String Logo = "assets/images/logo.png";
+ static const String Slide = "assets/images/slide.png";
+ static const String Avatar1 = "assets/images/avata-01.jpeg";
+ static const String Avatar2 = "assets/images/avata-02.jpeg";
+ static const String Avatar3 = "assets/images/avata-03.jpeg";
+ static const String Avatar4 = "assets/images/avata-04.png";
+ static const String Profile1 = "assets/images/profile-1.jpg";
+ static const String Profile2 = "assets/images/profile-2.jpg";
+ static const String Profile3 = "assets/images/profile-3.jpg";
+ static const String Profile4 = "assets/images/profile-4.jpg";
+ static const String Profile5 = "assets/images/profile-5.jpg";
+ static const String Profile6 = "assets/images/profile-6.jpg";
+ static const String Profile7 = "assets/images/profile-7.jpg";
+ static const String Profile8 = "assets/images/profile-8.jpg";
+ static const String Trip1 = "assets/images/trip-1.jpg";
+ static const String Trip2 = "assets/images/trip-2.jpg";
+ static const String Trip3 = "assets/images/trip-3.jpg";
+ static const String Trip4 = "assets/images/trip-4.jpg";
+ static const String Trip5 = "assets/images/trip-5.jpg";
+ static const String Trip6 = "assets/images/trip-6.jpg";
+ static const String Trip7 = "assets/images/trip-7.jpg";
+ static const String Trip8 = "assets/images/trip-8.jpg";
+ static const String Trip9 = "assets/images/trip-9.jpg";
+ static const String Room1 = "assets/images/room-1.jpg";
+ static const String Room2 = "assets/images/room-2.jpg";
+ static const String Room3 = "assets/images/room-3.jpg";
+ static const String Room4 = "assets/images/room-4.jpg";
+ static const String Room5 = "assets/images/room-5.jpg";
+ static const String Room6 = "assets/images/room-6.jpg";
+ static const String Room7 = "assets/images/room-7.jpg";
+ static const String Room8 = "assets/images/room-8.jpg";
+ static const String Room9 = "assets/images/room-9.jpg";
+ static const String Room10 = "assets/images/room-10.jpg";
+ static const String Room11 = "assets/images/room-11.jpg";
+ static const String Banner1 = "assets/images/banner-1.jpg";
+ static const String Banner2 = "assets/images/banner-2.jpg";
+ static const String Banner3 = "assets/images/banner-3.jpg";
+ static const String Category1 = "assets/images/category-1.jpg";
+ static const String Category2 = "assets/images/category-2.jpg";
+ static const String Category3 = "assets/images/category-3.jpg";
+ static const String Category4 = "assets/images/category-4.jpg";
+ static const String Gallery1 = "assets/images/gallery-1.jpg";
+ static const String Gallery2 = "assets/images/gallery-2.jpg";
+ static const String Location1 = "assets/images/location-1.jpg";
+ static const String Location2 = "assets/images/location-2.jpg";
+ static const String Location3 = "assets/images/location-3.jpg";
+ static const String Location4 = "assets/images/location-4.jpg";
+ static const String Location5 = "assets/images/location-5.jpg";
+ static const String Location6 = "assets/images/location-6.jpg";
+ static const String Location7 = "assets/images/location-7.jpg";
+ static const String Place1 = "assets/images/place-1.jpg";
+ static const String Place2 = "assets/images/place-2.jpg";
+ static const String Service1 = "assets/images/service-shopping.jpg";
+ static const String Service2 = "assets/images/service-automotive.jpg";
+ static const String Service3 = "assets/images/service-coffee.jpg";
+ static const String Service4 = "assets/images/service-event.jpg";
+ static const String Service5 = "assets/images/service-housing.jpg";
+ static const String Service6 = "assets/images/service-job.jpg";
+ static const String Service7 = "assets/images/service-restaurant.jpg";
+
+ ///Singleton factory
+ static final Images _instance = Images._internal();
+
+ factory Images() {
+ return _instance;
+ }
+
+ Images._internal();
+}
diff --git a/lib/configs/language.dart b/lib/configs/language.dart
new file mode 100644
index 0000000..744d9b8
--- /dev/null
+++ b/lib/configs/language.dart
@@ -0,0 +1,21 @@
+import 'package:flutter/material.dart';
+
+class AppLanguage {
+ ///Default Language
+ static Locale defaultLanguage = Locale("en");
+
+ ///List Language support in Application
+ static List supportLanguage = [
+ Locale("en"),
+ Locale("vi"),
+ ];
+
+ ///Singleton factory
+ static final AppLanguage _instance = AppLanguage._internal();
+
+ factory AppLanguage() {
+ return _instance;
+ }
+
+ AppLanguage._internal();
+}
diff --git a/lib/configs/preferences.dart b/lib/configs/preferences.dart
new file mode 100644
index 0000000..0e308eb
--- /dev/null
+++ b/lib/configs/preferences.dart
@@ -0,0 +1,19 @@
+class Preferences {
+ static String reviewIntro = 'review';
+ static String user = 'user';
+ static String language = 'language';
+ static String notification = 'notification';
+ static String theme = 'theme';
+ static String darkOption = 'darkOption';
+ static String font = 'font';
+ static String location = 'location';
+
+ ///Singleton factory
+ static final Preferences _instance = Preferences._internal();
+
+ factory Preferences() {
+ return _instance;
+ }
+
+ Preferences._internal();
+}
diff --git a/lib/configs/routes.dart b/lib/configs/routes.dart
new file mode 100644
index 0000000..ff34dba
--- /dev/null
+++ b/lib/configs/routes.dart
@@ -0,0 +1,172 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/screens/choose_location/choose_location.dart';
+import 'package:listar_flutter/screens/safer_main_menu/storm_tracking.dart';
+import 'package:listar_flutter/screens/screen.dart';
+import 'package:listar_flutter/screens/terms_of_use/terms_of_use.dart';
+
+class Routes {
+ static const String signIn = "/signIn";
+ static const String signUp = "/signUp";
+ static const String forgotPassword = "/forgotPassword";
+ static const String productDetail = "/productDetail";
+ static const String productDetailTab = "ProductDetailTab";
+ static const String searchHistory = "/searchHistory";
+ static const String category = "/category";
+ static const String editProfile = "/editProfile";
+ static const String changePassword = "/changePassword";
+ static const String changeLanguage = "/changeLanguage";
+ static const String contactUs = "/contactUs";
+ static const String chat = "/chat";
+ static const String aboutUs = "/aboutUs";
+ static const String gallery = "/gallery";
+ static const String photoPreview = "/photoPreview";
+ static const String themeSetting = "/themeSetting";
+ static const String listProduct = "/listProduct";
+ static const String filter = "/filter";
+ static const String review = "/review";
+ static const String writeReview = "/writeReview";
+ static const String location = "/location";
+ static const String setting = "/setting";
+ static const String fontSetting = "/fontSetting";
+ static const String chooseLocation = "/chooseLocation";
+
+ static const String stormTracking = "/stormTracking";
+ static const String personalSafety = "/personalSafety";
+ static const String personalRisk = "/personalRisk";
+ static const String propertySafety = "/propertySafety";
+ static const String propertyRisk = "/propertyRisk";
+ static const String supplies = "/supplies";
+ static const String evacuation = "/evacuation";
+ static const String stayInTouch = "/stayInTouch";
+
+ static const String termsOfUse = "/termsOfUse";
+
+ Route generateRoute(RouteSettings settings) {
+ switch (settings.name) {
+ case termsOfUse:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return TermsOfUse(title: category);
+ },
+ );
+
+ case chooseLocation:
+ final location = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return ChooseLocation(location: location);
+ },
+ );
+
+ case stormTracking:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return StormTracking(title: category);
+ },
+ );
+
+ case personalSafety:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return PersonalSafety(title: category);
+ },
+ );
+
+ case personalRisk:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return PersonalRisk(title: category);
+ },
+ );
+
+ case propertySafety:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return PropertySafety(title: category);
+ },
+ );
+
+ case propertyRisk:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return PropertyRisk(title: category);
+ },
+ );
+
+ case supplies:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return Supplies(title: category);
+ },
+ );
+
+ case evacuation:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return Evacuation(title: category);
+ },
+ );
+
+ case stayInTouch:
+ final category = settings.arguments;
+ return MaterialPageRoute(
+ builder: (context) {
+ return StayInTouch(title: category);
+ },
+ );
+
+ case changeLanguage:
+ return MaterialPageRoute(
+ builder: (context) {
+ return LanguageSetting();
+ },
+ );
+
+ case themeSetting:
+ return MaterialPageRoute(
+ builder: (context) {
+ return ThemeSetting();
+ },
+ );
+
+ case fontSetting:
+ return MaterialPageRoute(
+ builder: (context) {
+ return FontSetting();
+ },
+ );
+
+ default:
+ return MaterialPageRoute(
+ builder: (context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text("Not Found"),
+ ),
+ body: Center(
+ child: Text('No path for ${settings.name}'),
+ ),
+ );
+ },
+ );
+ }
+ }
+
+ ///Singleton factory
+ static final Routes _instance = Routes._internal();
+
+ factory Routes() {
+ return _instance;
+ }
+
+ Routes._internal();
+}
diff --git a/lib/configs/sort.dart b/lib/configs/sort.dart
new file mode 100644
index 0000000..b442216
--- /dev/null
+++ b/lib/configs/sort.dart
@@ -0,0 +1,46 @@
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/models/model.dart';
+
+class AppSort {
+ ///Default Sort
+ static SortModel defaultSort = SortModel.fromJson(
+ {
+ "code": "lasted",
+ "name": "lasted_post",
+ "icon": Icons.swap_vert,
+ },
+ );
+
+ ///List Sort support in Application
+ static List listSortDefault = [
+ {
+ "code": "lasted",
+ "name": "lasted_post",
+ "icon": Icons.swap_vert,
+ },
+ {
+ "code": "oldest",
+ "name": "oldest_post",
+ "icon": Icons.swap_vert,
+ },
+ {
+ "code": "most_view",
+ "name": "most_view",
+ "icon": Icons.swap_vert,
+ },
+ {
+ "code": "rating",
+ "name": "review_rating",
+ "icon": Icons.swap_vert,
+ },
+ ].map((item) => SortModel.fromJson(item)).toList();
+
+ ///Singleton factory
+ static final AppSort _instance = AppSort._internal();
+
+ factory AppSort() {
+ return _instance;
+ }
+
+ AppSort._internal();
+}
diff --git a/lib/configs/theme.dart b/lib/configs/theme.dart
new file mode 100644
index 0000000..a313614
--- /dev/null
+++ b/lib/configs/theme.dart
@@ -0,0 +1,85 @@
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/configs/config.dart';
+import 'package:listar_flutter/models/model.dart';
+
+enum DarkOption { dynamic, alwaysOn, alwaysOff }
+
+class AppTheme {
+ ///Optional Color
+ static Color blueColor = Color.fromRGBO(93, 173, 226, 1);
+ static Color pinkColor = Color.fromRGBO(165, 105, 189, 1);
+ static Color greenColor = Color.fromRGBO(88, 214, 141, 1);
+ static Color yellowColor = Color.fromRGBO(253, 198, 10, 1);
+ static Color kashmirColor = Color.fromRGBO(93, 109, 126, 1);
+
+ ///Default location
+ static String currentLocation = "Bridgeport";
+
+ ///Default font
+ static String currentFont = "Raleway";
+
+ ///List Font support
+ static List fontSupport = ["Raleway", "Roboto", "Merriweather"];
+
+ ///Default Theme
+ static ThemeModel currentTheme = ThemeModel.fromJson({
+ "name": "default",
+ "color": Color(0xffe5634d),
+ "light": "primaryLight",
+ "dark": "primaryDark",
+ });
+
+ ///List Theme Support in Application
+ static List themeSupport = [
+ {
+ "name": "default",
+ "color": Color(0xffe5634d),
+ "light": "primaryLight",
+ "dark": "primaryDark",
+ },
+ {
+ "name": "brown",
+ "color": Color(0xffa0877e),
+ "light": "brownLight",
+ "dark": "brownDark",
+ },
+ {
+ "name": "pink",
+ "color": Color(0xffe0a6c1),
+ "light": "pinkLight",
+ "dark": "pinkDark",
+ },
+ {
+ "name": "orange",
+ "color": Color(0xfff6bb41),
+ "light": "pastelOrangeLight",
+ "dark": "pastelOrangeDark",
+ },
+ {
+ "name": "green",
+ "color": Color(0xff93b7b0),
+ "light": "greenLight",
+ "dark": "greenDark",
+ },
+ ].map((item) => ThemeModel.fromJson(item)).toList();
+
+ ///Dark Theme option
+ static DarkOption darkThemeOption = DarkOption.dynamic;
+
+ static ThemeData lightTheme = CollectionTheme.getCollectionTheme(
+ theme: currentTheme.lightTheme,
+ );
+
+ static ThemeData darkTheme = CollectionTheme.getCollectionTheme(
+ theme: currentTheme.darkTheme,
+ );
+
+ ///Singleton factory
+ static final AppTheme _instance = AppTheme._internal();
+
+ factory AppTheme() {
+ return _instance;
+ }
+
+ AppTheme._internal();
+}
diff --git a/lib/configs/theme_collection.dart b/lib/configs/theme_collection.dart
new file mode 100644
index 0000000..c83f0cf
--- /dev/null
+++ b/lib/configs/theme_collection.dart
@@ -0,0 +1,1378 @@
+import 'package:flutter/material.dart';
+
+class CollectionTheme {
+ ///Get collection theme
+ ///
+ /// primaryLight/primaryDark/brownLight/brownDark/pinkLight/pinkDark
+ static ThemeData getCollectionTheme(
+ {String theme = "primaryLight", String font = "Raleway"}) {
+ switch (theme) {
+ case "primaryLight":
+ return ThemeData(
+ primarySwatch: MaterialColor(4293223245, {
+ 50: Color(0xfffcebe9),
+ 100: Color(0xfff9d8d3),
+ 200: Color(0xfff2b1a6),
+ 300: Color(0xffec8a79),
+ 400: Color(0xffe5634d),
+ 500: Color(0xffdf3c20),
+ 600: Color(0xffb2301a),
+ 700: Color(0xff862413),
+ 800: Color(0xff59180d),
+ 900: Color(0xff2d0c06)
+ }),
+ fontFamily: font,
+ brightness: Brightness.light,
+ primaryColor: Color(0xffe5634d),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xffFF8A65),
+ primaryColorDark: Color(0xff862413),
+ accentColor: Color(0xff4A90A4),
+ accentColorBrightness: Brightness.dark,
+ canvasColor: Color(0xfffafafa),
+ scaffoldBackgroundColor: Color(0xfffafafa),
+ bottomAppBarColor: Color(0xffffffff),
+ cardColor: Color(0xffffffff),
+ dividerColor: Color(0x1f000000),
+ highlightColor: Color(0x66bcbcbc),
+ splashColor: Color(0x66c8c8c8),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0x8a000000),
+ disabledColor: Color(0x61000000),
+ buttonColor: Color(0xffe5634d),
+ toggleableActiveColor: Color(0xff4A90A4),
+ secondaryHeaderColor: Color(0xfffcebe9),
+ textSelectionColor: Color(0xff4A90A4),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xff4A90A4),
+ backgroundColor: Color(0xfff2b1a6),
+ dialogBackgroundColor: Color(0xffffffff),
+ indicatorColor: Color(0xff4A90A4),
+ hintColor: Color(0x8a000000),
+ errorColor: Color(0xffd32f2f),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ buttonColor: Color(0xffe5634d),
+ disabledColor: Color(0x61000000),
+ highlightColor: Color(0x29000000),
+ splashColor: Color(0x1f000000),
+ focusColor: Color(0x1f000000),
+ hoverColor: Color(0x0a000000),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1f000000),
+ brightness: Brightness.light,
+ deleteIconColor: Color(0xffdf3c20),
+ disabledColor: Color(0x0c000000),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3de5634d),
+ selectedColor: Color(0x3de5634d),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "primaryDark":
+ return ThemeData(
+ primarySwatch: MaterialColor(4280361249, {
+ 50: Color(0xfff2f2f2),
+ 100: Color(0xffe6e6e6),
+ 200: Color(0xffcccccc),
+ 300: Color(0xffb3b3b3),
+ 400: Color(0xff999999),
+ 500: Color(0xff808080),
+ 600: Color(0xff666666),
+ 700: Color(0xff4d4d4d),
+ 800: Color(0xff333333),
+ 900: Color(0xff191919)
+ }),
+ fontFamily: font,
+ brightness: Brightness.dark,
+ primaryColor: Color(0xffe5634d),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xffFF8A65),
+ primaryColorDark: Color(0xff000000),
+ accentColor: Color(0xff4A90A4),
+ accentColorBrightness: Brightness.light,
+ canvasColor: Colors.grey[900],
+ scaffoldBackgroundColor: Color(0xff303030),
+ bottomAppBarColor: Color(0xff424242),
+ cardColor: Color(0xff424242),
+ dividerColor: Color(0x1fffffff),
+ highlightColor: Color(0x40cccccc),
+ splashColor: Color(0x40cccccc),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0xb3ffffff),
+ disabledColor: Color(0x62ffffff),
+ buttonColor: Color(0xffe5634d),
+ toggleableActiveColor: Color(0xff4A90A4),
+ secondaryHeaderColor: Color(0xff616161),
+ textSelectionColor: Color(0xff4A90A4),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xff4A90A4),
+ backgroundColor: Color(0xff616161),
+ dialogBackgroundColor: Color(0xff424242),
+ indicatorColor: Color(0xff4A90A4),
+ hintColor: Color(0x80ffffff),
+ errorColor: Color(0xffd32f2f),
+ appBarTheme: AppBarTheme(
+ brightness: Brightness.dark,
+ color: Colors.grey[900],
+ ),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ buttonColor: Color(0xffe5634d),
+ disabledColor: Color(0x61ffffff),
+ highlightColor: Color(0x29ffffff),
+ splashColor: Color(0x1fffffff),
+ focusColor: Color(0x1fffffff),
+ hoverColor: Color(0x0affffff),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1fffffff),
+ brightness: Brightness.dark,
+ deleteIconColor: Color(0xdeffffff),
+ disabledColor: Color(0x0cffffff),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xb3ffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xb3ffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3d212121),
+ selectedColor: Color(0x3dffffff),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ sliderTheme: SliderThemeData.fromPrimaryColors(
+ primaryColor: Color(0xffe5634d),
+ primaryColorLight: Color(0xfff9d8d3),
+ primaryColorDark: Color(0xff862413),
+ valueIndicatorTextStyle: TextStyle(
+ color: Color(0xffffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "brownLight":
+ return ThemeData(
+ primarySwatch: MaterialColor(4288776319, {
+ 50: Color(0xfff4f1f0),
+ 100: Color(0xffe9e4e2),
+ 200: Color(0xffd4c8c4),
+ 300: Color(0xffbeada7),
+ 400: Color(0xffa99289),
+ 500: Color(0xff93766c),
+ 600: Color(0xff765f56),
+ 700: Color(0xff584741),
+ 800: Color(0xff3b2f2b),
+ 900: Color(0xff1d1816)
+ }),
+ fontFamily: font,
+ brightness: Brightness.light,
+ primaryColor: Color(0xffa1887f),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xffe9e4e2),
+ primaryColorDark: Color(0xff584741),
+ accentColor: Color(0xff93766c),
+ accentColorBrightness: Brightness.dark,
+ canvasColor: Color(0xfffafafa),
+ scaffoldBackgroundColor: Color(0xfffafafa),
+ bottomAppBarColor: Color(0xffffffff),
+ cardColor: Color(0xffffffff),
+ dividerColor: Color(0x1f000000),
+ highlightColor: Color(0x66bcbcbc),
+ splashColor: Color(0x66c8c8c8),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0x8a000000),
+ disabledColor: Color(0x61000000),
+ buttonColor: Color(0xffa1887f),
+ toggleableActiveColor: Color(0xff765f56),
+ secondaryHeaderColor: Color(0xfff4f1f0),
+ textSelectionColor: Color(0xffd4c8c4),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xffbeada7),
+ backgroundColor: Color(0xffd4c8c4),
+ dialogBackgroundColor: Color(0xffffffff),
+ indicatorColor: Color(0xff93766c),
+ hintColor: Color(0x8a000000),
+ errorColor: Color(0xffd32f2f),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ buttonColor: Color(0xffa1887f),
+ disabledColor: Color(0x61000000),
+ highlightColor: Color(0x29000000),
+ splashColor: Color(0x1f000000),
+ focusColor: Color(0x1f000000),
+ hoverColor: Color(0x0a000000),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1f000000),
+ brightness: Brightness.light,
+ deleteIconColor: Color(0xff93766c),
+ disabledColor: Color(0x0c000000),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3da1887f),
+ selectedColor: Color(0x3da1887f),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "brownDark":
+ return ThemeData(
+ primarySwatch: MaterialColor(4280361249, {
+ 50: Color(0xfff2f2f2),
+ 100: Color(0xffe6e6e6),
+ 200: Color(0xffcccccc),
+ 300: Color(0xffb3b3b3),
+ 400: Color(0xff999999),
+ 500: Color(0xff808080),
+ 600: Color(0xff666666),
+ 700: Color(0xff4d4d4d),
+ 800: Color(0xff333333),
+ 900: Color(0xff191919)
+ }),
+ fontFamily: font,
+ brightness: Brightness.dark,
+ primaryColor: Color(0xffa1887f),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xff9e9e9e),
+ primaryColorDark: Color(0xff000000),
+ accentColor: Color(0xff93766c),
+ accentColorBrightness: Brightness.light,
+ canvasColor: Colors.grey[900],
+ scaffoldBackgroundColor: Color(0xff303030),
+ bottomAppBarColor: Color(0xff424242),
+ cardColor: Color(0xff424242),
+ dividerColor: Color(0x1fffffff),
+ highlightColor: Color(0x40cccccc),
+ splashColor: Color(0x40cccccc),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0xb3ffffff),
+ disabledColor: Color(0x62ffffff),
+ buttonColor: Color(0xffa1887f),
+ toggleableActiveColor: Color(0xff765f56),
+ secondaryHeaderColor: Color(0xff616161),
+ textSelectionColor: Color(0xffd4c8c4),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xffbeada7),
+ backgroundColor: Color(0xff616161),
+ dialogBackgroundColor: Color(0xff424242),
+ indicatorColor: Color(0xff93766c),
+ hintColor: Color(0x80ffffff),
+ errorColor: Color(0xffd32f2f),
+ appBarTheme: AppBarTheme(
+ brightness: Brightness.dark,
+ color: Colors.grey[900],
+ ),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8.0),
+ ),
+ ),
+ buttonColor: Color(0xffa1887f),
+ disabledColor: Color(0x61ffffff),
+ highlightColor: Color(0x29ffffff),
+ splashColor: Color(0x1fffffff),
+ focusColor: Color(0x1fffffff),
+ hoverColor: Color(0x0affffff),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1fffffff),
+ brightness: Brightness.dark,
+ deleteIconColor: Color(0xdeffffff),
+ disabledColor: Color(0x0cffffff),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xdeffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0x3dffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3d212121),
+ selectedColor: Color(0x3dffffff),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ sliderTheme: SliderThemeData.fromPrimaryColors(
+ primaryColor: Color(0xffa1887f),
+ primaryColorLight: Color(0xffe9e4e2),
+ primaryColorDark: Color(0xff584741),
+ valueIndicatorTextStyle: TextStyle(
+ color: Color(0xffffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "pinkLight":
+ return ThemeData(
+ primarySwatch: MaterialColor(4292912833, {
+ 50: Color(0xfff8ecf2),
+ 100: Color(0xfff2d9e5),
+ 200: Color(0xffe5b3ca),
+ 300: Color(0xffd78eb0),
+ 400: Color(0xffca6896),
+ 500: Color(0xffbd427b),
+ 600: Color(0xff973563),
+ 700: Color(0xff71284a),
+ 800: Color(0xff4c1a31),
+ 900: Color(0xff260d19)
+ }),
+ fontFamily: font,
+ brightness: Brightness.light,
+ primaryColor: Color(0xffe0a6c1),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xfff2d9e5),
+ primaryColorDark: Color(0xff71284a),
+ accentColor: Color(0xffbd427b),
+ accentColorBrightness: Brightness.dark,
+ canvasColor: Color(0xfffafafa),
+ scaffoldBackgroundColor: Color(0xfffafafa),
+ bottomAppBarColor: Color(0xffffffff),
+ cardColor: Color(0xffffffff),
+ dividerColor: Color(0x1f000000),
+ highlightColor: Color(0x66bcbcbc),
+ splashColor: Color(0x66c8c8c8),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0x8a000000),
+ disabledColor: Color(0x61000000),
+ buttonColor: Color(0xffe0a6c1),
+ toggleableActiveColor: Color(0xff973563),
+ secondaryHeaderColor: Color(0xfff8ecf2),
+ textSelectionColor: Color(0xffe5b3ca),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xffd78eb0),
+ backgroundColor: Color(0xffe5b3ca),
+ dialogBackgroundColor: Color(0xffffffff),
+ indicatorColor: Color(0xffbd427b),
+ hintColor: Color(0x8a000000),
+ errorColor: Color(0xffd32f2f),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ buttonColor: Color(0xffe0a6c1),
+ disabledColor: Color(0x61000000),
+ highlightColor: Color(0x29000000),
+ splashColor: Color(0x1f000000),
+ focusColor: Color(0x1f000000),
+ hoverColor: Color(0x0a000000),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1f000000),
+ brightness: Brightness.light,
+ deleteIconColor: Color(0xffbd427b),
+ disabledColor: Color(0x0c000000),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3de5634d),
+ selectedColor: Color(0x3de5634d),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "pinkDark":
+ return ThemeData(
+ primarySwatch: MaterialColor(4280361249, {
+ 50: Color(0xfff2f2f2),
+ 100: Color(0xffe6e6e6),
+ 200: Color(0xffcccccc),
+ 300: Color(0xffb3b3b3),
+ 400: Color(0xff999999),
+ 500: Color(0xff808080),
+ 600: Color(0xff666666),
+ 700: Color(0xff4d4d4d),
+ 800: Color(0xff333333),
+ 900: Color(0xff191919)
+ }),
+ fontFamily: font,
+ brightness: Brightness.dark,
+ primaryColor: Color(0xffe0a6c1),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xff9e9e9e),
+ primaryColorDark: Color(0xff000000),
+ accentColor: Color(0xffbd427b),
+ accentColorBrightness: Brightness.light,
+ canvasColor: Colors.grey[900],
+ scaffoldBackgroundColor: Color(0xff303030),
+ bottomAppBarColor: Color(0xff424242),
+ cardColor: Color(0xff424242),
+ dividerColor: Color(0x1fffffff),
+ highlightColor: Color(0x40cccccc),
+ splashColor: Color(0x40cccccc),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0xb3ffffff),
+ disabledColor: Color(0x62ffffff),
+ buttonColor: Color(0xffe0a6c1),
+ toggleableActiveColor: Color(0xffbd427b),
+ secondaryHeaderColor: Color(0xff616161),
+ textSelectionColor: Color(0xfff2b1a6),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xffec8a79),
+ backgroundColor: Color(0xff616161),
+ dialogBackgroundColor: Color(0xff424242),
+ indicatorColor: Color(0xffbd427b),
+ hintColor: Color(0x80ffffff),
+ errorColor: Color(0xffd32f2f),
+ appBarTheme: AppBarTheme(
+ brightness: Brightness.dark,
+ color: Colors.grey[900],
+ ),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ buttonColor: Color(0xffe0a6c1),
+ disabledColor: Color(0x61ffffff),
+ highlightColor: Color(0x29ffffff),
+ splashColor: Color(0x1fffffff),
+ focusColor: Color(0x1fffffff),
+ hoverColor: Color(0x0affffff),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1fffffff),
+ brightness: Brightness.dark,
+ deleteIconColor: Color(0xdeffffff),
+ disabledColor: Color(0x0cffffff),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xb3ffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(0),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xb3ffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3d212121),
+ selectedColor: Color(0x3dffffff),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ sliderTheme: SliderThemeData.fromPrimaryColors(
+ primaryColor: Color(0xffe0a6c1),
+ primaryColorLight: Color(0xfff2d9e5),
+ primaryColorDark: Color(0xff71284a),
+ valueIndicatorTextStyle: TextStyle(
+ color: Color(0xffffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "pastelOrangeLight":
+ return ThemeData(
+ primarySwatch: MaterialColor(4294359873, {
+ 50: Color(0xfffef6e7),
+ 100: Color(0xfffdeece),
+ 200: Color(0xfffadc9e),
+ 300: Color(0xfff8cb6d),
+ 400: Color(0xfff6b93c),
+ 500: Color(0xfff3a80c),
+ 600: Color(0xffc38609),
+ 700: Color(0xff926507),
+ 800: Color(0xff614305),
+ 900: Color(0xff312202)
+ }),
+ fontFamily: font,
+ brightness: Brightness.light,
+ primaryColor: Color(0xfff6bb41),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xfffdeece),
+ primaryColorDark: Color(0xff926507),
+ accentColor: Color(0xfff3a80c),
+ accentColorBrightness: Brightness.dark,
+ canvasColor: Color(0xfffafafa),
+ scaffoldBackgroundColor: Color(0xfffafafa),
+ bottomAppBarColor: Color(0xffffffff),
+ cardColor: Color(0xffffffff),
+ dividerColor: Color(0x1f000000),
+ highlightColor: Color(0x66bcbcbc),
+ splashColor: Color(0x66c8c8c8),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0x8a000000),
+ disabledColor: Color(0x61000000),
+ buttonColor: Color(0xfff6bb41),
+ toggleableActiveColor: Color(0xffc38609),
+ secondaryHeaderColor: Color(0xfffef6e7),
+ textSelectionColor: Color(0xfffadc9e),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xfff8cb6d),
+ backgroundColor: Color(0xfffadc9e),
+ dialogBackgroundColor: Color(0xffffffff),
+ indicatorColor: Color(0xfff3a80c),
+ hintColor: Color(0x8a000000),
+ errorColor: Color(0xffd32f2f),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8.0),
+ ),
+ ),
+ buttonColor: Color(0xfff6bb41),
+ disabledColor: Color(0x61000000),
+ highlightColor: Color(0x29000000),
+ splashColor: Color(0x1f000000),
+ focusColor: Color(0x1f000000),
+ hoverColor: Color(0x0a000000),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1f000000),
+ brightness: Brightness.light,
+ deleteIconColor: Color(0xfff6bb41),
+ disabledColor: Color(0x0c000000),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.only(top: 4, bottom: 4, left: 4, right: 4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3df6bb41),
+ selectedColor: Color(0x3df6bb41),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "pastelOrangeDark":
+ return ThemeData(
+ primarySwatch: MaterialColor(4280361249, {
+ 50: Color(0xfff2f2f2),
+ 100: Color(0xffe6e6e6),
+ 200: Color(0xffcccccc),
+ 300: Color(0xffb3b3b3),
+ 400: Color(0xff999999),
+ 500: Color(0xff808080),
+ 600: Color(0xff666666),
+ 700: Color(0xff4d4d4d),
+ 800: Color(0xff333333),
+ 900: Color(0xff191919)
+ }),
+ fontFamily: font,
+ brightness: Brightness.dark,
+ primaryColor: Color(0xfff6bb41),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xff9e9e9e),
+ primaryColorDark: Color(0xff000000),
+ accentColor: Color(0xfff3a80c),
+ accentColorBrightness: Brightness.light,
+ canvasColor: Colors.grey[900],
+ scaffoldBackgroundColor: Color(0xff303030),
+ bottomAppBarColor: Color(0xff424242),
+ cardColor: Color(0xff424242),
+ dividerColor: Color(0x1fffffff),
+ highlightColor: Color(0x40cccccc),
+ splashColor: Color(0x40cccccc),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0xb3ffffff),
+ disabledColor: Color(0x62ffffff),
+ buttonColor: Color(0xffc38609),
+ toggleableActiveColor: Color(0xfff3a80c),
+ secondaryHeaderColor: Color(0xff616161),
+ textSelectionColor: Color(0xfff3a80c),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xfff3a80c),
+ backgroundColor: Color(0xff616161),
+ dialogBackgroundColor: Color(0xff424242),
+ indicatorColor: Color(0xfff3a80c),
+ hintColor: Color(0x80ffffff),
+ errorColor: Color(0xffd32f2f),
+ appBarTheme: AppBarTheme(
+ brightness: Brightness.dark,
+ color: Colors.grey[900],
+ ),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8.0),
+ ),
+ ),
+ buttonColor: Color(0xfff6bb41),
+ disabledColor: Color(0x61ffffff),
+ highlightColor: Color(0x29ffffff),
+ splashColor: Color(0x1fffffff),
+ focusColor: Color(0x1fffffff),
+ hoverColor: Color(0x0affffff),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ sliderTheme: SliderThemeData.fromPrimaryColors(
+ primaryColor: Color(0xfff6bb41),
+ primaryColorLight: Color(0xfffdeece),
+ primaryColorDark: Color(0xff926507),
+ valueIndicatorTextStyle: TextStyle(
+ color: Color(0xffffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1fffffff),
+ brightness: Brightness.dark,
+ deleteIconColor: Color(0xdeffffff),
+ disabledColor: Color(0x0cffffff),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ color: Color(0xdeffffff),
+ fontSize: 12,
+ fontFamily: font,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.only(top: 4, bottom: 4, left: 4, right: 4),
+ secondaryLabelStyle: TextStyle(
+ color: Color(0x3dffffff),
+ fontSize: 12,
+ fontFamily: font,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3d212121),
+ selectedColor: Color(0x3dffffff),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ )),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "greenLight":
+ return ThemeData(
+ primarySwatch: MaterialColor(4287870896, {
+ 50: Color(0xfff0f5f4),
+ 100: Color(0xffe0ebe9),
+ 200: Color(0xffc2d6d2),
+ 300: Color(0xffa3c2bc),
+ 400: Color(0xff85ada5),
+ 500: Color(0xff66998f),
+ 600: Color(0xff527a72),
+ 700: Color(0xff3d5c56),
+ 800: Color(0xff293d39),
+ 900: Color(0xff141f1d)
+ }),
+ fontFamily: font,
+ brightness: Brightness.light,
+ primaryColor: Color(0xff93b7b0),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xffe0ebe9),
+ primaryColorDark: Color(0xff3d5c56),
+ accentColor: Color(0xff66998f),
+ accentColorBrightness: Brightness.dark,
+ canvasColor: Color(0xfffafafa),
+ scaffoldBackgroundColor: Color(0xfffafafa),
+ bottomAppBarColor: Color(0xffffffff),
+ cardColor: Color(0xffffffff),
+ dividerColor: Color(0x1f000000),
+ highlightColor: Color(0x66bcbcbc),
+ splashColor: Color(0x66c8c8c8),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0x8a000000),
+ disabledColor: Color(0x61000000),
+ buttonColor: Color(0xff93b7b0),
+ toggleableActiveColor: Color(0xff527a72),
+ secondaryHeaderColor: Color(0xfff0f5f4),
+ textSelectionColor: Color(0xffc2d6d2),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xffa3c2bc),
+ backgroundColor: Color(0xffc2d6d2),
+ dialogBackgroundColor: Color(0xffffffff),
+ indicatorColor: Color(0xff66998f),
+ hintColor: Color(0x8a000000),
+ errorColor: Color(0xffd32f2f),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8.0),
+ ),
+ ),
+ buttonColor: Color(0xff93b7b0),
+ disabledColor: Color(0x61000000),
+ highlightColor: Color(0x29000000),
+ splashColor: Color(0x1f000000),
+ focusColor: Color(0x1f000000),
+ hoverColor: Color(0x0a000000),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1f000000),
+ brightness: Brightness.light,
+ deleteIconColor: Color(0xde000000),
+ disabledColor: Color(0x0c000000),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.only(top: 4, bottom: 4, left: 4, right: 4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3d93b7b0),
+ selectedColor: Color(0x3d93b7b0),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ case "greenDark":
+ return ThemeData(
+ primarySwatch: MaterialColor(4280361249, {
+ 50: Color(0xfff2f2f2),
+ 100: Color(0xffe6e6e6),
+ 200: Color(0xffcccccc),
+ 300: Color(0xffb3b3b3),
+ 400: Color(0xff999999),
+ 500: Color(0xff808080),
+ 600: Color(0xff666666),
+ 700: Color(0xff4d4d4d),
+ 800: Color(0xff333333),
+ 900: Color(0xff191919)
+ }),
+ fontFamily: font,
+ brightness: Brightness.dark,
+ primaryColor: Color(0xff93b7b0),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xff9e9e9e),
+ primaryColorDark: Color(0xff000000),
+ accentColor: Color(0xff3d5c56),
+ accentColorBrightness: Brightness.light,
+ canvasColor: Colors.grey[900],
+ scaffoldBackgroundColor: Color(0xff303030),
+ bottomAppBarColor: Color(0xff424242),
+ cardColor: Color(0xff424242),
+ dividerColor: Color(0x1fffffff),
+ highlightColor: Color(0x40cccccc),
+ splashColor: Color(0x40cccccc),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0xb3ffffff),
+ disabledColor: Color(0x62ffffff),
+ buttonColor: Color(0xff93b7b0),
+ toggleableActiveColor: Color(0xff3d5c56),
+ secondaryHeaderColor: Color(0xff616161),
+ textSelectionColor: Color(0xff3d5c56),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xff3d5c56),
+ backgroundColor: Color(0xff616161),
+ dialogBackgroundColor: Color(0xff424242),
+ indicatorColor: Color(0xff3d5c56),
+ hintColor: Color(0x80ffffff),
+ errorColor: Color(0xffd32f2f),
+ appBarTheme: AppBarTheme(
+ brightness: Brightness.dark,
+ color: Colors.grey[900],
+ ),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8.0),
+ ),
+ ),
+ buttonColor: Color(0xff93b7b0),
+ disabledColor: Color(0x61ffffff),
+ highlightColor: Color(0x29ffffff),
+ splashColor: Color(0x1fffffff),
+ focusColor: Color(0x1fffffff),
+ hoverColor: Color(0x0affffff),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ sliderTheme: SliderThemeData.fromPrimaryColors(
+ primaryColor: Color(0xff93b7b0),
+ primaryColorLight: Color(0xffe0ebe9),
+ primaryColorDark: Color(0xff3d5c56),
+ valueIndicatorTextStyle: TextStyle(
+ color: Color(0xffffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1fffffff),
+ brightness: Brightness.dark,
+ deleteIconColor: Color(0xdeffffff),
+ disabledColor: Color(0x0cffffff),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xb3ffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.only(top: 4, bottom: 4, left: 4, right: 4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Color(0xb3ffffff),
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3d212121),
+ selectedColor: Color(0x3dffffff),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+
+ default:
+ return ThemeData(
+ primarySwatch: MaterialColor(4293223245, {
+ 50: Color(0xfffcebe9),
+ 100: Color(0xfff9d8d3),
+ 200: Color(0xfff2b1a6),
+ 300: Color(0xffec8a79),
+ 400: Color(0xffe5634d),
+ 500: Color(0xffdf3c20),
+ 600: Color(0xffb2301a),
+ 700: Color(0xff862413),
+ 800: Color(0xff59180d),
+ 900: Color(0xff2d0c06)
+ }),
+ fontFamily: font,
+ brightness: Brightness.light,
+ primaryColor: Color(0xffe5634d),
+ primaryColorBrightness: Brightness.dark,
+ primaryColorLight: Color(0xffFF8A65),
+ primaryColorDark: Color(0xff862413),
+ accentColor: Color(0xff4A90A4),
+ accentColorBrightness: Brightness.dark,
+ canvasColor: Color(0xfffafafa),
+ scaffoldBackgroundColor: Color(0xfffafafa),
+ bottomAppBarColor: Color(0xffffffff),
+ cardColor: Color(0xffffffff),
+ dividerColor: Color(0x1f000000),
+ highlightColor: Color(0x66bcbcbc),
+ splashColor: Color(0x66c8c8c8),
+ selectedRowColor: Color(0xfff5f5f5),
+ unselectedWidgetColor: Color(0x8a000000),
+ disabledColor: Color(0x61000000),
+ buttonColor: Color(0xffe5634d),
+ toggleableActiveColor: Color(0xff4A90A4),
+ secondaryHeaderColor: Color(0xfffcebe9),
+ textSelectionColor: Color(0xff4A90A4),
+ cursorColor: Color(0xff4285f4),
+ textSelectionHandleColor: Color(0xff4A90A4),
+ backgroundColor: Color(0xfff2b1a6),
+ dialogBackgroundColor: Color(0xffffffff),
+ indicatorColor: Color(0xff4A90A4),
+ hintColor: Color(0x8a000000),
+ errorColor: Color(0xffd32f2f),
+ buttonTheme: ButtonThemeData(
+ textTheme: ButtonTextTheme.accent,
+ minWidth: 88,
+ height: 48,
+ padding: EdgeInsets.only(left: 16, right: 16),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ buttonColor: Color(0xffe5634d),
+ disabledColor: Color(0x61000000),
+ highlightColor: Color(0x29000000),
+ splashColor: Color(0x1f000000),
+ focusColor: Color(0x1f000000),
+ hoverColor: Color(0x0a000000),
+ ),
+ inputDecorationTheme: InputDecorationTheme(
+ contentPadding: EdgeInsets.only(
+ top: 12,
+ bottom: 12,
+ left: 15,
+ right: 15,
+ ),
+ ),
+ chipTheme: ChipThemeData(
+ backgroundColor: Color(0x1f000000),
+ brightness: Brightness.light,
+ deleteIconColor: Color(0xffdf3c20),
+ disabledColor: Color(0x0c000000),
+ labelPadding: EdgeInsets.only(left: 8, right: 8),
+ labelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ padding: EdgeInsets.all(4),
+ secondaryLabelStyle: TextStyle(
+ fontSize: 12,
+ fontFamily: font,
+ color: Colors.black,
+ fontWeight: FontWeight.w400,
+ fontStyle: FontStyle.normal,
+ ),
+ secondarySelectedColor: Color(0x3de5634d),
+ selectedColor: Color(0x3de5634d),
+ shape: StadiumBorder(
+ side: BorderSide(
+ color: Color(0xff000000),
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ ),
+ dialogTheme: DialogTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(
+ Radius.circular(8),
+ ),
+ ),
+ ),
+ cardTheme: CardTheme(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ ),
+ ),
+ );
+ }
+ }
+
+ ///Singleton factory
+ static final CollectionTheme _instance = CollectionTheme._internal();
+
+ factory CollectionTheme() {
+ return _instance;
+ }
+
+ CollectionTheme._internal();
+}
diff --git a/lib/main.dart b/lib/main.dart
new file mode 100644
index 0000000..e1da049
--- /dev/null
+++ b/lib/main.dart
@@ -0,0 +1,33 @@
+import 'package:bloc/bloc.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/widgets.dart';
+import 'package:listar_flutter/app.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class AppDelegate extends BlocDelegate {
+ ///Support Development
+ @override
+ void onEvent(Bloc bloc, Object event) {
+ super.onEvent(bloc, event);
+ UtilLogger.log('BLOC EVENT', event);
+ }
+
+ ///Support Development
+ @override
+ void onTransition(Bloc bloc, Transition transition) {
+ super.onTransition(bloc, transition);
+ UtilLogger.log('BLOC TRANSITION', transition);
+ }
+
+ ///Support Development
+ @override
+ void onError(Bloc bloc, Object error, StackTrace stacktrace) {
+ super.onError(bloc, error, stacktrace);
+ UtilLogger.log('BLOC ERROR', error);
+ }
+}
+
+void main() {
+ BlocSupervisor.delegate = AppDelegate();
+ runApp(App());
+}
diff --git a/lib/main_navigation.dart b/lib/main_navigation.dart
new file mode 100644
index 0000000..cf56b22
--- /dev/null
+++ b/lib/main_navigation.dart
@@ -0,0 +1,71 @@
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/screens/profile/profile.dart';
+import 'package:listar_flutter/screens/screen.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class MainNavigation extends StatefulWidget {
+ MainNavigation({Key key}) : super(key: key);
+
+ @override
+ _MainNavigationState createState() {
+ return _MainNavigationState();
+ }
+}
+
+class _MainNavigationState extends State {
+ int _selectedIndex = 0;
+
+ @override
+ void initState() {
+ super.initState();
+ }
+
+ ///On change tab bottom menu
+ void _onItemTapped(int index) {
+ setState(() {
+ _selectedIndex = index;
+ });
+ }
+
+ ///List bottom menu
+ List _bottomBarItem(BuildContext context) {
+ return [
+ BottomNavigationBarItem(
+ icon: Icon(Icons.home),
+ title: Padding(
+ padding: EdgeInsets.only(top: 3),
+ child: Text(Translate.of(context).translate('home')),
+ ),
+ ),
+ BottomNavigationBarItem(
+ icon: Icon(Icons.account_circle),
+ title: Padding(
+ padding: EdgeInsets.only(top: 3),
+ child: Text(Translate.of(context).translate('pref')),
+ ),
+ ),
+ ];
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: IndexedStack(
+ index: _selectedIndex,
+ children: [
+ Home(),
+ Profile(),
+ ],
+ ),
+ bottomNavigationBar: BottomNavigationBar(
+ items: _bottomBarItem(context),
+ currentIndex: _selectedIndex,
+ type: BottomNavigationBarType.fixed,
+ unselectedItemColor: Theme.of(context).unselectedWidgetColor,
+ selectedItemColor: Theme.of(context).primaryColor,
+ showUnselectedLabels: true,
+ onTap: _onItemTapped,
+ ),
+ );
+ }
+}
diff --git a/lib/models/model.dart b/lib/models/model.dart
new file mode 100644
index 0000000..ca0f75a
--- /dev/null
+++ b/lib/models/model.dart
@@ -0,0 +1,16 @@
+export 'model_banner.dart';
+export 'model_category.dart';
+export 'model_comment.dart';
+export 'model_hour.dart';
+export 'model_icon.dart';
+export 'model_location.dart';
+export 'model_message.dart';
+export 'model_notification.dart';
+export 'model_product.dart';
+export 'model_rate.dart';
+export 'model_result_api.dart';
+export 'model_sort.dart';
+export 'model_tab.dart';
+export 'model_tag.dart';
+export 'model_theme.dart';
+export 'model_user.dart';
diff --git a/lib/models/model_banner.dart b/lib/models/model_banner.dart
new file mode 100644
index 0000000..b6df070
--- /dev/null
+++ b/lib/models/model_banner.dart
@@ -0,0 +1,23 @@
+class ImageModel {
+ final int id;
+ final String image;
+
+ ImageModel(
+ this.id,
+ this.image,
+ );
+
+ factory ImageModel.fromJson(Map json) {
+ return ImageModel(
+ json['id'] as int ?? 0,
+ json['image'] as String ?? "Unknown",
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'id': id,
+ 'image': image,
+ };
+ }
+}
diff --git a/lib/models/model_category.dart b/lib/models/model_category.dart
new file mode 100644
index 0000000..8b63b62
--- /dev/null
+++ b/lib/models/model_category.dart
@@ -0,0 +1,60 @@
+import 'package:flutter/cupertino.dart';
+import 'package:listar_flutter/models/model.dart';
+import 'package:listar_flutter/utils/utils.dart';
+
+class CategoryModel {
+ final int id;
+ final String title;
+ final int count;
+ final String image;
+ final IconData icon;
+ final Color color;
+ final ProductType type;
+
+ CategoryModel({
+ this.id,
+ this.title,
+ this.count,
+ this.image,
+ this.icon,
+ this.color,
+ this.type,
+ });
+
+ static ProductType _setType(String type) {
+ switch (type) {
+ case 'shop':
+ return ProductType.shop;
+ case 'drink':
+ return ProductType.drink;
+ case 'event':
+ return ProductType.event;
+ case 'estate':
+ return ProductType.estate;
+ case 'job':
+ return ProductType.job;
+ case 'restaurant':
+ return ProductType.restaurant;
+ case 'automotive':
+ return ProductType.automotive;
+ case 'hotel':
+ return ProductType.hotel;
+ default:
+ return ProductType.more;
+ }
+ }
+
+ factory CategoryModel.fromJson(Map json) {
+ final icon = UtilIcon.getIconData(json['icon'] ?? "Unknown");
+ final color = UtilColor.getColorFromHex(json['color'] ?? "#ff8a65");
+ return CategoryModel(
+ id: json['id'] as int ?? 0,
+ title: json['title'] as String ?? 'Unknown',
+ count: json['count'] as int ?? 0,
+ image: json['image'] as String ?? 'Unknown',
+ icon: icon,
+ color: color,
+ type: _setType(json['type'] as String ?? "Unknown"),
+ );
+ }
+}
diff --git a/lib/models/model_comment.dart b/lib/models/model_comment.dart
new file mode 100644
index 0000000..5f7f965
--- /dev/null
+++ b/lib/models/model_comment.dart
@@ -0,0 +1,30 @@
+import 'package:listar_flutter/models/model.dart';
+
+class CommentModel {
+ final int id;
+ final UserModel user;
+ final String title;
+ final String comment;
+ final String createDate;
+ final num rate;
+
+ CommentModel(
+ this.id,
+ this.user,
+ this.title,
+ this.comment,
+ this.createDate,
+ this.rate,
+ );
+
+ factory CommentModel.fromJson(Map json) {
+ return CommentModel(
+ json['id'] as int ?? 0,
+ UserModel.fromJson(json['user']),
+ json['title'] as String ?? 'Unknown',
+ json['comment'] as String ?? 'Unknown',
+ json['created_date'] as String ?? 'Unknown',
+ json['rate'] as num ?? 0.0,
+ );
+ }
+}
diff --git a/lib/models/model_hour.dart b/lib/models/model_hour.dart
new file mode 100644
index 0000000..793f97c
--- /dev/null
+++ b/lib/models/model_hour.dart
@@ -0,0 +1,16 @@
+class HourModel {
+ final String title;
+ final String time;
+
+ HourModel(
+ this.title,
+ this.time,
+ );
+
+ factory HourModel.fromJson(Map json) {
+ return HourModel(
+ json['title'] as String ?? "Unknown",
+ json['time'] as String ?? "Unknown",
+ );
+ }
+}
diff --git a/lib/models/model_icon.dart b/lib/models/model_icon.dart
new file mode 100644
index 0000000..9271f2e
--- /dev/null
+++ b/lib/models/model_icon.dart
@@ -0,0 +1,16 @@
+class IconModel {
+ final String title;
+ final String icon;
+
+ IconModel(
+ this.title,
+ this.icon,
+ );
+
+ factory IconModel.fromJson(Map json) {
+ return IconModel(
+ json['title'] as String ?? "Unknown",
+ json['icon'] as String ?? "Unknown",
+ );
+ }
+}
diff --git a/lib/models/model_location.dart b/lib/models/model_location.dart
new file mode 100644
index 0000000..8194f83
--- /dev/null
+++ b/lib/models/model_location.dart
@@ -0,0 +1,22 @@
+class LocationModel {
+ final int id;
+ final String name;
+ final double lat;
+ final double long;
+
+ LocationModel(
+ this.id,
+ this.name,
+ this.lat,
+ this.long,
+ );
+
+ factory LocationModel.fromJson(Map json) {
+ return LocationModel(
+ json['id'] as int ?? 0,
+ json['name'] as String ?? "Unknown",
+ json['lat'] as double ?? 0.0,
+ json['long'] as double ?? 0.0,
+ );
+ }
+}
diff --git a/lib/models/model_message.dart b/lib/models/model_message.dart
new file mode 100644
index 0000000..85a8c56
--- /dev/null
+++ b/lib/models/model_message.dart
@@ -0,0 +1,70 @@
+import 'dart:io';
+
+import 'package:listar_flutter/models/model.dart';
+
+enum Status { sent, received }
+enum Type { textMessage, photo }
+
+class MessageModel {
+ final int id;
+ final String roomName;
+ final List member;
+ final UserModel from;
+ final String message;
+ final DateTime date;
+ final Status status;
+ final File file;
+ final Type type;
+
+ MessageModel(
+ this.id,
+ this.roomName,
+ this.member,
+ this.from,
+ this.message,
+ this.date,
+ this.status,
+ this.file,
+ this.type,
+ );
+
+ factory MessageModel.fromJson(Map json) {
+ Status status = Status.sent;
+ File file;
+ Type type = Type.textMessage;
+ List member;
+ UserModel from;
+
+ if (json['status'] == 'received') {
+ status = Status.received;
+ }
+
+ if (json['file'] != null) {
+ file = File(json['file']);
+ type = Type.photo;
+ }
+
+ if (json['member'] != null) {
+ final Iterable convertUser = json['member'] ?? [];
+ member = convertUser.map((item) {
+ return UserModel.fromJson(item);
+ }).toList();
+ }
+
+ if (json['from'] != null) {
+ from = UserModel.fromJson(json['from']);
+ }
+
+ return MessageModel(
+ json['id'] as int ?? 0,
+ json['room_name'] as String ?? '',
+ member,
+ from,
+ json['message'] as String ?? 'Unknown',
+ DateTime.tryParse(json['date']) ?? DateTime.now(),
+ status,
+ file,
+ type,
+ );
+ }
+}
diff --git a/lib/models/model_notification.dart b/lib/models/model_notification.dart
new file mode 100644
index 0000000..653c53f
--- /dev/null
+++ b/lib/models/model_notification.dart
@@ -0,0 +1,27 @@
+import 'model.dart';
+
+class NotificationModel {
+ final int id;
+ final String title;
+ final String subtitle;
+ final DateTime date;
+ final CategoryModel category;
+
+ NotificationModel(
+ this.id,
+ this.title,
+ this.subtitle,
+ this.date,
+ this.category,
+ );
+
+ factory NotificationModel.fromJson(Map json) {
+ return NotificationModel(
+ json['id'] as int,
+ json['title'] as String,
+ json['subtitle'] as String,
+ DateTime.tryParse(json['date']) ?? DateTime.now(),
+ new CategoryModel.fromJson(json['category']),
+ );
+ }
+}
diff --git a/lib/models/model_product.dart b/lib/models/model_product.dart
new file mode 100644
index 0000000..f885bd0
--- /dev/null
+++ b/lib/models/model_product.dart
@@ -0,0 +1,193 @@
+import 'package:listar_flutter/models/model.dart';
+
+enum ProductType {
+ place,
+ hotel,
+ shop,
+ drink,
+ event,
+ estate,
+ job,
+ restaurant,
+ automotive,
+ more
+}
+
+class ProductModel {
+ final int id;
+ final String title;
+ final String subtitle;
+ final String image;
+ final String createDate;
+ final bool like;
+ final num rate;
+ final num numRate;
+ final String rateText;
+ final String status;
+ final bool favorite;
+ final String address;
+ final String phone;
+ final String email;
+ final String website;
+ final String hour;
+ final String description;
+ final String date;
+ final String priceRange;
+ final List photo;
+ final List hourDetail;
+ final List service;
+ final List feature;
+ final List related;
+ final LocationModel location;
+ final UserModel author;
+ final ProductType type;
+
+ ProductModel(
+ this.id,
+ this.title,
+ this.subtitle,
+ this.image,
+ this.createDate,
+ this.like,
+ this.rate,
+ this.numRate,
+ this.rateText,
+ this.status,
+ this.favorite,
+ this.address,
+ this.phone,
+ this.email,
+ this.website,
+ this.hour,
+ this.description,
+ this.date,
+ this.priceRange,
+ this.hourDetail,
+ this.service,
+ this.photo,
+ this.feature,
+ this.related,
+ this.location,
+ this.author,
+ this.type,
+ );
+
+ static List _setHourDetail(hour) {
+ if (hour != null) {
+ final Iterable refactorHour = hour;
+ return refactorHour.map((item) {
+ return HourModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setService(icon) {
+ if (icon != null) {
+ final Iterable refactorService = icon;
+ return refactorService.map((item) {
+ return IconModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setPhoto(photo) {
+ if (photo != null) {
+ final Iterable refactorPhoto = photo;
+ return refactorPhoto.map((item) {
+ return ImageModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setFeature(feature) {
+ if (feature != null) {
+ final Iterable refactorFeature = feature;
+ return refactorFeature.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setRelated(related) {
+ if (related != null) {
+ final Iterable refactorRelated = related;
+ return refactorRelated.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static LocationModel _setLocation(Map location) {
+ if (location != null) {
+ return LocationModel.fromJson(location);
+ }
+ return null;
+ }
+
+ static UserModel _setAuthor(Map author) {
+ if (author != null) {
+ return UserModel.fromJson(author);
+ }
+ return null;
+ }
+
+ static ProductType _setType(String type) {
+ switch (type) {
+ case 'hotel':
+ return ProductType.hotel;
+ case 'shop':
+ return ProductType.shop;
+ case 'drink':
+ return ProductType.drink;
+ case 'event':
+ return ProductType.event;
+ case 'estate':
+ return ProductType.estate;
+ case 'job':
+ return ProductType.job;
+ case 'restaurant':
+ return ProductType.restaurant;
+ case 'automotive':
+ return ProductType.automotive;
+ default:
+ return ProductType.place;
+ }
+ }
+
+ factory ProductModel.fromJson(Map json) {
+ return ProductModel(
+ json['id'] as int ?? 0,
+ json['title'] as String ?? 'Unknown',
+ json['subtitle'] as String ?? 'Unknown',
+ json['image'] as String ?? 'Unknown',
+ json['created_date'] as String ?? 'Unknown',
+ json['like'] as bool ?? false,
+ json['rate'] as num ?? 0,
+ json['num_rate'] as num ?? 0,
+ json['rate_text'] as String ?? 'Unknown',
+ json['status'] as String ?? null,
+ json['favorite'] as bool ?? false,
+ json['address'] as String ?? 'Unknown',
+ json['phone'] as String ?? 'Unknown',
+ json['email'] as String ?? 'Unknown',
+ json['website'] as String ?? 'Unknown',
+ json['hour'] as String ?? 'Unknown',
+ json['description'] as String ?? 'Unknown',
+ json['date'] as String ?? 'Unknown',
+ json['price_range'] as String ?? 'Unknown',
+ _setHourDetail(json['hour_detail']),
+ _setService(json['service']),
+ _setPhoto(json['photo']),
+ _setFeature(json['feature']),
+ _setRelated(json['related']),
+ _setLocation(json['location']),
+ _setAuthor(json['author']),
+ _setType(json['type']),
+ );
+ }
+}
diff --git a/lib/models/model_product_hotel.dart b/lib/models/model_product_hotel.dart
new file mode 100644
index 0000000..34238f8
--- /dev/null
+++ b/lib/models/model_product_hotel.dart
@@ -0,0 +1,194 @@
+import 'package:listar_flutter/models/model.dart';
+
+class HotelProductModel extends ProductModel {
+ final List nearly;
+
+ HotelProductModel(
+ int id,
+ String title,
+ String subtitle,
+ String image,
+ String createDate,
+ bool like,
+ num rate,
+ num numRate,
+ String rateText,
+ String status,
+ bool favorite,
+ String address,
+ String phone,
+ String email,
+ String website,
+ String hour,
+ String description,
+ String date,
+ String priceRange,
+ List hourDetail,
+ List service,
+ List photo,
+ List feature,
+ List related,
+ LocationModel location,
+ UserModel author,
+ ProductType type,
+ this.nearly)
+ : super(
+ id,
+ title,
+ subtitle,
+ image,
+ createDate,
+ like,
+ rate,
+ numRate,
+ rateText,
+ status,
+ favorite,
+ address,
+ phone,
+ email,
+ website,
+ hour,
+ description,
+ date,
+ priceRange,
+ hourDetail,
+ service,
+ photo,
+ feature,
+ related,
+ location,
+ author,
+ type,
+ );
+
+ static List _setHourDetail(hour) {
+ if (hour != null) {
+ final Iterable refactorHour = hour;
+ return refactorHour.map((item) {
+ return HourModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setService(icon) {
+ if (icon != null) {
+ final Iterable refactorService = icon;
+ return refactorService.map((item) {
+ return IconModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setPhoto(photo) {
+ if (photo != null) {
+ final Iterable refactorPhoto = photo;
+ return refactorPhoto.map((item) {
+ return ImageModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setFeature(feature) {
+ if (feature != null) {
+ final Iterable refactorFeature = feature;
+ return refactorFeature.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setNearly(nearly) {
+ if (nearly != null) {
+ final Iterable refactorNearly = nearly;
+ return refactorNearly.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static List _setRelated(related) {
+ if (related != null) {
+ final Iterable refactorRelated = related;
+ return refactorRelated.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ static LocationModel _setLocation(Map location) {
+ if (location != null) {
+ return LocationModel.fromJson(location);
+ }
+ return null;
+ }
+
+ static UserModel _setAuthor(Map author) {
+ if (author != null) {
+ return UserModel.fromJson(author);
+ }
+ return null;
+ }
+
+ static ProductType _setType(String type) {
+ switch (type) {
+ case 'hotel':
+ return ProductType.hotel;
+ case 'shop':
+ return ProductType.shop;
+ case 'drink':
+ return ProductType.drink;
+ case 'event':
+ return ProductType.event;
+ case 'estate':
+ return ProductType.estate;
+ case 'job':
+ return ProductType.job;
+ case 'restaurant':
+ return ProductType.restaurant;
+ case 'automotive':
+ return ProductType.automotive;
+ default:
+ return ProductType.place;
+ }
+ }
+
+ factory HotelProductModel.fromJson(Map json) {
+ return HotelProductModel(
+ json['id'] as int ?? 0,
+ json['title'] as String ?? 'Unknown',
+ json['subtitle'] as String ?? 'Unknown',
+ json['image'] as String ?? 'Unknown',
+ json['created_date'] as String ?? 'Unknown',
+ json['like'] as bool ?? false,
+ json['rate'] as num ?? 0,
+ json['num_rate'] as num ?? 0,
+ json['rate_text'] as String ?? 'Unknown',
+ json['status'] as String ?? 'Unknown',
+ json['favorite'] as bool ?? false,
+ json['address'] as String ?? 'Unknown',
+ json['phone'] as String ?? 'Unknown',
+ json['email'] as String ?? 'Unknown',
+ json['website'] as String ?? 'Unknown',
+ json['hour'] as String ?? 'Unknown',
+ json['description'] as String ?? 'Unknown',
+ json['date'] as String ?? 'Unknown',
+ json['price_range'] as String ?? 'Unknown',
+ _setHourDetail(json['hour_detail']),
+ _setService(json['service']),
+ _setPhoto(json['photo']),
+ _setFeature(json['feature']),
+ _setRelated(json['related']),
+ _setLocation(json['location']),
+ _setAuthor(json['author']),
+ _setType(json['type']),
+ _setNearly(json['nearly']),
+ );
+ }
+}
diff --git a/lib/models/model_rate.dart b/lib/models/model_rate.dart
new file mode 100644
index 0000000..3b918e6
--- /dev/null
+++ b/lib/models/model_rate.dart
@@ -0,0 +1,34 @@
+class RateModel {
+ final double one;
+ final double two;
+ final double three;
+ final double four;
+ final double five;
+ final int range;
+ final double avg;
+ final int total;
+
+ RateModel(
+ this.one,
+ this.two,
+ this.three,
+ this.four,
+ this.five,
+ this.range,
+ this.avg,
+ this.total,
+ );
+
+ factory RateModel.fromJson(Map json) {
+ return RateModel(
+ json['one'] as double ?? 0.0,
+ json['two'] as double ?? 0.0,
+ json['three'] as double ?? 0.0,
+ json['four'] as double ?? 0.0,
+ json['five'] as double ?? 0.0,
+ json['range'] as int ?? 5,
+ json['avg'] as double ?? 0.0,
+ json['total'] as int ?? 5,
+ );
+ }
+}
diff --git a/lib/models/model_result_api.dart b/lib/models/model_result_api.dart
new file mode 100644
index 0000000..8702103
--- /dev/null
+++ b/lib/models/model_result_api.dart
@@ -0,0 +1,22 @@
+class ResultApiModel {
+ final bool success;
+ final String message;
+ final Map data;
+ final int code;
+
+ ResultApiModel(
+ this.success,
+ this.message,
+ this.data,
+ this.code,
+ );
+
+ factory ResultApiModel.fromJson(Map json) {
+ return ResultApiModel(
+ json['success'] as bool ?? false,
+ json['message'] as String ?? 'Unknown',
+ json['data'] as Map ?? {},
+ json['code'] as int ?? 0,
+ );
+ }
+}
diff --git a/lib/models/model_sort.dart b/lib/models/model_sort.dart
new file mode 100644
index 0000000..3f926d1
--- /dev/null
+++ b/lib/models/model_sort.dart
@@ -0,0 +1,21 @@
+import 'package:flutter/material.dart';
+
+class SortModel {
+ final String code;
+ final String name;
+ final IconData icon;
+
+ SortModel(
+ this.code,
+ this.name,
+ this.icon,
+ );
+
+ factory SortModel.fromJson(Map json) {
+ return SortModel(
+ json['code'] as String ?? "Unknown",
+ json['name'] as String ?? "Unknown",
+ json['icon'] as IconData ?? Icons.help,
+ );
+ }
+}
diff --git a/lib/models/model_tab.dart b/lib/models/model_tab.dart
new file mode 100644
index 0000000..c819a13
--- /dev/null
+++ b/lib/models/model_tab.dart
@@ -0,0 +1,41 @@
+import 'package:flutter/material.dart';
+import 'package:listar_flutter/models/model.dart';
+
+class TabModel {
+ final int id;
+ final String key;
+ final GlobalKey keyContentItem;
+ final GlobalKey keyTabItem;
+ final String title;
+ final List list;
+
+ TabModel(
+ this.id,
+ this.key,
+ this.keyContentItem,
+ this.keyTabItem,
+ this.title,
+ this.list,
+ );
+
+ static List _setList(list) {
+ if (list != null) {
+ final Iterable refactorList = list;
+ return refactorList.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ factory TabModel.fromJson(Map json) {
+ return TabModel(
+ json['id'] as int ?? 0,
+ json['key'] as String ?? 'Unknown',
+ GlobalKey(),
+ GlobalKey(),
+ json['title'] as String ?? 'Unknown',
+ _setList(json['list']),
+ );
+ }
+}
diff --git a/lib/models/model_tag.dart b/lib/models/model_tag.dart
new file mode 100644
index 0000000..3e81a29
--- /dev/null
+++ b/lib/models/model_tag.dart
@@ -0,0 +1,16 @@
+class TagModel {
+ final int id;
+ final String title;
+
+ TagModel(
+ this.id,
+ this.title,
+ );
+
+ factory TagModel.fromJson(Map json) {
+ return TagModel(
+ json['id'] as int ?? 0,
+ json['title'] as String ?? 'Unknoun',
+ );
+ }
+}
diff --git a/lib/models/model_theme.dart b/lib/models/model_theme.dart
new file mode 100644
index 0000000..e544a38
--- /dev/null
+++ b/lib/models/model_theme.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+
+class ThemeModel {
+ final String name;
+ final Color color;
+ final String lightTheme;
+ final String darkTheme;
+
+ ThemeModel(
+ this.name,
+ this.color,
+ this.lightTheme,
+ this.darkTheme,
+ );
+
+ factory ThemeModel.fromJson(Map json) {
+ return ThemeModel(
+ json['name'] as String ?? "Unknown",
+ json['color'] as Color ?? Colors.black,
+ json['light'] as String ?? "Unknown",
+ json['dark'] as String ?? "Unknown",
+ );
+ }
+}
diff --git a/lib/models/model_user.dart b/lib/models/model_user.dart
new file mode 100644
index 0000000..191da62
--- /dev/null
+++ b/lib/models/model_user.dart
@@ -0,0 +1,55 @@
+class UserModel {
+ final int id;
+ final String name;
+ final String nickname;
+ final String image;
+ final String link;
+ final String level;
+ final String description;
+ final String tag;
+ final double rate;
+ final String token;
+
+ UserModel(
+ this.id,
+ this.name,
+ this.nickname,
+ this.image,
+ this.link,
+ this.level,
+ this.description,
+ this.tag,
+ this.rate,
+ this.token,
+ );
+
+ factory UserModel.fromJson(Map json) {
+ return UserModel(
+ json['id'] as int ?? 0,
+ json['full_name'] as String ?? 'Unknown',
+ json['nickname'] as String ?? 'Unknown',
+ json['photo'] as String ?? 'Unknown',
+ json['url'] as String ?? 'Unknown',
+ json['level'] as String ?? 'Unknown',
+ json['description'] as String ?? 'Unknown',
+ json['tag'] as String ?? 'Unknown',
+ json['rate'] as double ?? 0.0,
+ json['token'] as String ?? 'Unknown',
+ );
+ }
+
+ Map toJson() {
+ return {
+ 'id': id,
+ 'full_name': name,
+ 'nickname': nickname,
+ 'photo': image,
+ 'url': link,
+ 'level': level,
+ 'description': description,
+ 'tag': tag,
+ 'rate': rate,
+ 'token': token,
+ };
+ }
+}
diff --git a/lib/models/screen_models/aboutus_page_model.dart b/lib/models/screen_models/aboutus_page_model.dart
new file mode 100644
index 0000000..58bc73d
--- /dev/null
+++ b/lib/models/screen_models/aboutus_page_model.dart
@@ -0,0 +1,30 @@
+import 'package:listar_flutter/models/model.dart';
+
+class AboutUsPageModel {
+ final String banner;
+ final String whoWeAre;
+ final List whatWeDo;
+ final List team;
+
+ AboutUsPageModel(
+ this.banner,
+ this.whoWeAre,
+ this.whatWeDo,
+ this.team,
+ );
+
+ factory AboutUsPageModel.fromJson(Map json) {
+ final Iterable refactorTeam = json['team'] ?? [];
+
+ final listTeam = refactorTeam.map((item) {
+ return UserModel.fromJson(item);
+ }).toList();
+
+ return AboutUsPageModel(
+ json['banner'] as String ?? 'Unknown',
+ json['who_we_are'] as String ?? 'Unknown',
+ json['what_we_do'].cast() ?? [],
+ listTeam,
+ );
+ }
+}
diff --git a/lib/models/screen_models/category_page_model.dart b/lib/models/screen_models/category_page_model.dart
new file mode 100644
index 0000000..cac3605
--- /dev/null
+++ b/lib/models/screen_models/category_page_model.dart
@@ -0,0 +1,21 @@
+import 'package:listar_flutter/models/model.dart';
+
+class CategoryPageModel {
+ final List category;
+
+ CategoryPageModel(
+ this.category,
+ );
+
+ factory CategoryPageModel.fromJson(Map json) {
+ final Iterable convertCategory = json['category'] ?? [];
+
+ final listCategory = convertCategory.map((item) {
+ return CategoryModel.fromJson(item);
+ }).toList();
+
+ return CategoryPageModel(
+ listCategory,
+ );
+ }
+}
diff --git a/lib/models/screen_models/chat_page_model.dart b/lib/models/screen_models/chat_page_model.dart
new file mode 100644
index 0000000..8e6ced7
--- /dev/null
+++ b/lib/models/screen_models/chat_page_model.dart
@@ -0,0 +1,36 @@
+import 'package:listar_flutter/models/model.dart';
+
+class ChatPageModel {
+ final String roomName;
+ final int online;
+ final List member;
+ final List message;
+
+ ChatPageModel(
+ this.roomName,
+ this.online,
+ this.member,
+ this.message,
+ );
+
+ factory ChatPageModel.fromJson(Map json) {
+ final Iterable convertMessage = json['message'] ?? [];
+
+ final listMessage = convertMessage.map((item) {
+ return MessageModel.fromJson(item);
+ }).toList();
+
+ final Iterable convertUser = json['member'] ?? [];
+
+ final listUser = convertUser.map((item) {
+ return UserModel.fromJson(item);
+ }).toList();
+
+ return ChatPageModel(
+ json['room_name'] as String ?? '',
+ json['online'] as int ?? 0,
+ listUser,
+ listMessage,
+ );
+ }
+}
diff --git a/lib/models/screen_models/filter_page_model.dart b/lib/models/screen_models/filter_page_model.dart
new file mode 100644
index 0000000..96b07ba
--- /dev/null
+++ b/lib/models/screen_models/filter_page_model.dart
@@ -0,0 +1,16 @@
+class FilterPageModel {
+ final List category;
+ final List service;
+
+ FilterPageModel(
+ this.category,
+ this.service,
+ );
+
+ factory FilterPageModel.fromJson(Map json) {
+ return FilterPageModel(
+ json['category'],
+ json['service'],
+ );
+ }
+}
diff --git a/lib/models/screen_models/home_page_model.dart b/lib/models/screen_models/home_page_model.dart
new file mode 100644
index 0000000..1ea0eac
--- /dev/null
+++ b/lib/models/screen_models/home_page_model.dart
@@ -0,0 +1,45 @@
+import 'package:listar_flutter/models/model.dart';
+
+class HomePageModel {
+ final List banner;
+ final List category;
+ final List popular;
+ final List list;
+
+ HomePageModel(
+ this.banner,
+ this.category,
+ this.popular,
+ this.list,
+ );
+
+ factory HomePageModel.fromJson(Map json) {
+ final Iterable refactorBanner = json['banner'] ?? [];
+ final Iterable refactorCategory = json['category'] ?? [];
+ final Iterable refactorPopular = json['popular'] ?? [];
+ final Iterable refactorList = json['list'] ?? [];
+
+ final listBanner = refactorBanner.map((item) {
+ return ImageModel.fromJson(item);
+ }).toList();
+
+ final listCategory = refactorCategory.map((item) {
+ return CategoryModel.fromJson(item);
+ }).toList();
+
+ final listPopular = refactorPopular.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+
+ final listProduct = refactorList.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+
+ return HomePageModel(
+ listBanner,
+ listCategory,
+ listPopular,
+ listProduct,
+ );
+ }
+}
diff --git a/lib/models/screen_models/message_detail_page_model.dart b/lib/models/screen_models/message_detail_page_model.dart
new file mode 100644
index 0000000..636adc4
--- /dev/null
+++ b/lib/models/screen_models/message_detail_page_model.dart
@@ -0,0 +1,21 @@
+import 'package:listar_flutter/models/model.dart';
+
+class MessageDetailPageModel {
+ final List message;
+
+ MessageDetailPageModel(
+ this.message,
+ );
+
+ factory MessageDetailPageModel.fromJson(Map json) {
+ final Iterable convertMessage = json['message'] ?? [];
+
+ final listMessage = convertMessage.map((item) {
+ return MessageModel.fromJson(item);
+ }).toList();
+
+ return MessageDetailPageModel(
+ listMessage,
+ );
+ }
+}
diff --git a/lib/models/screen_models/message_page_model.dart b/lib/models/screen_models/message_page_model.dart
new file mode 100644
index 0000000..a5cecc2
--- /dev/null
+++ b/lib/models/screen_models/message_page_model.dart
@@ -0,0 +1,21 @@
+import 'package:listar_flutter/models/model.dart';
+
+class MessagePageModel {
+ final List message;
+
+ MessagePageModel(
+ this.message,
+ );
+
+ factory MessagePageModel.fromJson(Map json) {
+ final Iterable convertMessage = json['message'] ?? [];
+
+ final listMessage = convertMessage.map((item) {
+ return MessageModel.fromJson(item);
+ }).toList();
+
+ return MessagePageModel(
+ listMessage,
+ );
+ }
+}
diff --git a/lib/models/screen_models/notification_page_model.dart b/lib/models/screen_models/notification_page_model.dart
new file mode 100644
index 0000000..7106149
--- /dev/null
+++ b/lib/models/screen_models/notification_page_model.dart
@@ -0,0 +1,21 @@
+import 'package:listar_flutter/models/model.dart';
+
+class NotificationPageModel {
+ final List notification;
+
+ NotificationPageModel(
+ this.notification,
+ );
+
+ factory NotificationPageModel.fromJson(Map json) {
+ final Iterable convertNotification = json['notification'] ?? [];
+
+ final listCategory = convertNotification.map((item) {
+ return NotificationModel.fromJson(item);
+ }).toList();
+
+ return NotificationPageModel(
+ listCategory,
+ );
+ }
+}
diff --git a/lib/models/screen_models/product_detail_page_model.dart b/lib/models/screen_models/product_detail_page_model.dart
new file mode 100644
index 0000000..93c29f1
--- /dev/null
+++ b/lib/models/screen_models/product_detail_page_model.dart
@@ -0,0 +1,11 @@
+import 'package:listar_flutter/models/model.dart';
+
+class ProductDetailPageModel {
+ final ProductModel product;
+
+ ProductDetailPageModel(this.product);
+
+ factory ProductDetailPageModel.fromJson(Map json) {
+ return ProductDetailPageModel(ProductModel.fromJson(json));
+ }
+}
diff --git a/lib/models/screen_models/product_detail_tab_page_model.dart b/lib/models/screen_models/product_detail_tab_page_model.dart
new file mode 100644
index 0000000..c9eaee4
--- /dev/null
+++ b/lib/models/screen_models/product_detail_tab_page_model.dart
@@ -0,0 +1,28 @@
+import 'package:listar_flutter/models/model.dart';
+
+class ProductDetailTabPageModel {
+ final ProductModel product;
+ final List tab;
+
+ ProductDetailTabPageModel(
+ this.product,
+ this.tab,
+ );
+
+ static List _setTab(tab) {
+ if (tab != null) {
+ final Iterable refactorTab = tab ?? [];
+ return refactorTab.map((item) {
+ return TabModel.fromJson(item);
+ }).toList();
+ }
+ return null;
+ }
+
+ factory ProductDetailTabPageModel.fromJson(Map json) {
+ return ProductDetailTabPageModel(
+ ProductModel.fromJson(json),
+ _setTab(json['tab']),
+ );
+ }
+}
diff --git a/lib/models/screen_models/product_list_page_model.dart b/lib/models/screen_models/product_list_page_model.dart
new file mode 100644
index 0000000..872767c
--- /dev/null
+++ b/lib/models/screen_models/product_list_page_model.dart
@@ -0,0 +1,19 @@
+import 'package:listar_flutter/models/model.dart';
+
+class ProductListPageModel {
+ final List list;
+
+ ProductListPageModel(
+ this.list,
+ );
+
+ factory ProductListPageModel.fromJson(Map json) {
+ final Iterable refactorList = json['list'] ?? [];
+
+ final list = refactorList.map((item) {
+ return ProductModel.fromJson(item);
+ }).toList();
+
+ return ProductListPageModel(list);
+ }
+}
diff --git a/lib/models/screen_models/profile_page_model.dart b/lib/models/screen_models/profile_page_model.dart
new file mode 100644
index 0000000..88bcd44
--- /dev/null
+++ b/lib/models/screen_models/profile_page_model.dart
@@ -0,0 +1,18 @@
+import 'package:listar_flutter/models/model.dart';
+
+class ProfilePageModel {
+ final UserModel user;
+ final List