diff --git a/GSMGateway/app/src/main/java/com/gqlabs/gsmgateway/CallService.java b/GSMGateway/app/src/main/java/com/gqlabs/gsmgateway/CallService.java
new file mode 100644
index 00000000..07359405
--- /dev/null
+++ b/GSMGateway/app/src/main/java/com/gqlabs/gsmgateway/CallService.java
@@ -0,0 +1,4 @@
+package com.gqlabs.gsmgateway;
+
+public class CallService {
+}
diff --git a/news-app/.gitignore b/news-app/.gitignore
new file mode 100644
index 00000000..0f5815ed
--- /dev/null
+++ b/news-app/.gitignore
@@ -0,0 +1,102 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# VS Code related
+.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.pub-cache/
+.pub/
+/build/
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
+
+# 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/ephemeral
+**/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
+!/dev/ci/**/Gemfile.lock
+
+# Android related
+**/android/**/gradle-wrapper.jar
+**/android/.gradle
+**/android/captures/
+**/android/gradlew
+**/android/gradlew.bat
+**/android/local.properties
+**/android/**/GeneratedPluginRegistrant.java
+**/android/key.properties
+*.keystore
+!**/android/app/debug.keystore
+
+# Generated files
+*.g.dart
+*.freezed.dart
+
+# Local env files
+.env
+.env.*
+
+# Coverage
+coverage/
diff --git a/news-app/analysis_options.yaml b/news-app/analysis_options.yaml
new file mode 100644
index 00000000..109446c8
--- /dev/null
+++ b/news-app/analysis_options.yaml
@@ -0,0 +1,32 @@
+# This file configures the analyzer, which statically analyzes Dart code to
+# check for errors, warnings, and lints.
+#
+# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
+# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
+# invoked from the command line by running `flutter analyze`.
+
+# The following line activates a set of recommended lints for Flutter apps,
+# packages, and plugins designed to encourage good coding practices.
+analyzer:
+ errors:
+ deprecated_member_use: ignore
+ must_be_immutable: ignore
+ override_on_non_overriding_member: ignore
+
+linter:
+ # The lint rules applied to this project can be customized in the
+ # section below to disable rules from the `package:flutter_lints/flutter.yaml`
+ # included above or to enable additional rules. A list of all available lints
+ # and their documentation is published at
+ # https://dart-lang.github.io/linter/lints/index.html.
+ #
+ # Instead of disabling a lint rule for the entire project in the
+ # section below, it can also be suppressed for a single line of code
+ # or a specific dart file by using the `// ignore: name_of_lint` and
+ # producing the lint.
+ rules:
+ # avoid_print: false # Uncomment to disable the `avoid_print` rule
+ # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
+
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options
diff --git a/news-app/android/app/build.gradle b/news-app/android/app/build.gradle
new file mode 100644
index 00000000..e5df0e2c
--- /dev/null
+++ b/news-app/android/app/build.gradle
@@ -0,0 +1,87 @@
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ id "com.google.gms.google-services"
+ // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
+
+def keystoreProperties = new Properties()
+ def keystorePropertiesFile = rootProject.file('key.properties')
+ if (keystorePropertiesFile.exists()) {
+ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+ }
+
+android {
+ testOptions.unitTests.includeAndroidResources = true
+ namespace 'com.news_app'
+ compileSdk flutter.compileSdkVersion
+ ndkVersion "27.0.12077973"
+
+ compileOptions {
+ coreLibraryDesugaringEnabled true
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_1_8
+ }
+
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.news_app"
+ minSdk 27
+ targetSdk flutter.targetSdkVersion
+ multiDexEnabled true
+ versionCode flutter.versionCode
+ versionName flutter.versionName
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+ //Don't Change Signing Configs below.
+ signingConfigs {
+ release {
+ keyAlias keystoreProperties['keyAlias']
+ keyPassword keystoreProperties['keyPassword']
+ storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
+ storePassword keystoreProperties['storePassword']
+ }
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ minifyEnabled false // Change from true to false
+ shrinkResources false // Change from true to false
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.debug //Change it to signingConfigs.release for release apk
+ }
+ }
+}
+
+
+
+flutter {
+ source '../..'
+}
+
+dependencies {
+ implementation 'com.android.support:multidex:2.0.1'
+ implementation platform('com.google.firebase:firebase-bom:32.3.1')
+ implementation 'com.google.firebase:firebase-auth'
+ implementation 'com.google.android.gms:play-services-ads:23.6.0'
+ implementation 'com.google.android.gms:play-services-measurement-api:21.6.1'
+ implementation 'com.google.android.gms:play-services-auth:21.3.0'
+ implementation 'com.google.firebase:firebase-analytics'
+ implementation 'com.google.guava:guava:30.1.1-android'
+ implementation 'com.facebook.android:facebook-android-sdk:[8,9)'
+ implementation 'com.google.android.ump:user-messaging-platform:2.1.0'
+ implementation 'com.google.android.recaptcha:recaptcha:18.4.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
+ }
+
diff --git a/news-app/android/app/google-services.json b/news-app/android/app/google-services.json
new file mode 100644
index 00000000..313f2d09
--- /dev/null
+++ b/news-app/android/app/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "106496138088",
+ "project_id": "news-demo-34c11",
+ "storage_bucket": "news-demo-34c11.firebasestorage.app"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:106496138088:android:ed64e0205fbece3c5514dd",
+ "android_client_info": {
+ "package_name": "com.news_app"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyD9qu92sCBHK2c85JPJSFRfviXDvDF9fD4"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/news-app/android/app/src/debug/AndroidManifest.xml b/news-app/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..399f6981
--- /dev/null
+++ b/news-app/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/news-app/android/app/src/main/AndroidManifest.xml b/news-app/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..8edf8856
--- /dev/null
+++ b/news-app/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/news-app/android/app/src/main/kotlin/com/news_app/MainActivity.kt b/news-app/android/app/src/main/kotlin/com/news_app/MainActivity.kt
new file mode 100644
index 00000000..f214b8ba
--- /dev/null
+++ b/news-app/android/app/src/main/kotlin/com/news_app/MainActivity.kt
@@ -0,0 +1,5 @@
+package com.news_app
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity : FlutterActivity() {}
diff --git a/news-app/android/app/src/main/res/drawable-v21/launch_background.xml b/news-app/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 00000000..a864ec0f
--- /dev/null
+++ b/news-app/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/news-app/android/app/src/main/res/drawable/ic_launcher.png b/news-app/android/app/src/main/res/drawable/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/drawable/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/drawable/launch_background.xml b/news-app/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 00000000..a864ec0f
--- /dev/null
+++ b/news-app/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/news-app/android/app/src/main/res/drawable/notification_icon.png b/news-app/android/app/src/main/res/drawable/notification_icon.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/drawable/notification_icon.png differ
diff --git a/news-app/android/app/src/main/res/logo_caribe.png b/news-app/android/app/src/main/res/logo_caribe.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/logo_caribe.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_squircle.png b/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_squircle.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-hdpi/ic_launcher_squircle.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png b/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher_squircle.png b/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher_squircle.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-ldpi/ic_launcher_squircle.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_squircle.png b/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_squircle.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-mdpi/ic_launcher_squircle.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_squircle.png b/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_squircle.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_squircle.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_squircle.png b/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_squircle.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_squircle.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_squircle.png b/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_squircle.png
new file mode 100644
index 00000000..7f0f9843
Binary files /dev/null and b/news-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_squircle.png differ
diff --git a/news-app/android/app/src/main/res/values-night/styles.xml b/news-app/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 00000000..449a9f93
--- /dev/null
+++ b/news-app/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/news-app/android/app/src/main/res/values/colors.xml b/news-app/android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..31c07a61
--- /dev/null
+++ b/news-app/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #008DA8
+
diff --git a/news-app/android/app/src/main/res/values/strings.xml b/news-app/android/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..2add2288
--- /dev/null
+++ b/news-app/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,7 @@
+
+
+ elCaribe
+ 3187011931582004
+ fb3187011931582004
+ c5fcb2473b8557c9ff049dd807db8240
+
diff --git a/news-app/android/app/src/main/res/values/styles.xml b/news-app/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..d74aa35c
--- /dev/null
+++ b/news-app/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/news-app/android/app/src/profile/AndroidManifest.xml b/news-app/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 00000000..399f6981
--- /dev/null
+++ b/news-app/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/news-app/android/build.gradle b/news-app/android/build.gradle
new file mode 100644
index 00000000..17bb8a3a
--- /dev/null
+++ b/news-app/android/build.gradle
@@ -0,0 +1,33 @@
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.buildDir = '../build'
+
+subprojects {
+ afterEvaluate { project ->
+ if (project.plugins.hasPlugin("com.android.application") ||
+ project.plugins.hasPlugin("com.android.library")) {
+ project.android {
+ compileSdkVersion 36
+ }
+ }
+ if (project.hasProperty('android')) {
+ project.android {
+ if (namespace == null) {
+ namespace project.group
+ }
+ }
+ }
+ }
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+ project.evaluationDependsOn(':app')
+}
+
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/news-app/android/gradle.properties b/news-app/android/gradle.properties
new file mode 100644
index 00000000..ff5389fd
--- /dev/null
+++ b/news-app/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx2048m
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/news-app/android/gradle/wrapper/gradle-wrapper.properties b/news-app/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..da32f1c2
--- /dev/null
+++ b/news-app/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl = https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/news-app/android/settings.gradle b/news-app/android/settings.gradle
new file mode 100644
index 00000000..4b1ccad6
--- /dev/null
+++ b/news-app/android/settings.gradle
@@ -0,0 +1,26 @@
+ pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }()
+
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "8.9.1" apply false
+ id "org.jetbrains.kotlin.android" version "2.1.10" apply false
+ id "com.google.gms.google-services" version "4.4.2" apply false
+}
+
+include ":app"
diff --git a/news-app/assets/animations/noInternet.json b/news-app/assets/animations/noInternet.json
new file mode 100644
index 00000000..bffec4e6
--- /dev/null
+++ b/news-app/assets/animations/noInternet.json
@@ -0,0 +1 @@
+{"nm":"No internet Illustration","ddd":0,"h":160,"w":160,"meta":{"g":"LottieFiles AE "},"layers":[{"ty":0,"nm":"Mobile Bar","sr":1,"st":14.0000005702317,"op":164.000006679857,"ip":14.0000005702317,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[80,80,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.667,"y":1},"s":[80,240,0],"t":14,"ti":[0,26.667,0],"to":[0,-26.667,0]},{"s":[80,80,0],"t":21.0000008553475}],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[0],"t":18},{"s":[100],"t":20.0000008146167}],"ix":11}},"ef":[],"w":160,"h":160,"refId":"comp_0","ind":1},{"ty":4,"nm":"Phone Outlines","sr":1,"st":1.00000004073083,"op":75.0000030548126,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[80,99.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[80,99.5,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"i","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":0,"k":{"c":true,"i":[[44.183,0],[0,-44.183],[-44.183,0],[0,44.183]],"o":[[-44.183,0],[0,44.183],[44.183,0],[0,-44.183]],"v":[[80,0],[0,80],[80,160],[160,80]]},"ix":1}}],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-7.18,0],[0,0],[0,-7.18],[0,0],[7.18,0],[0,0],[0,7.18],[0,0]],"o":[[0,0],[7.18,0],[0,0],[0,7.18],[0,0],[-7.18,0],[0,0],[0,-7.18]],"v":[[-33,-72],[33,-72],[46,-59],[46,59],[33,72],[-33,72],[-46,59],[-46,-59]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"c":{"a":0,"k":[0.698,0.102,0.102],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":1,"k":[{"o":{"x":0.743,"y":0.748},"i":{"x":0.256,"y":1},"s":[80,240],"t":14,"ti":[0,19.167],"to":[0,-19.167]},{"s":[80,125],"t":21.0000008553475}],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":4,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-7.18,0],[0,0],[0,-7.18],[0,0],[7.18,0],[0,0],[0,7.18],[0,0]],"o":[[0,0],[7.18,0],[0,0],[0,7.18],[0,0],[-7.18,0],[0,0],[0,-7.18]],"v":[[-33,-53.5],[33,-53.5],[46,-40.5],[46,77.5],[33,90.5],[-33,90.5],[-46,77.5],[-46,-40.5]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":1,"k":[{"o":{"x":0.743,"y":0.733},"i":{"x":0.213,"y":1},"s":[80,240],"t":14,"ti":[0,22.25],"to":[0,-22.25]},{"s":[80,106.5],"t":21.0000008553475}],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"BG Circle Outlines","sr":1,"st":0,"op":75.0000030548126,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[80,80,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":1,"y":0.863},"i":{"x":0.565,"y":1},"s":[0,0,100],"t":0},{"s":[100,100,100],"t":13.0000005295009}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[80,80,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":4,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-44.183,0],[0,-44.183],[44.183,0],[0,44.183]],"o":[[44.183,0],[0,44.183],[-44.183,0],[0,-44.183]],"v":[[0,-80],[80,0],[0,80],[-80,0]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.9529,0.8784],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[80,80],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3}],"v":"4.8.0","fr":29.9700012207031,"op":75.0000030548126,"ip":0,"assets":[{"nm":"","id":"comp_0","layers":[{"ty":4,"nm":"Cross Outlines","sr":1,"st":12.00000048877,"op":162.000006598395,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[9.485,9.486,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.982,"y":0},"i":{"x":0.667,"y":1},"s":[0,0,100],"t":36},{"o":{"x":0.67,"y":0},"i":{"x":0.833,"y":0.833},"s":[120,120,100],"t":46},{"s":[100,100,100],"t":50.0000020365418}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[56.45,86.45,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":12},{"o":{"x":0.167,"y":0.167},"i":{"x":0.667,"y":1},"s":[0],"t":36},{"s":[100],"t":43.0000017514259}],"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":4,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[0.248,-0.247],[0,0],[0.248,0.248],[0,0],[-0.248,0.247],[-0.248,-0.248],[0,0]],"o":[[0,0],[-0.248,0.248],[0,0],[-0.248,-0.248],[0.248,-0.248],[0,0],[0.248,0.248]],"v":[[3.143,3.142],[3.143,3.142],[2.245,3.142],[-3.143,-2.245],[-3.143,-3.142],[-2.245,-3.142],[3.143,2.245]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[9.485,9.486],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 2","ix":2,"cix":2,"np":4,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-0.248,-0.248],[0,0],[0.248,-0.248],[0,0],[0.248,0.248],[-0.248,0.248],[0,0]],"o":[[0,0],[0.248,0.247],[0,0],[-0.248,0.248],[-0.248,-0.247],[0,0],[0.248,-0.248]],"v":[[3.143,-3.142],[3.143,-3.142],[3.143,-2.245],[-2.245,3.142],[-3.143,3.142],[-3.143,2.245],[2.245,-3.142]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[9.485,9.486],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 3","ix":3,"cix":2,"np":4,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-3.286,-3.286],[0,0],[3.286,-3.286],[3.286,3.287],[-3.286,3.286]],"o":[[0,0],[3.286,3.286],[-3.286,3.287],[-3.286,-3.286],[3.286,-3.286]],"v":[[5.95,-5.95],[5.95,-5.95],[5.95,5.949],[-5.949,5.949],[-5.949,-5.95]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.902,0.2902,0.098],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[9.485,9.486],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"Bar 1 Outlines","sr":1,"st":12.00000048877,"op":162.000006598395,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[8,28,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[104,103,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-25],[2.5,-25],[5,-22.5],[5,22.5],[2.5,25],[-2.5,25],[-5,22.5],[-5,-22.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[0.7098,0.0706,0.0706],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,28],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2},{"ty":4,"nm":"Bar 1 Outlines 2","sr":1,"st":12.00000048877,"op":162.000006598395,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[8,28,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[104,103,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"a","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":1,"k":[{"o":{"x":0.517,"y":0.517},"i":{"x":0,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,3],[3,53],[13,53],[13,3]]}],"t":12},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.75,56.25],[2.75,106.25],[12.75,106.25],[12.75,56.25]]}],"t":23.0000009368092}],"ix":1}}],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-25],[2.5,-25],[5,-22.5],[5,22.5],[2.5,25],[-2.5,25],[-5,22.5],[-5,-22.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[1,0.5412,0.3961],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.5412,0.3961],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,28],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":3},{"ty":4,"nm":"Bar 2 Outlines","sr":1,"st":12.00000048877,"op":162.000006598395,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[8,23,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[88,108,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-20],[2.5,-20],[5,-17.5],[5,17.5],[2.5,20],[-2.5,20],[-5,17.5],[-5,-17.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[0.6275,0.098,0.098],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,23],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":4},{"ty":4,"nm":"Bar 2 Outlines 2","sr":1,"st":22.0000008960784,"op":172.000007005704,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[8,23,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[88,108,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"a","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":1,"k":[{"o":{"x":0.623,"y":0.612},"i":{"x":0.047,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,3],[3,43],[13,43],[13,3]]}],"t":16},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.75,45],[2.75,85],[12.75,85],[12.75,45]]}],"t":28.0000011404634}],"ix":1}}],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-20],[2.5,-20],[5,-17.5],[5,17.5],[2.5,20],[-2.5,20],[-5,17.5],[-5,-17.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[0.4745,0.0863,0.0863],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.4745,0.0863,0.0863],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,23],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":5},{"ty":4,"nm":"Bar 3 Outlines","sr":1,"st":12.00000048877,"op":162.000006598395,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[8,18,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[72,113,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-15],[2.5,-15],[5,-12.5],[5,12.5],[2.5,15],[-2.5,15],[-5,12.5],[-5,-12.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[0.5333,0.1294,0.102],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,18],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":6},{"ty":4,"nm":"Bar 3 Outlines 2","sr":1,"st":32.0000013033867,"op":182.000007413012,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[8,18,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[72,113,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"a","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":1,"k":[{"o":{"x":0.432,"y":0.402},"i":{"x":0.163,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,3],[3,33],[13,33],[13,3]]}],"t":22},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.75,35],[2.75,65],[12.75,65],[12.75,35]]}],"t":32.0000013033867}],"ix":1}}],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-15],[2.5,-15],[5,-12.5],[5,12.5],[2.5,15],[-2.5,15],[-5,12.5],[-5,-12.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[0.3647,0.0824,0.0784],"ix":3}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.3647,0.0824,0.0784],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,18],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":7},{"ty":4,"nm":"Bar 4 Outlines","sr":1,"st":12.00000048877,"op":162.000006598395,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[8,13,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[56,118,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-10],[2.5,-10],[5,-7.5],[5,7.5],[2.5,10],[-2.5,10],[-5,7.5],[-5,-7.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"c":{"a":0,"k":[0.4627,0.1137,0.0824],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,13],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":8},{"ty":4,"nm":"Bar 4 Outlines 2","sr":1,"st":63.0000025660426,"op":213.000008675668,"ip":-1.00000004073083,"hd":false,"ddd":0,"bm":0,"hasMask":true,"ao":0,"ks":{"a":{"a":0,"k":[8,13,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[56,118,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"masksProperties":[{"nm":"Mask 1","inv":false,"mode":"i","x":{"a":0,"k":0,"ix":4},"o":{"a":0,"k":100,"ix":3},"pt":{"a":1,"k":[{"o":{"x":0.359,"y":0.354},"i":{"x":0.137,"y":1},"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,3],[3,23],[13,23],[13,3]]}],"t":27},{"s":[{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[3,25.25],[3,45.25],[13,45.25],[13,25.25]]}],"t":39.0000015885026}],"ix":1}}],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":true,"i":[[-1.381,0],[0,0],[0,-1.381],[0,0],[1.381,0],[0,0],[0,1.381],[0,0]],"o":[[0,0],[1.381,0],[0,0],[0,1.381],[0,0],[-1.381,0],[0,0],[0,-1.381]],"v":[[-2.5,-10],[2.5,-10],[5,-7.5],[5,7.5],[2.5,10],[-2.5,10],[-5,7.5],[-5,-7.5]]},"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,0.5412,0.3961],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[8,13],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":9}]}]}
\ No newline at end of file
diff --git a/news-app/assets/font/Roboto-Bold.ttf b/news-app/assets/font/Roboto-Bold.ttf
new file mode 100644
index 00000000..43da14d8
Binary files /dev/null and b/news-app/assets/font/Roboto-Bold.ttf differ
diff --git a/news-app/assets/font/Roboto-Light.ttf b/news-app/assets/font/Roboto-Light.ttf
new file mode 100644
index 00000000..e7307e72
Binary files /dev/null and b/news-app/assets/font/Roboto-Light.ttf differ
diff --git a/news-app/assets/font/Roboto-Medium.ttf b/news-app/assets/font/Roboto-Medium.ttf
new file mode 100644
index 00000000..ac0f908b
Binary files /dev/null and b/news-app/assets/font/Roboto-Medium.ttf differ
diff --git a/news-app/assets/font/Roboto-Regular.ttf b/news-app/assets/font/Roboto-Regular.ttf
new file mode 100644
index 00000000..ddf4bfac
Binary files /dev/null and b/news-app/assets/font/Roboto-Regular.ttf differ
diff --git a/news-app/assets/images/live_news.png b/news-app/assets/images/live_news.png
new file mode 100644
index 00000000..f4f2fe9c
Binary files /dev/null and b/news-app/assets/images/live_news.png differ
diff --git a/news-app/assets/images/live_news_dark.png b/news-app/assets/images/live_news_dark.png
new file mode 100644
index 00000000..5f2736dd
Binary files /dev/null and b/news-app/assets/images/live_news_dark.png differ
diff --git a/news-app/assets/images/placeholder.png b/news-app/assets/images/placeholder.png
new file mode 100644
index 00000000..2eb62c48
Binary files /dev/null and b/news-app/assets/images/placeholder.png differ
diff --git a/news-app/assets/images/svgImage/apple_logo.svg b/news-app/assets/images/svgImage/apple_logo.svg
new file mode 100644
index 00000000..34d10c7c
--- /dev/null
+++ b/news-app/assets/images/svgImage/apple_logo.svg
@@ -0,0 +1,6 @@
+
diff --git a/news-app/assets/images/svgImage/cameraIcon.svg b/news-app/assets/images/svgImage/cameraIcon.svg
new file mode 100644
index 00000000..3cbe607f
--- /dev/null
+++ b/news-app/assets/images/svgImage/cameraIcon.svg
@@ -0,0 +1,4 @@
+
diff --git a/news-app/assets/images/svgImage/caribe_blanco.svg b/news-app/assets/images/svgImage/caribe_blanco.svg
new file mode 100644
index 00000000..e3c157a7
--- /dev/null
+++ b/news-app/assets/images/svgImage/caribe_blanco.svg
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/deactivatedNews.svg b/news-app/assets/images/svgImage/deactivatedNews.svg
new file mode 100644
index 00000000..9face8bb
--- /dev/null
+++ b/news-app/assets/images/svgImage/deactivatedNews.svg
@@ -0,0 +1,10 @@
+
diff --git a/news-app/assets/images/svgImage/deleteAccount.svg b/news-app/assets/images/svgImage/deleteAccount.svg
new file mode 100644
index 00000000..2d964d93
--- /dev/null
+++ b/news-app/assets/images/svgImage/deleteAccount.svg
@@ -0,0 +1,26 @@
+
diff --git a/news-app/assets/images/svgImage/deleteMyNews.svg b/news-app/assets/images/svgImage/deleteMyNews.svg
new file mode 100644
index 00000000..c8e8bcb0
--- /dev/null
+++ b/news-app/assets/images/svgImage/deleteMyNews.svg
@@ -0,0 +1,6 @@
+
diff --git a/news-app/assets/images/svgImage/delete_icon.svg b/news-app/assets/images/svgImage/delete_icon.svg
new file mode 100644
index 00000000..98c88c11
--- /dev/null
+++ b/news-app/assets/images/svgImage/delete_icon.svg
@@ -0,0 +1,7 @@
+
diff --git a/news-app/assets/images/svgImage/editMyNews.svg b/news-app/assets/images/svgImage/editMyNews.svg
new file mode 100644
index 00000000..fd2eb589
--- /dev/null
+++ b/news-app/assets/images/svgImage/editMyNews.svg
@@ -0,0 +1,5 @@
+
diff --git a/news-app/assets/images/svgImage/expiredNews.svg b/news-app/assets/images/svgImage/expiredNews.svg
new file mode 100644
index 00000000..d8626e0e
--- /dev/null
+++ b/news-app/assets/images/svgImage/expiredNews.svg
@@ -0,0 +1,6 @@
+
diff --git a/news-app/assets/images/svgImage/facebook.svg b/news-app/assets/images/svgImage/facebook.svg
new file mode 100644
index 00000000..1618cd03
--- /dev/null
+++ b/news-app/assets/images/svgImage/facebook.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/facebook_button.svg b/news-app/assets/images/svgImage/facebook_button.svg
new file mode 100644
index 00000000..6adffefd
--- /dev/null
+++ b/news-app/assets/images/svgImage/facebook_button.svg
@@ -0,0 +1,3 @@
+
diff --git a/news-app/assets/images/svgImage/filter.svg b/news-app/assets/images/svgImage/filter.svg
new file mode 100644
index 00000000..50fcf7cf
--- /dev/null
+++ b/news-app/assets/images/svgImage/filter.svg
@@ -0,0 +1,3 @@
+
diff --git a/news-app/assets/images/svgImage/flag_icon.svg b/news-app/assets/images/svgImage/flag_icon.svg
new file mode 100644
index 00000000..5d788ab7
--- /dev/null
+++ b/news-app/assets/images/svgImage/flag_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/news-app/assets/images/svgImage/forgot.svg b/news-app/assets/images/svgImage/forgot.svg
new file mode 100644
index 00000000..979581e0
--- /dev/null
+++ b/news-app/assets/images/svgImage/forgot.svg
@@ -0,0 +1,29 @@
+
+
+
diff --git a/news-app/assets/images/svgImage/gallaryIcon.svg b/news-app/assets/images/svgImage/gallaryIcon.svg
new file mode 100644
index 00000000..2d491918
--- /dev/null
+++ b/news-app/assets/images/svgImage/gallaryIcon.svg
@@ -0,0 +1,5 @@
+
diff --git a/news-app/assets/images/svgImage/google_button.svg b/news-app/assets/images/svgImage/google_button.svg
new file mode 100644
index 00000000..59d1c254
--- /dev/null
+++ b/news-app/assets/images/svgImage/google_button.svg
@@ -0,0 +1,8 @@
+
diff --git a/news-app/assets/images/svgImage/intro_icon.svg b/news-app/assets/images/svgImage/intro_icon.svg
new file mode 100644
index 00000000..6a6b5071
--- /dev/null
+++ b/news-app/assets/images/svgImage/intro_icon.svg
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/linkedin.svg b/news-app/assets/images/svgImage/linkedin.svg
new file mode 100644
index 00000000..902724e5
--- /dev/null
+++ b/news-app/assets/images/svgImage/linkedin.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/live_news.svg b/news-app/assets/images/svgImage/live_news.svg
new file mode 100644
index 00000000..973009ce
--- /dev/null
+++ b/news-app/assets/images/svgImage/live_news.svg
@@ -0,0 +1,11 @@
+
diff --git a/news-app/assets/images/svgImage/live_news_dark.svg b/news-app/assets/images/svgImage/live_news_dark.svg
new file mode 100644
index 00000000..ae1ceedb
--- /dev/null
+++ b/news-app/assets/images/svgImage/live_news_dark.svg
@@ -0,0 +1,11 @@
+
diff --git a/news-app/assets/images/svgImage/logo_caribe.svg b/news-app/assets/images/svgImage/logo_caribe.svg
new file mode 100644
index 00000000..6c0b69a7
--- /dev/null
+++ b/news-app/assets/images/svgImage/logo_caribe.svg
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/logout.svg b/news-app/assets/images/svgImage/logout.svg
new file mode 100644
index 00000000..b60d8621
--- /dev/null
+++ b/news-app/assets/images/svgImage/logout.svg
@@ -0,0 +1,26 @@
+
diff --git a/news-app/assets/images/svgImage/maintenance.svg b/news-app/assets/images/svgImage/maintenance.svg
new file mode 100644
index 00000000..3a4474a3
--- /dev/null
+++ b/news-app/assets/images/svgImage/maintenance.svg
@@ -0,0 +1,80 @@
+
diff --git a/news-app/assets/images/svgImage/news.svg b/news-app/assets/images/svgImage/news.svg
new file mode 100644
index 00000000..c945a54d
--- /dev/null
+++ b/news-app/assets/images/svgImage/news.svg
@@ -0,0 +1,9 @@
+
diff --git a/news-app/assets/images/svgImage/onboarding1.svg b/news-app/assets/images/svgImage/onboarding1.svg
new file mode 100644
index 00000000..d715c902
--- /dev/null
+++ b/news-app/assets/images/svgImage/onboarding1.svg
@@ -0,0 +1,262 @@
+
diff --git a/news-app/assets/images/svgImage/onboarding2.svg b/news-app/assets/images/svgImage/onboarding2.svg
new file mode 100644
index 00000000..67670ee9
--- /dev/null
+++ b/news-app/assets/images/svgImage/onboarding2.svg
@@ -0,0 +1,948 @@
+
diff --git a/news-app/assets/images/svgImage/onboarding3.svg b/news-app/assets/images/svgImage/onboarding3.svg
new file mode 100644
index 00000000..3ea81f5d
--- /dev/null
+++ b/news-app/assets/images/svgImage/onboarding3.svg
@@ -0,0 +1,895 @@
+
diff --git a/news-app/assets/images/svgImage/phone_button.svg b/news-app/assets/images/svgImage/phone_button.svg
new file mode 100644
index 00000000..4f568022
--- /dev/null
+++ b/news-app/assets/images/svgImage/phone_button.svg
@@ -0,0 +1,3 @@
+
diff --git a/news-app/assets/images/svgImage/placeholder_video.svg b/news-app/assets/images/svgImage/placeholder_video.svg
new file mode 100644
index 00000000..df4b14e3
--- /dev/null
+++ b/news-app/assets/images/svgImage/placeholder_video.svg
@@ -0,0 +1,15 @@
+
diff --git a/news-app/assets/images/svgImage/rss_feed.svg b/news-app/assets/images/svgImage/rss_feed.svg
new file mode 100644
index 00000000..a9261d31
--- /dev/null
+++ b/news-app/assets/images/svgImage/rss_feed.svg
@@ -0,0 +1,13 @@
+
diff --git a/news-app/assets/images/svgImage/searchbar_arrow.svg b/news-app/assets/images/svgImage/searchbar_arrow.svg
new file mode 100644
index 00000000..13e706a2
--- /dev/null
+++ b/news-app/assets/images/svgImage/searchbar_arrow.svg
@@ -0,0 +1,6 @@
+
diff --git a/news-app/assets/images/svgImage/splash_icon.svg b/news-app/assets/images/svgImage/splash_icon.svg
new file mode 100644
index 00000000..99ea7b16
--- /dev/null
+++ b/news-app/assets/images/svgImage/splash_icon.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/telegram.svg b/news-app/assets/images/svgImage/telegram.svg
new file mode 100644
index 00000000..f47bb43e
--- /dev/null
+++ b/news-app/assets/images/svgImage/telegram.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/whatsapp.svg b/news-app/assets/images/svgImage/whatsapp.svg
new file mode 100644
index 00000000..e945a88e
--- /dev/null
+++ b/news-app/assets/images/svgImage/whatsapp.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/news-app/assets/images/svgImage/wrteam_logo.svg b/news-app/assets/images/svgImage/wrteam_logo.svg
new file mode 100644
index 00000000..25a598ba
--- /dev/null
+++ b/news-app/assets/images/svgImage/wrteam_logo.svg
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/news-app/assets/languages/jsonData.json b/news-app/assets/languages/jsonData.json
new file mode 100644
index 00000000..a417275a
--- /dev/null
+++ b/news-app/assets/languages/jsonData.json
@@ -0,0 +1,244 @@
+{
+ "somethingMSg": "Something went wrong. Please try again after some time",
+ "bookmarkLbl": "Bookmarks",
+ "loginLbl": "Login",
+ "welTitle1": "Always Up-to-Date",
+ "welTitle2": "Bookmark & Share",
+ "welTitle3": "New Categories",
+ "welDes1": "Receive notifications for the most recent news updates and many more.",
+ "welDes2": "Save and easily share news with your friends using our intuitive news app feature.",
+ "welDes3": "Enjoy expertly tailored news, crafted exclusively for your interests.",
+ "nameLbl": "Name",
+ "emailLbl": "Email",
+ "passLbl": "Password",
+ "confpassLbl": "Confirm Password",
+ "priPolicy": "Privacy Policy",
+ "andLbl": " and ",
+ "termLbl": "Terms of Service",
+ "forgotPassLbl": "Forgot Password ?",
+ "internetmsg": "Internet Connection not available",
+ "loginMsg": "Login Successfully",
+ "loginNowLbl": "Login Now",
+ "logoutLbl": "Logout",
+ "cancelBtn": "Cancel",
+ "noNews": "News Not Available",
+ "exitWR": "Double tap back button to exit",
+ "shareLbl": "Share",
+ "deactiveMsg": "You are deactivated by admin",
+ "bookmarkNotAvail": "Bookmarks Not Available",
+ "notiNotAvail": "Notifications Not Available",
+ "notificationLbl": "Notifications",
+ "logoutTxt": "Are you sure you want to Logout?",
+ "yesLbl": "Yes",
+ "noLbl": "No",
+ "frgtPassHead": "Enter the email address associated with your account",
+ "forgotPassSub": "We will email you a link to reset your password",
+ "submitBtn": "Submit",
+ "verifyEmailMsg": "Please first verify your email address!!!",
+ "passReset": "Password reset link has been sent to your mail",
+ "profileUpdateMsg": "Profile Data Updated Successfully",
+ "bookmarkLogin": "Please Login to Access Your Bookmarks !!",
+ "preferenceSave": "Your preference saved!!",
+ "managePreferences": "Manage Preferences",
+ "loginReqMsg": "Login Required...",
+ "firstFillData": "Please First Fill Data...!",
+ "deleteTxt": "Delete",
+ "reportTxt": "Report",
+ "nameRequired": "Name is Required",
+ "nameLength": "Name should be atleast 2 character long",
+ "emailRequired": "email address is Required",
+ "emailValid": "Please enter a valid email Address!",
+ "pwdRequired": "Password is Required",
+ "confPassRequired": "Confirm Password is Required",
+ "confPassNotMatch": "Confirm Password not match",
+ "photoLibLbl": "Photo Library",
+ "cameraLbl": "Camera",
+ "verifSentMail": "Verification email sent to ",
+ "cancelLogin": "Login cancelled by the user.",
+ "loginTxt": "Log In",
+ "loginBtn": "Login",
+ "signupBtn": "Sign Up",
+ "otpVerifyLbl": "OTP Verification",
+ "enterMblLbl": "Enter Your Mobile Number",
+ "receiveDigitLbl": "You'll Receive 6 digit code for phone number verification",
+ "reqOtpLbl": "Request OTP",
+ "otpSentLbl": "OTP has been sent to ",
+ "resendCodeLbl": "Resend Code in",
+ "mobileLbl": "Mobile",
+ "darkModeLbl": "Dark Mode",
+ "changeLang": "Change Language",
+ "rateUs": "Rate Us",
+ "shareApp": "Share App",
+ "weatherLbl": "Weather Forecast",
+ "categoryLbl": "Categories",
+ "allLbl": "All",
+ "comLbl": "Comment ",
+ "saveLbl": "Save",
+ "txtSizeLbl": "Text Size",
+ "speakLoudLbl": "Speak Loud",
+ "likeLbl": "likes",
+ "comsLbl": "Comments",
+ "shareThoghtLbl": "Share Your Thoughts.",
+ "repliesLbl": "Replies",
+ "publicReply": "Add a public reply...",
+ "personalLbl": "Personal",
+ "newsLbl": "News",
+ "plzLbl": "Please",
+ "fastTrendNewsLbl": "Porque Mereces Verdaderas Respuestas! ",
+ "enterOtpTxt": "Please Enter OTP",
+ "otpError": "Error validating OTP, try again",
+ "otpMsg": "OTP verified successfully",
+ "resendLbl": "Resend OTP",
+ "otpTimeoutLbl": "Otp Retrieval Timeout!!!",
+ "mblRequired": "Mobile number is Required",
+ "mblValid": "Please enter a valid mobile number!",
+ "codeSent": "Code Sent Successfully!!!",
+ "relatedNews": "You might also like",
+ "optSel": "Please Select One Option!!!",
+ "madeBy": "Made by",
+ "skip": "Skip",
+ "nxt": "Next",
+ "signInTab": "Sign In",
+ "agreeTermPolicyLbl": "By Logging In, you agree to our",
+ "addTCFirst": "Please Ask Admin to Add Privacy Policy & Terms and Conditions first !!",
+ "orLbl": "or Log In with",
+ "signupDescr": "Create\nan Account",
+ "firstAccLbl": "First to access",
+ "allFunLbl": "all Functions",
+ "chooseLanLbl": "Select Language",
+ "videosLbl": "Videos",
+ "search": "Search",
+ "searchHomeNews": "Search News, Categories, etc.",
+ "viewMore": "View More",
+ "viewFullCoverage": "View full Coverage",
+ "updateName": "Update your Name",
+ "loginDescr": "Let's Sign \nYou In",
+ "logoutAcc": "Logout Account",
+ "deleteAcc": "Delete Account",
+ "deleteAlertTitle": "Re-Login",
+ "deleteRelogin": "To Delete your Account, You need to Login again.\nAfter that you will be able to Delete your Account.",
+ "deleteConfirm": "Are you sure?\nDo You Really Want to Delete Your Account?",
+ "pwdLength": "Password should be more than 6 character long",
+ "userNotFound": "No user found for given email.",
+ "wrongPassword": "Wrong password provided for that user.",
+ "weakPassword": "The password provided is too weak.",
+ "emailAlreadyInUse": "The account already exists for that email.",
+ "invalidPhoneNumber": "The provided phone number is not valid.",
+ "invalidVerificationCode": "The sms verification code used to create the phone auth credential is invalid.",
+ "ago": "ago",
+ "years": "years",
+ "months": "months",
+ "minutes": "minutes",
+ "seconds": "seconds",
+ "hours": "hours",
+ "days": "days",
+ "justNow": "just now",
+ "about": "about",
+ "liveVideosLbl": "Live Videos",
+ "stdPostLbl": "Standard Post",
+ "videoYoutubeLbl": "Video (Youtube)",
+ "videoOtherUrlLbl": "Video (Other Url)",
+ "videoUploadLbl": "Video (Upload)",
+ "createNewsLbl": "Create News",
+ "step1Of2Lbl": "Step 1 of 2",
+ "catLbl": "Category",
+ "plzSelCatLbl": "Please select category",
+ "subcatLbl": "SubCategory",
+ "contentTypeLbl": "Content Type",
+ "uploadVideoLbl": "Upload Video",
+ "youtubeUrlLbl": "Youtube Url",
+ "otherUrlLbl": "Other Url",
+ "selContentTypeLbl": "Select Content Type",
+ "titleLbl": "Title",
+ "tagLbl": "Tag",
+ "showTilledDate": "Show Till Date",
+ "uploadMainImageLbl": "Upload Main Image",
+ "uploadOtherImageLbl": "Upload Other Image",
+ "plzUploadVideoLbl": "Please upload video!!!",
+ "plzAddMainImageLbl": "Please add main image!!!",
+ "selTagLbl": "Select Tag",
+ "selSubCatLbl": "Select Sub Category",
+ "selCatLbl": "Select Category",
+ "editNewsLbl": "Edit News",
+ "doYouReallyNewsLbl": "Do You Really Want to Delete this News?",
+ "delNewsLbl": "Delete News",
+ "newsTitleReqLbl": "News title is required!!!",
+ "plzAddValidTitleLbl": "Please add valid news title!!!",
+ "urlReqLbl": "Url is required!!!",
+ "plzValidUrlLbl": "Please add valid url!!!",
+ "manageNewsLbl": "Manage News",
+ "step2of2Lbl": "Step 2 of 2",
+ "descLbl": "Description",
+ "RetryLbl": "Retry",
+ "previewLbl": "Preview",
+ "sponsoredLbl": "Sponsored",
+ "searchForLbl": "Search Result for",
+ "readLessLbl": "Read less",
+ "readMoreLbl": "Read more",
+ "myProfile": "My Profile",
+ "editProfile": "Edit Profile",
+ "noComments": "Be the First One to Comment !!!",
+ "minute": "minute",
+ "read": "read",
+ "selLocationLbl": "Select Location",
+ "metaKeywordLbl": "Meta Keyword",
+ "metaTitleLbl": "Meta Title",
+ "metaDescriptionLbl": "Meta Description",
+ "slugLbl": "Slug",
+ "metaTitleWarningLbl": "Meta Title length should not exceed 60 characters.",
+ "metaDescriptionWarningLbl": "Meta Description length should between 50 to 160 characters.",
+ "metaKeywordWarningLbl": "Meta Keywords are not more than 10 keyword phrases & should be comma separated.",
+ "slugWarningLbl": "Slug only accept lowercase letters, numbers, and hyphens. No spaces or special characters allowed.",
+ "metaTitleRequired": "Meta title is Required",
+ "metaDescriptionRequired": "Meta Description is Required",
+ "metaKeywordRequired": "Meta Keyword is Required",
+ "slugRequired": "Slug is Required",
+ "slugValid": "Please enter valid Slug!",
+ "slugUsedAlready": "This slug is already in use. Please add any other slug.",
+ "maintenanceMessageLbl": "We're Under Maintenance\nPlease try again later.",
+ "notificationLogin": "Please Login to view Your Notifications !!",
+ "publishDate": "Publish Date",
+ "dateConfirmation": "Please change Show till date , as it can't be set before Publish date",
+ "expired": "Expired",
+ "deactivated": "Deactivated",
+ "clearFilter": "Clear filter",
+ "FilterBy": "Filter by",
+ "rssFeed": "RSS Feed",
+ "profile": "Profile",
+ "homeLbl": "Home",
+ "replyLbl": "Reply",
+ "disabledCommentsMsg": "Comments are disabled for this News by admin",
+ "last": "Last",
+ "today": "Today",
+ "clear": "Clear",
+ "apply": "Apply",
+ "date": "Date",
+ "continueWith": "Continue with",
+ "google": "Google",
+ "apple": "Apple",
+ "fb": "Facebook",
+ "didntGetCode": "Didn't get Code?",
+ "viewsLbl": "Views",
+ "recentVidLbl": "Recent News Videos",
+ "forceUpdateTitleLbl": "Update Required",
+ "newVersionAvailableTitleLbl": "New Version Available !!!",
+ "newVersionAvailableDescLbl": "Would you like to update now ?",
+ "forceUpdateDescLbl": "A new version of this app is available with important improvements and features. To continue using the app, please update to the latest version.",
+ "exitLbl": "Exit",
+ "newsCreatedSuccessfully": "Your news has been created successfully! It will be visible to others after admin approval.",
+ "summarizedDescription": "Summarized Description",
+ "clickSummarizeDescription": "Click 'Summarize Description' to generate a summary of your content",
+ "enterDescriptionFirst": "Add description First to generate Summarized Description",
+ "authorReviewPendingLbl": "Pending Review",
+ "becomeAuthorLbl": "Become an Author",
+ "authorLbl": "Author",
+ "saveAsDraftLbl": "Save As Draft",
+ "manageNewsAllLbl": "All News",
+ "manageNewsDraftLbl": "Draft News",
+ "publishBtnLbl": "Publish",
+ "addYourBioHintLbl": "Add your bio",
+ "addLinkHereHintLbl": "Add {type} Link here",
+ "noteForAuthorLbl": "You can add social media links & Bio only if you are the author.",
+ "socialMediaLinksLbl": "Social media links",
+ "followLbl": "Follow :"
+}
\ No newline at end of file
diff --git a/news-app/devtools_options.yaml b/news-app/devtools_options.yaml
new file mode 100644
index 00000000..fa0b357c
--- /dev/null
+++ b/news-app/devtools_options.yaml
@@ -0,0 +1,3 @@
+description: This file stores settings for Dart & Flutter DevTools.
+documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
+extensions:
diff --git a/news-app/ios/Flutter/AppFrameworkInfo.plist b/news-app/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 00000000..c95f1736
--- /dev/null
+++ b/news-app/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 15.0
+
+
diff --git a/news-app/ios/Flutter/Debug.xcconfig b/news-app/ios/Flutter/Debug.xcconfig
new file mode 100644
index 00000000..ec97fc6f
--- /dev/null
+++ b/news-app/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/news-app/ios/Flutter/Release.xcconfig b/news-app/ios/Flutter/Release.xcconfig
new file mode 100644
index 00000000..aa0ffe9d
--- /dev/null
+++ b/news-app/ios/Flutter/Release.xcconfig
@@ -0,0 +1,3 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+//#include "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"
+#include "Generated.xcconfig"
diff --git a/news-app/ios/Podfile b/news-app/ios/Podfile
new file mode 100644
index 00000000..5c0aae9f
--- /dev/null
+++ b/news-app/ios/Podfile
@@ -0,0 +1,46 @@
+# Uncomment this line to define a global platform for your project
+ platform :ios, '15.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)
+ target.build_configurations.each do |config|
+ config.build_settings['ENABLE_BITCODE'] = 'NO'
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
+ end
+ end
+end
diff --git a/news-app/ios/Runner.xcodeproj/project.pbxproj b/news-app/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..f7d9cc32
--- /dev/null
+++ b/news-app/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,624 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ 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 */; };
+ 6D5AA4DC1D9BE0D29BBC3D47 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8406A87EDAB3F42C9E9C8625 /* Pods_Runner.framework */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 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 */; };
+ C64F89812BEA00CF00945F40 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C64F89802BEA00CF00945F40 /* PrivacyInfo.xcprivacy */; };
+ C6B156C729ED4959004F7E4D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = C6B156C629ED4959004F7E4D /* GoogleService-Info.plist */; };
+/* 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 = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 3EB85B3888093677A730AD02 /* 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 = ""; };
+ 62A0D45B537B579D78E7A373 /* 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 = ""; };
+ 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 = ""; };
+ 8406A87EDAB3F42C9E9C8625 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 88E5CF1A7479A9215E46F87B /* 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 = ""; };
+ 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 = ""; };
+ C64F89802BEA00CF00945F40 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; };
+ C6B156C629ED4959004F7E4D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
+ C739818628E4631E00744836 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6D5AA4DC1D9BE0D29BBC3D47 /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 541E6B33177097DE8D31256D /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 62A0D45B537B579D78E7A373 /* Pods-Runner.debug.xcconfig */,
+ 88E5CF1A7479A9215E46F87B /* Pods-Runner.release.xcconfig */,
+ 3EB85B3888093677A730AD02 /* Pods-Runner.profile.xcconfig */,
+ );
+ path = Pods;
+ 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 */,
+ 541E6B33177097DE8D31256D /* Pods */,
+ CC2378898FAFB2F8CCB774D0 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ C64F89802BEA00CF00945F40 /* PrivacyInfo.xcprivacy */,
+ C6B156C629ED4959004F7E4D /* GoogleService-Info.plist */,
+ C739818628E4631E00744836 /* Runner.entitlements */,
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ CC2378898FAFB2F8CCB774D0 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8406A87EDAB3F42C9E9C8625 /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 11FA84E1B6E74DCAB7043F8B /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ 66D5C516A2D49648D98696C5 /* [CP] Embed Pods Frameworks */,
+ 7452FB0F6FB0AC1495261F6F /* [CP] Copy Pods Resources */,
+ );
+ 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 = 1510;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ 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 = (
+ C64F89812BEA00CF00945F40 /* PrivacyInfo.xcprivacy in Resources */,
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ C6B156C729ED4959004F7E4D /* GoogleService-Info.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 11FA84E1B6E74DCAB7043F8B /* [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;
+ };
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 66D5C516A2D49648D98696C5 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 7452FB0F6FB0AC1495261F6F /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ 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";
+ };
+/* 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_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 = 15.6;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 32;
+ DEVELOPMENT_TEAM = 89C47N4UTZ;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "elCaribe";
+ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0.0;
+ PRODUCT_BUNDLE_IDENTIFIER = YOUR_PACKAGE_NAME_HERE;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ 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_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 = 15.6;
+ 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_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 = 15.6;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ 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_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 32;
+ DEVELOPMENT_TEAM = 89C47N4UTZ;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "elCaribe";
+ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0.0;
+ PRODUCT_BUNDLE_IDENTIFIER = YOUR_PACKAGE_NAME_HERE;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 32;
+ DEVELOPMENT_TEAM = 89C47N4UTZ;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = "elCaribe";
+ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.entertainment";
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0.0;
+ PRODUCT_BUNDLE_IDENTIFIER = YOUR_PACKAGE_NAME_HERE;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ 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/news-app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/news-app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..919434a6
--- /dev/null
+++ b/news-app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/news-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/news-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/news-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/news-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/news-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/news-app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/news-app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/news-app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..9c12df59
--- /dev/null
+++ b/news-app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news-app/ios/Runner.xcworkspace/contents.xcworkspacedata b/news-app/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..21a3cc14
--- /dev/null
+++ b/news-app/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/news-app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/news-app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/news-app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/news-app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/news-app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/news-app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/news-app/ios/Runner/AppDelegate.swift b/news-app/ios/Runner/AppDelegate.swift
new file mode 100644
index 00000000..d97a1839
--- /dev/null
+++ b/news-app/ios/Runner/AppDelegate.swift
@@ -0,0 +1,71 @@
+import UIKit
+import Flutter
+import Firebase
+import AppTrackingTransparency
+import GoogleMobileAds
+
+@main
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ FirebaseApp.configure()
+ GeneratedPluginRegistrant.register(with: self)
+ if #available(iOS 10.0, *) {
+ UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
+ }
+
+ // Disables Publisher first-party ID
+ MobileAds.shared.requestConfiguration.setPublisherFirstPartyIDEnabled(false)
+
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+
+ override func application(
+ _ application: UIApplication,
+ open url: URL,
+ options: [UIApplication.OpenURLOptionsKey : Any] = [:]
+ ) -> Bool {
+ let urlString = url.absoluteString
+ return true
+ }
+
+ override func applicationDidBecomeActive(_ application: UIApplication) {
+ if #available(iOS 15.0, *) {
+ ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
+ // Tracking authorization completed. Start loading ads here.
+ // loadAd
+ })
+ }
+ }
+ }
+class AppLinks {
+
+ var window: UIWindow?
+
+ func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
+ return handleDeepLink(url: url)
+ }
+
+ func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
+ if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
+ let url = userActivity.webpageURL {
+ return handleDeepLink(url: url)
+ }
+ return false
+ }
+
+ private func handleDeepLink(url: URL) -> Bool {
+ guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else {
+ return false
+ }
+
+ if let urlPattern = components.path.split(separator: "/").last {
+ return true
+ }
+
+ return false
+ }
+
+}
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..53611299
--- /dev/null
+++ b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images" : [
+ {
+ "filename" : "Icon-App-20x20@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "Icon-App-20x20@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "Icon-App-29x29@1x.png",
+ "idiom" : "iphone",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-App-29x29@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-App-29x29@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-App-40x40@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "Icon-App-40x40@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "Icon-App-60x60@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "Icon-App-60x60@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "Icon-App-20x20@1x.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "Icon-App-20x20@2x.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "Icon-App-29x29@1x.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-App-29x29@2x.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-App-40x40@1x.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "Icon-App-40x40@2x.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "Icon-App-76x76@1x.png",
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "Icon-App-76x76@2x.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "filename" : "Icon-App-1024x1024@1x.png",
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..f8454df2
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..dd91ab16
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..07e6271d
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..eb4993b7
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..060886bc
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..24c21081
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..fef339a9
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..1dde7284
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..2031b942
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..0d685eda
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..e5d6d49c
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..9993fd19
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..3d9688b1
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..043543ad
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..29fabb69
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000..0bedcf2f
--- /dev/null
+++ b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000..89c2725b
--- /dev/null
+++ b/news-app/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/news-app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/news-app/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 00000000..f2e259c7
--- /dev/null
+++ b/news-app/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news-app/ios/Runner/Base.lproj/Main.storyboard b/news-app/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 00000000..f3c28516
--- /dev/null
+++ b/news-app/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news-app/ios/Runner/Info.plist b/news-app/ios/Runner/Info.plist
new file mode 100644
index 00000000..f8824ccb
--- /dev/null
+++ b/news-app/ios/Runner/Info.plist
@@ -0,0 +1,138 @@
+
+
+
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ elCaribe
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ elCaribe
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ fb3187011931582004
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ com.googleusercontent.apps.1085975883181-q56lvc3nb2j3lc2rpkl9sv0ve6sf12hn
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ news
+
+
+
+ CFBundleURLName
+ YOUR_PACKAGE_NAME_HERE
+ CFBundleURLSchemes
+
+ news
+
+
+
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ FacebookAppID
+ 3187011931582004
+ FacebookClientToken
+ c5fcb2473b8557c9ff049dd807db8240
+ FacebookDisplayName
+ news
+ GADApplicationIdentifier
+ ca-app-pub-3940256099942544~1458002511
+ LSApplicationQueriesSchemes
+
+ https
+ http
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+ NSAllowsArbitraryLoadsInWebContent
+
+
+ NSCameraUsageDescription
+ Allow Camera access to upload photo from your device to set Profile Picture & add images in News
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ Your location is required to get current weather of your location
+ NSLocationAlwaysUsageDescription
+ We kindly request your location to provide you with relevant local news.
+ NSLocationWhenInUseUsageDescription
+ To ensure personalized news, please share your location with us.
+ NSMicrophoneUsageDescription
+ Allow microphone access to listen to news content
+ NSPhotoLibraryUsageDescription
+ Allow library access to upload photo from your device to set Profile Picture & add images in News
+ NSUserTrackingUsageDescription
+ This identifier will be used to deliver personalized ads to you.
+ SKAdNetworkItems
+
+
+ SKAdNetworkIdentifier
+ cstr6suwn9.skadnetwork
+
+
+ UIApplicationSupportsIndirectInputEvents
+
+ UIBackgroundModes
+
+ fetch
+ remote-notification
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+
+ UIViewControllerBasedStatusBarAppearance
+
+ io.flutter.embedded_views_preview
+
+ setAdvertiserTrackingEnabled
+
+ ITSAppUsesNonExemptEncryption
+
+
+
+
diff --git a/news-app/ios/Runner/PrivacyInfo.xcprivacy b/news-app/ios/Runner/PrivacyInfo.xcprivacy
new file mode 100644
index 00000000..1f8b2799
--- /dev/null
+++ b/news-app/ios/Runner/PrivacyInfo.xcprivacy
@@ -0,0 +1,91 @@
+
+
+
+
+ NSPrivacyCollectedDataTypes
+
+
+ NSPrivacyCollectedDataType
+ NSPrivacyCollectedDataTypePreciseLocation
+ NSPrivacyCollectedDataTypeLinked
+
+ NSPrivacyCollectedDataTypeTracking
+
+ NSPrivacyCollectedDataTypePurposes
+
+ NSPrivacyCollectedDataTypePurposeAppFunctionality
+
+
+
+ NSPrivacyCollectedDataType
+ NSPrivacyCollectedDataTypePhotosorVideos
+ NSPrivacyCollectedDataTypeLinked
+
+ NSPrivacyCollectedDataTypeTracking
+
+ NSPrivacyCollectedDataTypePurposes
+
+ NSPrivacyCollectedDataTypePurposeAppFunctionality
+
+
+
+ NSPrivacyCollectedDataType
+ NSPrivacyCollectedDataTypePhoneNumber
+ NSPrivacyCollectedDataTypeLinked
+
+ NSPrivacyCollectedDataTypeTracking
+
+ NSPrivacyCollectedDataTypePurposes
+
+ NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising
+ App Functionality
+App Functionality
+App Functionality
+
+
+
+ NSPrivacyCollectedDataType
+ NSPrivacyCollectedDataTypeEmailAddress
+ NSPrivacyCollectedDataTypeLinked
+
+ NSPrivacyCollectedDataTypeTracking
+
+ NSPrivacyCollectedDataTypePurposes
+
+ NSPrivacyCollectedDataTypePurposeAppFunctionality
+
+
+
+ NSPrivacyCollectedDataType
+ NSPrivacyCollectedDataTypeName
+ NSPrivacyCollectedDataTypeLinked
+
+ NSPrivacyCollectedDataTypeTracking
+
+ NSPrivacyCollectedDataTypePurposes
+
+ NSPrivacyCollectedDataTypePurposeAppFunctionality
+
+
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+ NSPrivacyAccessedAPITypeReasons
+
+ C56D.1
+
+
+
+ NSPrivacyAccessedAPITypeReasons
+
+ CA92.1
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryUserDefaults
+
+
+
+
diff --git a/news-app/ios/Runner/Runner-Bridging-Header.h b/news-app/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 00000000..4a45a93f
--- /dev/null
+++ b/news-app/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1,2 @@
+#import "GeneratedPluginRegistrant.h"
+
diff --git a/news-app/ios/Runner/Runner.entitlements b/news-app/ios/Runner/Runner.entitlements
new file mode 100644
index 00000000..08046e6f
--- /dev/null
+++ b/news-app/ios/Runner/Runner.entitlements
@@ -0,0 +1,18 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.applesignin
+
+ Default
+
+ com.apple.developer.associated-domains
+
+ applinks:enter_your_website_url_here
+
+ com.apple.developer.usernotifications.time-sensitive
+
+
+
diff --git a/news-app/lib/app/app.dart b/news-app/lib/app/app.dart
new file mode 100644
index 00000000..35bd8ca3
--- /dev/null
+++ b/news-app/lib/app/app.dart
@@ -0,0 +1,258 @@
+import 'dart:io';
+import 'dart:ui';
+import 'package:firebase_core/firebase_core.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:google_mobile_ads/google_mobile_ads.dart';
+import 'package:hive_flutter/adapters.dart';
+import 'package:intl/date_symbol_data_local.dart';
+import 'package:intl/intl.dart' as intl;
+import 'package:news/app/routes.dart';
+import 'package:news/cubits/AddNewsCubit.dart';
+import 'package:news/cubits/Auth/deleteUserCubit.dart';
+import 'package:news/cubits/Auth/registerTokenCubit.dart';
+import 'package:news/cubits/Auth/updateUserCubit.dart';
+import 'package:news/cubits/Author/authorCubit.dart';
+import 'package:news/cubits/Author/authorNewsCubit.dart';
+import 'package:news/cubits/Bookmark/UpdateBookmarkCubit.dart';
+import 'package:news/cubits/Bookmark/bookmarkCubit.dart';
+import 'package:news/cubits/ConnectivityCubit.dart';
+import 'package:news/cubits/LikeAndDislikeNews/LikeAndDislikeCubit.dart';
+import 'package:news/cubits/LikeAndDislikeNews/updateLikeAndDislikeCubit.dart';
+import 'package:news/cubits/NewsComment/deleteCommentCubit.dart';
+import 'package:news/cubits/NewsComment/flagCommentCubit.dart';
+import 'package:news/cubits/NewsComment/likeAndDislikeCommCubit.dart';
+import 'package:news/cubits/NewsComment/setCommentCubit.dart';
+import 'package:news/cubits/UserPreferences/setUserPreferenceCatCubit.dart';
+import 'package:news/cubits/adSpacesNewsDetailsCubit.dart';
+import 'package:news/cubits/appLocalizationCubit.dart';
+import 'package:news/cubits/Auth/authCubit.dart';
+import 'package:news/cubits/breakingNewsCubit.dart';
+import 'package:news/cubits/commentNewsCubit.dart';
+import 'package:news/cubits/deleteImageId.dart';
+import 'package:news/cubits/deleteUserNewsCubit.dart';
+import 'package:news/cubits/generalNewsCubit.dart';
+import 'package:news/cubits/getSurveyAnswerCubit.dart';
+import 'package:news/cubits/getUserDataByIdCubit.dart';
+import 'package:news/cubits/getUserNewsCubit.dart';
+import 'package:news/cubits/languageCubit.dart';
+import 'package:news/cubits/locationCityCubit.dart';
+import 'package:news/cubits/privacyTermsCubit.dart';
+import 'package:news/cubits/relatedNewsCubit.dart';
+import 'package:news/cubits/rssFeedCubit.dart';
+import 'package:news/cubits/sectionByIdCubit.dart';
+import 'package:news/cubits/setNewsViewsCubit.dart';
+import 'package:news/cubits/setSurveyAnswerCubit.dart';
+import 'package:news/cubits/settingCubit.dart';
+import 'package:news/cubits/Auth/socialSignUpCubit.dart';
+import 'package:news/cubits/UserPreferences/userByCategoryCubit.dart';
+import 'package:news/cubits/slugCheckCubit.dart';
+import 'package:news/cubits/slugNewsCubit.dart';
+import 'package:news/cubits/tagCubit.dart';
+import 'package:news/cubits/tagNewsCubit.dart';
+import 'package:news/cubits/NewsByIdCubit.dart';
+import 'package:news/cubits/appSystemSettingCubit.dart';
+import 'package:news/cubits/categoryCubit.dart';
+import 'package:news/cubits/featureSectionCubit.dart';
+import 'package:news/cubits/languageJsonCubit.dart';
+import 'package:news/cubits/liveStreamCubit.dart';
+import 'package:news/cubits/otherPagesCubit.dart';
+import 'package:news/cubits/subCategoryCubit.dart';
+import 'package:news/cubits/surveyQuestionCubit.dart';
+import 'package:news/cubits/themeCubit.dart';
+import 'package:news/cubits/updateBottomsheetContentCubit.dart';
+import 'package:news/cubits/videosCubit.dart';
+import 'package:news/cubits/weatherCubit.dart';
+import 'package:news/cubits/GetUserDraftedNewsCubit.dart';
+import 'package:news/data/repositories/AddNews/addNewsRepository.dart';
+import 'package:news/data/repositories/Auth/authRepository.dart';
+import 'package:news/data/repositories/Bookmark/bookmarkRepository.dart';
+import 'package:news/data/repositories/BreakingNews/breakNewsRepository.dart';
+import 'package:news/data/repositories/CommentNews/commNewsRepository.dart';
+import 'package:news/data/repositories/DeleteImageId/deleteImageRepository.dart';
+import 'package:news/data/repositories/DeleteUserNews/deleteUserNewsRepository.dart';
+import 'package:news/data/repositories/GetSurveyAnswer/getSurveyAnsRepository.dart';
+import 'package:news/data/repositories/GetUserById/getUserByIdRepository.dart';
+import 'package:news/data/repositories/GetUserNews/getUserNewsRepository.dart';
+import 'package:news/data/repositories/LikeAndDisLikeNews/LikeAndDisLikeNewsRepository.dart';
+import 'package:news/data/repositories/NewsComment/DeleteComment/deleteCommRepository.dart';
+import 'package:news/data/repositories/NewsComment/FlagComment/flagCommRepository.dart';
+import 'package:news/data/repositories/NewsComment/LikeAndDislikeComment/likeAndDislikeCommRepository.dart';
+import 'package:news/data/repositories/NewsComment/SetComment/setComRepository.dart';
+import 'package:news/data/repositories/RelatedNews/relatedNewsRepository.dart';
+import 'package:news/data/repositories/SectionById/sectionByIdRepository.dart';
+import 'package:news/data/repositories/SetNewsViews/setNewsViewsRepository.dart';
+import 'package:news/data/repositories/SetSurveyAnswer/setSurveyAnsRepository.dart';
+import 'package:news/data/repositories/SetUserPreferenceCat/setUserPrefCatRepository.dart';
+import 'package:news/data/repositories/SurveyQuestion/surveyQueRepository.dart';
+import 'package:news/data/repositories/Tag/tagRepository.dart';
+import 'package:news/data/repositories/TagNews/tagNewsRepository.dart';
+import 'package:news/data/repositories/UserByCategory/userByCatRepository.dart';
+import 'package:news/data/repositories/language/languageRepository.dart';
+import 'package:news/data/repositories/Settings/settingRepository.dart';
+import 'package:news/data/repositories/Settings/settingsLocalDataRepository.dart';
+import 'package:news/data/repositories/AppSystemSetting/systemRepository.dart';
+import 'package:news/data/repositories/Category/categoryRepository.dart';
+import 'package:news/data/repositories/FeatureSection/sectionRepository.dart';
+import 'package:news/data/repositories/LanguageJson/languageJsonRepository.dart';
+import 'package:news/data/repositories/LiveStream/liveStreamRepository.dart';
+import 'package:news/data/repositories/NewsById/NewsByIdRepository.dart';
+import 'package:news/data/repositories/OtherPages/otherPagesRepository.dart';
+import 'package:news/data/repositories/SubCategory/subCatRepository.dart';
+import 'package:news/data/repositories/Videos/videosRepository.dart';
+import 'package:news/ui/screens/PushNotificationService.dart';
+import 'package:news/ui/styles/appTheme.dart';
+import 'package:news/utils/constant.dart';
+import 'package:news/utils/hiveBoxKeys.dart';
+import 'package:news/utils/uiUtils.dart';
+import 'package:package_info_plus/package_info_plus.dart';
+
+late PackageInfo packageInfo;
+
+Future initializeApp() async {
+ WidgetsFlutterBinding.ensureInitialized();
+ HttpOverrides.global = MyHttpOverrides();
+ SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
+
+ MobileAds.instance.initialize();
+
+ packageInfo = await PackageInfo.fromPlatform();
+
+ await Firebase.initializeApp();
+
+ await Hive.initFlutter();
+
+ await Hive.openBox(authBoxKey);
+
+ await Hive.openBox(settingsBoxKey);
+
+ await Hive.openBox(locationCityBoxKey);
+ await Hive.openBox(videoPreferenceKey);
+
+ runApp(MultiBlocProvider(providers: [
+ BlocProvider(create: (_) => ConnectivityCubit(ConnectivityService())),
+ BlocProvider(create: (context) => AppConfigurationCubit(SystemRepository())),
+ BlocProvider(create: (_) => SettingsCubit(SettingsRepository())),
+ BlocProvider(create: (_) => AppLocalizationCubit(SettingsLocalDataRepository())),
+ BlocProvider(create: (_) => ThemeCubit(SettingsLocalDataRepository())),
+ BlocProvider(create: (_) => LanguageJsonCubit(LanguageJsonRepository())),
+ BlocProvider(create: (context) => LanguageCubit(LanguageRepository())),
+ BlocProvider(create: (_) => SectionCubit(SectionRepository())),
+ BlocProvider(create: (_) => PrivacyTermsCubit(OtherPageRepository())),
+ BlocProvider(create: (_) => VideoCubit(VideoRepository())),
+ BlocProvider(create: (_) => NewsByIdCubit(NewsByIdRepository())),
+ BlocProvider(create: (_) => OtherPageCubit(OtherPageRepository())),
+ BlocProvider(create: (_) => LiveStreamCubit(LiveStreamRepository())),
+ BlocProvider(create: (_) => CategoryCubit(CategoryRepository())),
+ BlocProvider(create: (_) => SubCategoryCubit(SubCategoryRepository())),
+ BlocProvider(create: (_) => SurveyQuestionCubit(SurveyQuestionRepository())),
+ BlocProvider(create: (_) => SetSurveyAnsCubit(SetSurveyAnsRepository())),
+ BlocProvider(create: (_) => GetSurveyAnsCubit(GetSurveyAnsRepository())),
+ BlocProvider(create: (_) => CommentNewsCubit(CommentNewsRepository())),
+ BlocProvider(create: (_) => RelatedNewsCubit(RelatedNewsRepository())),
+ BlocProvider(create: (_) => SocialSignUpCubit(AuthRepository())),
+ BlocProvider(create: (_) => AuthCubit(AuthRepository())),
+ BlocProvider(create: (_) => RegisterTokenCubit(AuthRepository())),
+ BlocProvider(create: (_) => UserByCatCubit(UserByCatRepository())),
+ BlocProvider(create: (_) => SetUserPrefCatCubit(SetUserPrefCatRepository())),
+ BlocProvider(create: (_) => UpdateUserCubit(AuthRepository())),
+ BlocProvider(create: (_) => DeleteUserCubit(AuthRepository())),
+ BlocProvider(create: (_) => BookmarkCubit(BookmarkRepository())),
+ BlocProvider(create: (_) => UpdateBookmarkStatusCubit(BookmarkRepository())),
+ BlocProvider(create: (_) => LikeAndDisLikeCubit(LikeAndDisLikeRepository())),
+ BlocProvider(create: (_) => UpdateLikeAndDisLikeStatusCubit(LikeAndDisLikeRepository())),
+ BlocProvider(create: (_) => BreakingNewsCubit(BreakingNewsRepository())),
+ BlocProvider(create: (_) => TagNewsCubit(TagNewsRepository())),
+ BlocProvider(create: (_) => SetCommentCubit(SetCommentRepository())),
+ BlocProvider(create: (_) => LikeAndDislikeCommCubit(LikeAndDislikeCommRepository())),
+ BlocProvider(create: (_) => DeleteCommCubit(DeleteCommRepository())),
+ BlocProvider(create: (_) => SetFlagCubit(SetFlagRepository())),
+ BlocProvider(create: (_) => AddNewsCubit(AddNewsRepository())),
+ BlocProvider(create: (_) => TagCubit(TagRepository())),
+ BlocProvider(create: (_) => GetUserNewsCubit(GetUserNewsRepository())),
+ BlocProvider(create: (_) => DeleteUserNewsCubit(DeleteUserNewsRepository())),
+ BlocProvider(create: (_) => DeleteImageCubit(DeleteImageRepository())),
+ BlocProvider(create: (_) => GetUserByIdCubit(GetUserByIdRepository())),
+ BlocProvider(create: (_) => SectionByIdCubit(SectionByIdRepository())),
+ BlocProvider(create: (_) => SetNewsViewsCubit(SetNewsViewsRepository())),
+ BlocProvider(create: (_) => AdSpacesNewsDetailsCubit()),
+ BlocProvider(create: (_) => LocationCityCubit()),
+ BlocProvider(create: (_) => BottomSheetCubit()),
+ BlocProvider(create: (_) => SlugCheckCubit()),
+ BlocProvider(create: (_) => GeneralNewsCubit()),
+ BlocProvider(create: (_) => RSSFeedCubit()),
+ BlocProvider(create: (_) => SlugNewsCubit()),
+ BlocProvider(create: (_) => WeatherCubit()),
+ BlocProvider(create: (_) => AuthorCubit()),
+ BlocProvider(create: (_) => AuthorNewsCubit()),
+ BlocProvider(create: (_) => GetUserDraftedNewsCubit())
+ ], child: const MyApp()));
+}
+
+class GlobalScrollBehavior extends ScrollBehavior {
+ @override
+ ScrollPhysics getScrollPhysics(BuildContext context) {
+ return const BouncingScrollPhysics();
+ }
+}
+
+class MyApp extends StatefulWidget {
+ const MyApp({super.key});
+
+ @override
+ State createState() => _MyAppState();
+}
+
+class _MyAppState extends State {
+ @override
+ void initState() {
+ final pushNotificationService = PushNotificationService(context: context);
+ pushNotificationService.initialise();
+ var brightness = PlatformDispatcher.instance.platformBrightness;
+ if (SettingsLocalDataRepository().getCurrentTheme().isEmpty) {
+ (brightness == Brightness.dark) ? context.read().changeTheme(AppTheme.Dark) : context.read().changeTheme(AppTheme.Light);
+ }
+
+ super.initState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Builder(builder: (context) {
+ if (Hive.box(settingsBoxKey).get(currentLanguageCodeKey) != null || Hive.box(settingsBoxKey).get(currentLanguageCodeKey) != "") {
+ initializeDateFormatting();
+ intl.Intl.defaultLocale = Hive.box(settingsBoxKey).get(currentLanguageCodeKey); //set default Locale @Start
+ }
+ final currentTheme = context.watch().state.appTheme;
+ return BlocBuilder(
+ builder: (context, state) {
+ return MaterialApp(
+ navigatorKey: UiUtils.rootNavigatorKey,
+ theme: appThemeData[currentTheme],
+ debugShowCheckedModeBanner: false,
+ initialRoute: Routes.splash,
+ title: appName,
+ onGenerateRoute: Routes.onGenerateRouted,
+ builder: (context, widget) {
+ return ScrollConfiguration(
+ behavior: GlobalScrollBehavior(),
+ child: Directionality(
+ textDirection: state.isRTL == '' || state.isRTL == 0 ? TextDirection.ltr : TextDirection.rtl,
+ child: Padding(
+ padding: EdgeInsets.only(bottom: MediaQuery.viewPaddingOf(context).bottom),
+ child: widget!,
+ )));
+ });
+ },
+ );
+ });
+ }
+}
+
+class MyHttpOverrides extends HttpOverrides {
+ @override
+ HttpClient createHttpClient(SecurityContext? context) {
+ return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
+ }
+}
diff --git a/news-app/lib/app/routes.dart b/news-app/lib/app/routes.dart
new file mode 100644
index 00000000..f5e8577b
--- /dev/null
+++ b/news-app/lib/app/routes.dart
@@ -0,0 +1,203 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:news/ui/screens/AddEditNews/AddNews.dart';
+import 'package:news/ui/screens/BookmarkScreen.dart';
+import 'package:news/ui/screens/ImagePreviewScreen.dart';
+import 'package:news/ui/screens/LiveStreaming.dart';
+import 'package:news/ui/screens/NewsDetail/NewsDetailScreen.dart';
+import 'package:news/ui/screens/NewsDetail/Widgets/ShowMoreNewsList.dart';
+import 'package:news/ui/screens/PrivacyPolicyScreen.dart';
+import 'package:news/ui/screens/Profile/userProfile.dart';
+import 'package:news/ui/screens/RSSFeedDetailsScreen.dart';
+import 'package:news/ui/screens/Search.dart';
+import 'package:news/ui/screens/AddEditNews/ManageUserNews.dart';
+import 'package:news/ui/screens/SubCategory/SubCategoryScreen.dart';
+import 'package:news/ui/screens/TagNewsScreen.dart';
+import 'package:news/ui/screens/Videos/videoDetailsScreen.dart';
+import 'package:news/ui/screens/auth/ForgotPassword.dart';
+import 'package:news/ui/screens/auth/RequestOtpScreen.dart';
+import 'package:news/ui/screens/auth/VerifyOtpScreen.dart';
+import 'package:news/ui/screens/authorDetailsScreen.dart';
+import 'package:news/ui/screens/dashBoard/dashBoardScreen.dart';
+import 'package:news/ui/screens/introSlider.dart';
+import 'package:news/ui/screens/languageList.dart';
+import 'package:news/ui/screens/maintenanceScreen.dart';
+import 'package:news/ui/screens/splashScreen.dart';
+import 'package:news/ui/screens/ManagePreference.dart';
+import 'package:news/ui/screens/SectionMoreNews/SectionMoreBreakNewsList.dart';
+import 'package:news/ui/screens/SectionMoreNews/SectionMoreNewsList.dart';
+import 'package:news/ui/screens/auth/loginScreen.dart';
+import 'package:news/ui/widgets/loadingScreen.dart';
+
+class Routes {
+ static const String splash = "splash";
+ static const String home = "/";
+ static const String introSlider = "introSlider";
+ static const String languageList = "languageList";
+ static const String login = "login";
+ static const String privacy = "privacy";
+ static const String search = "search";
+ static const String live = "live";
+ static const String subCat = "subCat";
+ static const String requestOtp = "requestOtp";
+ static const String verifyOtp = "verifyOtp";
+ static const String managePref = "managePref";
+ static const String newsVideo = "newsVideo";
+ static const String bookmark = "bookmark";
+ static const String newsDetails = "newsDetails";
+ static const String imagePreview = "imagePreview";
+ static const String tagScreen = "tagScreen";
+ static const String addNews = "AddNews";
+ static const String editNews = "editNews";
+ static const String manageUserNews = "showNews";
+ static const String forgotPass = "forgotPass";
+ static const String sectionNews = "sectionNews";
+ static const String sectionBreakNews = "sectionBreakNews";
+ static const String showMoreRelatedNews = "showMoreRelatedNews";
+ static const String editUserProfile = "editUserProfile";
+ static const String maintenance = "maintenance";
+ static const String rssFeedDetails = "rssFeedDetails";
+ static const String authorDetails = "authorDetails";
+
+ static String currentRoute = splash;
+ static String previousRoute = "";
+
+ static Route onGenerateRouted(RouteSettings routeSettings) {
+ previousRoute = currentRoute;
+ currentRoute = routeSettings.name ?? "";
+
+ if (routeSettings.name!.contains('/news/') || routeSettings.name!.contains('/breaking-news/') || routeSettings.name!.contains('/video-news/')) {
+ final String? currNewsSlug = routeSettings.name!.split('/').last.split('?language_id').first;
+
+ if (previousRoute == splash) {
+ //app is closed
+ isShared = true;
+
+ Uri uri = Uri.parse(routeSettings.name!);
+ String path = uri.path;
+ routeSettingsName = path;
+ newsSlug = currNewsSlug;
+ return CupertinoPageRoute(builder: (_) => const Splash());
+ } else {
+ //app is running
+ return CupertinoPageRoute(builder: (_) => LoadingScreen(routeSettingsName: routeSettings.name!, newsSlug: currNewsSlug ?? ""));
+ }
+ }
+ switch (routeSettings.name) {
+ case splash:
+ {
+ return CupertinoPageRoute(builder: (_) => const Splash());
+ }
+ case home:
+ {
+ return DashBoard.route(routeSettings);
+ }
+ case introSlider:
+ {
+ return CupertinoPageRoute(builder: (_) => const IntroSliderScreen());
+ }
+ case login:
+ {
+ return LoginScreen.route(routeSettings);
+ }
+ case languageList:
+ {
+ return LanguageList.route(routeSettings);
+ }
+ case privacy:
+ {
+ return PrivacyPolicy.route(routeSettings);
+ }
+ case search:
+ {
+ return CupertinoPageRoute(builder: (_) => const Search());
+ }
+ case live:
+ {
+ return LiveStreaming.route(routeSettings);
+ }
+ case subCat:
+ {
+ return SubCategoryScreen.route(routeSettings);
+ }
+ case requestOtp:
+ {
+ return CupertinoPageRoute(builder: (_) => const RequestOtp());
+ }
+ case verifyOtp:
+ {
+ return VerifyOtp.route(routeSettings);
+ }
+ case managePref:
+ {
+ return ManagePref.route(routeSettings);
+ }
+ case newsVideo:
+ {
+ return VideoDetailsScreen.route(routeSettings);
+ }
+ case bookmark:
+ {
+ return CupertinoPageRoute(builder: (_) => const BookmarkScreen());
+ }
+ case newsDetails:
+ {
+ return NewsDetailScreen.route(routeSettings);
+ }
+ case imagePreview:
+ {
+ return ImagePreview.route(routeSettings);
+ }
+ case tagScreen:
+ {
+ return NewsTag.route(routeSettings);
+ }
+ case addNews:
+ {
+ return AddNews.route(routeSettings);
+ }
+ case manageUserNews:
+ {
+ return CupertinoPageRoute(builder: (_) => const ManageUserNews());
+ }
+ case forgotPass:
+ {
+ return CupertinoPageRoute(builder: (_) => const ForgotPassword());
+ }
+
+ case sectionNews:
+ {
+ return SectionMoreNewsList.route(routeSettings);
+ }
+ case sectionBreakNews:
+ {
+ return SectionMoreBreakingNewsList.route(routeSettings);
+ }
+ case showMoreRelatedNews:
+ {
+ return ShowMoreNewsList.route(routeSettings);
+ }
+ case editUserProfile:
+ {
+ return UserProfileScreen.route(routeSettings);
+ }
+ case maintenance:
+ {
+ return CupertinoPageRoute(builder: (_) => const MaintenanceScreen());
+ }
+ case rssFeedDetails:
+ {
+ return RSSFeedDetailsScreen.route(routeSettings);
+ }
+ case authorDetails:
+ {
+ return AuthorDetailsScreen.route(routeSettings);
+ }
+
+ default:
+ {
+ return CupertinoPageRoute(builder: (context) => const Scaffold());
+ }
+ }
+ }
+}
diff --git a/news-app/lib/cubits/AddNewsCubit.dart b/news-app/lib/cubits/AddNewsCubit.dart
new file mode 100644
index 00000000..1616dd06
--- /dev/null
+++ b/news-app/lib/cubits/AddNewsCubit.dart
@@ -0,0 +1,86 @@
+import 'dart:io';
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/repositories/AddNews/addNewsRepository.dart';
+
+abstract class AddNewsState {}
+
+class AddNewsInitial extends AddNewsState {}
+
+class AddNewsFetchInProgress extends AddNewsState {}
+
+class AddNewsFetchSuccess extends AddNewsState {
+ var addNews;
+
+ AddNewsFetchSuccess({required this.addNews});
+}
+
+class AddNewsFetchFailure extends AddNewsState {
+ final String errorMessage;
+
+ AddNewsFetchFailure(this.errorMessage);
+}
+
+class AddNewsCubit extends Cubit {
+ final AddNewsRepository _addNewsRepository;
+
+ AddNewsCubit(this._addNewsRepository) : super(AddNewsInitial());
+
+ void addNews(
+ {required BuildContext context,
+ required String actionType,
+ required String catId,
+ required String title,
+ required String conTypeId,
+ required String conType,
+ required String langId,
+ File? image,
+ String? newsId,
+ String? subCatId,
+ String? showTill,
+ String? tagId,
+ String? url,
+ String? desc,
+ String? summDescription,
+ String? locationId,
+ File? videoUpload,
+ List? otherImage,
+ String? publishDate,
+ required String metaTitle,
+ required String metaDescription,
+ required String metaKeyword,
+ required String slug,
+ required int isDraft}) async {
+ try {
+ emit(AddNewsFetchInProgress());
+ final result = await _addNewsRepository.addNews(
+ context: context,
+ actionType: actionType,
+ newsId: newsId,
+ title: title,
+ image: image,
+ conTypeId: conTypeId,
+ conType: conType,
+ langId: langId,
+ catId: catId,
+ videoUpload: videoUpload,
+ url: url,
+ tagId: tagId,
+ otherImage: otherImage,
+ desc: desc,
+ showTill: showTill,
+ subCatId: subCatId,
+ locationId: locationId,
+ metaTitle: metaTitle,
+ metaDescription: metaDescription,
+ metaKeyword: metaKeyword,
+ slug: slug,
+ publishDate: publishDate ?? null,
+ summDescription: summDescription,
+ isDraft: isDraft);
+ emit(AddNewsFetchSuccess(addNews: result));
+ } catch (e) {
+ emit(AddNewsFetchFailure(e.toString()));
+ }
+ }
+}
diff --git a/news-app/lib/cubits/Auth/authCubit.dart b/news-app/lib/cubits/Auth/authCubit.dart
new file mode 100644
index 00000000..9ce3daa3
--- /dev/null
+++ b/news-app/lib/cubits/Auth/authCubit.dart
@@ -0,0 +1,98 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/models/AuthModel.dart';
+import 'package:news/data/repositories/Auth/authRepository.dart';
+
+const String loginEmail = "email";
+const String loginGmail = "gmail";
+const String loginFb = "fb";
+const String loginMbl = "mobile";
+const String loginApple = "apple";
+
+enum AuthProviders { gmail, fb, apple, mobile, email }
+
+@immutable
+abstract class AuthState {}
+
+class AuthInitial extends AuthState {}
+
+class Authenticated extends AuthState {
+ //to store authDetails
+ final AuthModel authModel;
+
+ Authenticated({required this.authModel});
+}
+
+class Unauthenticated extends AuthState {}
+
+class AuthCubit extends Cubit {
+ final AuthRepository _authRepository;
+
+ AuthCubit(this._authRepository) : super(AuthInitial()) {
+ checkAuthStatus();
+ }
+
+ AuthRepository get authRepository => _authRepository;
+
+ void checkAuthStatus() {
+ //authDetails is map. keys are isLogin,userId,authProvider
+ final authDetails = _authRepository.getLocalAuthDetails();
+
+ (authDetails['isLogIn']) ? emit(Authenticated(authModel: AuthModel.fromJson(authDetails))) : emit(Unauthenticated());
+ }
+
+ String getUserId() {
+ return (state is Authenticated) ? (state as Authenticated).authModel.id! : "0";
+ }
+
+ String getProfile() {
+ return (state is Authenticated)
+ ? ((state as Authenticated).authModel.profile!.trim().isNotEmpty)
+ ? (state as Authenticated).authModel.profile!
+ : ""
+ : "";
+ }
+
+ String getMobile() {
+ return (state is Authenticated) ? (state as Authenticated).authModel.mobile! : "";
+ }
+
+ String getType() {
+ return (state is Authenticated) ? (state as Authenticated).authModel.type! : "";
+ }
+
+ String getAuthorBio() {
+ return (state is Authenticated && (state as Authenticated).authModel.authorDetails != null) ? ((state as Authenticated).authModel.authorDetails?.bio ?? "") : "";
+ }
+
+ String getAuthorWhatsappLink() {
+ return (state is Authenticated && (state as Authenticated).authModel.authorDetails != null) ? (state as Authenticated).authModel.authorDetails?.whatsappLink ?? "" : "0";
+ }
+
+ String getAuthorTelegramLink() {
+ return (state is Authenticated && (state as Authenticated).authModel.authorDetails != null) ? (state as Authenticated).authModel.authorDetails?.telegramLink ?? "" : "0";
+ }
+
+ String getAuthorFacebookLink() {
+ return (state is Authenticated && (state as Authenticated).authModel.authorDetails != null) ? (state as Authenticated).authModel.authorDetails?.facebookLink ?? "" : "0";
+ }
+
+ String getAuthorLinkedInLink() {
+ return (state is Authenticated && (state as Authenticated).authModel.authorDetails != null) ? (state as Authenticated).authModel.authorDetails?.linkedinLink ?? "" : "0";
+ }
+
+ void updateDetails({required AuthModel authModel}) {
+ emit(Authenticated(authModel: authModel));
+ }
+
+ Future signOut(AuthProviders authProvider) async {
+ if (state is Authenticated) {
+ _authRepository.signOut(authProvider);
+ emit(Unauthenticated());
+ }
+ }
+
+ bool isAuthor() {
+ return (state is Authenticated) ? ((state as Authenticated).authModel.isAuthor == 1) : false;
+ }
+}
diff --git a/news-app/lib/cubits/Auth/deleteUserCubit.dart b/news-app/lib/cubits/Auth/deleteUserCubit.dart
new file mode 100644
index 00000000..908ada42
--- /dev/null
+++ b/news-app/lib/cubits/Auth/deleteUserCubit.dart
@@ -0,0 +1,37 @@
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/repositories/Auth/authRepository.dart';
+
+abstract class DeleteUserState {}
+
+class DeleteUserInitial extends DeleteUserState {}
+
+class DeleteUserFetchInProgress extends DeleteUserState {}
+
+class DeleteUserFetchSuccess extends DeleteUserState {
+ dynamic deleteUser;
+
+ DeleteUserFetchSuccess({required this.deleteUser});
+}
+
+class DeleteUserFetchFailure extends DeleteUserState {
+ final String errorMessage;
+
+ DeleteUserFetchFailure(this.errorMessage);
+}
+
+class DeleteUserCubit extends Cubit {
+ final AuthRepository _deleteUserRepository;
+
+ DeleteUserCubit(this._deleteUserRepository) : super(DeleteUserInitial());
+
+ Future deleteUser({String? name, String? mobile, String? email, String? filePath}) async {
+ try {
+ emit(DeleteUserFetchInProgress());
+ final result = await _deleteUserRepository.deleteUser();
+ emit(DeleteUserFetchSuccess(deleteUser: result));
+ return result;
+ } catch (e) {
+ emit(DeleteUserFetchFailure(e.toString()));
+ }
+ }
+}
diff --git a/news-app/lib/cubits/Auth/registerTokenCubit.dart b/news-app/lib/cubits/Auth/registerTokenCubit.dart
new file mode 100644
index 00000000..423b7b41
--- /dev/null
+++ b/news-app/lib/cubits/Auth/registerTokenCubit.dart
@@ -0,0 +1,37 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/repositories/Auth/authRepository.dart';
+
+@immutable
+abstract class RegisterTokenState {}
+
+class RegisterTokenInitial extends RegisterTokenState {}
+
+class RegisterTokenProgress extends RegisterTokenState {
+ RegisterTokenProgress();
+}
+
+class RegisterTokenSuccess extends RegisterTokenState {
+ RegisterTokenSuccess();
+}
+
+class RegisterTokenFailure extends RegisterTokenState {
+ final String errorMessage;
+
+ RegisterTokenFailure(this.errorMessage);
+}
+
+class RegisterTokenCubit extends Cubit {
+ final AuthRepository _authRepository;
+
+ RegisterTokenCubit(this._authRepository) : super(RegisterTokenInitial());
+
+ void registerToken({required String fcmId, required BuildContext context}) {
+ emit(RegisterTokenProgress());
+ _authRepository.registerToken(fcmId: fcmId, context: context).then((result) {
+ emit(RegisterTokenSuccess());
+ }).catchError((e) {
+ emit(RegisterTokenFailure(e.toString()));
+ });
+ }
+}
diff --git a/news-app/lib/cubits/Auth/socialSignUpCubit.dart b/news-app/lib/cubits/Auth/socialSignUpCubit.dart
new file mode 100644
index 00000000..d7da2acf
--- /dev/null
+++ b/news-app/lib/cubits/Auth/socialSignUpCubit.dart
@@ -0,0 +1,40 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/utils/strings.dart';
+import 'package:news/data/models/AuthModel.dart';
+import 'package:news/data/repositories/Auth/authRepository.dart';
+import 'package:news/cubits/Auth/authCubit.dart';
+
+@immutable
+abstract class SocialSignUpState {}
+
+class SocialSignUpInitial extends SocialSignUpState {}
+
+class SocialSignUpProgress extends SocialSignUpState {}
+
+class SocialSignUpSuccess extends SocialSignUpState {
+ final AuthModel authModel;
+
+ SocialSignUpSuccess({required this.authModel});
+}
+
+class SocialSignUpFailure extends SocialSignUpState {
+ final String errorMessage;
+
+ SocialSignUpFailure(this.errorMessage);
+}
+
+class SocialSignUpCubit extends Cubit {
+ final AuthRepository _authRepository;
+
+ SocialSignUpCubit(this._authRepository) : super(SocialSignUpInitial());
+
+ void socialSignUpUser({required AuthProviders authProvider, required BuildContext context, String? email, String? password, String? otp, String? verifiedId}) {
+ emit(SocialSignUpProgress());
+ _authRepository.signInUser(email: email, otp: otp, password: password, verifiedId: verifiedId, authProvider: authProvider, context: context).then((result) {
+ emit(SocialSignUpSuccess(authModel: AuthModel.fromJson(result[DATA])));
+ }).catchError((e) {
+ emit(SocialSignUpFailure(e.toString()));
+ });
+ }
+}
diff --git a/news-app/lib/cubits/Auth/updateUserCubit.dart b/news-app/lib/cubits/Auth/updateUserCubit.dart
new file mode 100644
index 00000000..cd03aaf2
--- /dev/null
+++ b/news-app/lib/cubits/Auth/updateUserCubit.dart
@@ -0,0 +1,61 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/cubits/Auth/authCubit.dart';
+import 'package:news/data/models/AuthModel.dart';
+import 'package:news/data/repositories/Auth/authRepository.dart';
+
+abstract class UpdateUserState {}
+
+class UpdateUserInitial extends UpdateUserState {}
+
+class UpdateUserFetchInProgress extends UpdateUserState {}
+
+class UpdateUserFetchSuccess extends UpdateUserState {
+ AuthModel? updatedUser;
+ String? imgUpdatedPath;
+
+ UpdateUserFetchSuccess({this.updatedUser, this.imgUpdatedPath});
+}
+
+class UpdateUserFetchFailure extends UpdateUserState {
+ final String errorMessage;
+
+ UpdateUserFetchFailure(this.errorMessage);
+}
+
+class UpdateUserCubit extends Cubit {
+ final AuthRepository _updateUserRepository;
+
+ UpdateUserCubit(this._updateUserRepository) : super(UpdateUserInitial());
+
+ void setUpdateUser(
+ {String? name,
+ String? mobile,
+ String? email,
+ String? filePath,
+ required BuildContext context,
+ String? authorBio,
+ String? whatsappLink,
+ String? facebookLink,
+ String? telegramLink,
+ String? linkedInLink}) async {
+ try {
+ emit(UpdateUserFetchInProgress());
+ final Map result = await _updateUserRepository.updateUserData(
+ mobile: mobile,
+ name: name,
+ email: email,
+ filePath: filePath,
+ authorBio: authorBio,
+ whatsappLink: whatsappLink,
+ facebookLink: facebookLink,
+ telegramLink: telegramLink,
+ linkedInLink: linkedInLink);
+ //only incase of name,mobile & mail, not Profile Picture
+ context.read().updateDetails(authModel: AuthModel.fromJson(result["data"]));
+ emit(UpdateUserFetchSuccess(updatedUser: AuthModel.fromJson(result["data"])));
+ } catch (e) {
+ emit(UpdateUserFetchFailure(e.toString()));
+ }
+ }
+}
diff --git a/news-app/lib/cubits/Author/authorCubit.dart b/news-app/lib/cubits/Author/authorCubit.dart
new file mode 100644
index 00000000..9258a6d5
--- /dev/null
+++ b/news-app/lib/cubits/Author/authorCubit.dart
@@ -0,0 +1,43 @@
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/utils/api.dart';
+import 'package:news/utils/strings.dart';
+
+abstract class AuthorState {}
+
+class AuthorInitial extends AuthorState {}
+
+class AuthorInProgress extends AuthorState {}
+
+class AuthorApproved extends AuthorState {
+ AuthorApproved();
+}
+
+class AuthorRequestSent extends AuthorState {
+ final String responseMessage;
+ AuthorRequestSent(this.responseMessage);
+}
+
+class AuthorPending extends AuthorState {
+ final String errorMessage;
+
+ AuthorPending(this.errorMessage);
+}
+
+class AuthorRejected extends AuthorState {
+ final String errorMessage;
+
+ AuthorRejected(this.errorMessage);
+}
+
+class AuthorCubit extends Cubit {
+ AuthorCubit() : super(AuthorInitial());
+
+ void requestToBecomeAuthor() async {
+ try {
+ final result = await Api.sendApiRequest(body: {}, url: Api.becomeAnAuthorApi);
+ (!result[ERROR]) ? emit(AuthorRequestSent(result[MESSAGE])) : emit(AuthorPending(result[MESSAGE]));
+ } catch (e) {
+ emit(AuthorPending(e.toString()));
+ }
+ }
+}
diff --git a/news-app/lib/cubits/Author/authorNewsCubit.dart b/news-app/lib/cubits/Author/authorNewsCubit.dart
new file mode 100644
index 00000000..3181a801
--- /dev/null
+++ b/news-app/lib/cubits/Author/authorNewsCubit.dart
@@ -0,0 +1,49 @@
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/models/NewsModel.dart';
+import 'package:news/utils/api.dart';
+import 'package:news/utils/strings.dart';
+
+abstract class AuthorNewsState {}
+
+class AuthorNewsInitial extends AuthorNewsState {}
+
+class AuthorNewsFetchInProgress extends AuthorNewsState {}
+
+class AuthorNewsFetchSuccess extends AuthorNewsState {
+ final List AuthorNewsList;
+ final UserAuthorModel authorData;
+ final int totalAuthorNewsCount;
+ final bool hasMoreFetchError;
+ final bool hasMore;
+
+ AuthorNewsFetchSuccess({required this.AuthorNewsList, required this.authorData, required this.totalAuthorNewsCount, required this.hasMoreFetchError, required this.hasMore});
+}
+
+class AuthorNewsFetchFailed extends AuthorNewsState {
+ final String errorMessage;
+
+ AuthorNewsFetchFailed(this.errorMessage);
+}
+
+class AuthorNewsCubit extends Cubit {
+ AuthorNewsCubit() : super(AuthorNewsInitial());
+
+ void getAuthorNews({required String authorId}) async {
+ try {
+ emit(AuthorNewsInitial());
+ final apiUrl = "${Api.getAuthorNewsApi}/${authorId}";
+ final result = await Api.sendApiRequest(body: null, url: apiUrl, isGet: true);
+
+ (!result[ERROR])
+ ? emit(AuthorNewsFetchSuccess(
+ AuthorNewsList: (result[DATA][NEWS][DATA] as List).map((e) => NewsModel.fromJson(e)).toList(),
+ authorData: UserAuthorModel.fromJson(result[DATA][USER]),
+ totalAuthorNewsCount: result[DATA][NEWS][TOTAL],
+ hasMore: false,
+ hasMoreFetchError: false))
+ : emit(AuthorNewsFetchFailed(result[MESSAGE]));
+ } catch (e) {
+ emit(AuthorNewsFetchFailed(e.toString()));
+ }
+ }
+}
diff --git a/news-app/lib/cubits/Bookmark/UpdateBookmarkCubit.dart b/news-app/lib/cubits/Bookmark/UpdateBookmarkCubit.dart
new file mode 100644
index 00000000..e5958803
--- /dev/null
+++ b/news-app/lib/cubits/Bookmark/UpdateBookmarkCubit.dart
@@ -0,0 +1,38 @@
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/models/NewsModel.dart';
+import 'package:news/data/repositories/Bookmark/bookmarkRepository.dart';
+import 'package:news/utils/api.dart';
+
+abstract class UpdateBookmarkStatusState {}
+
+class UpdateBookmarkStatusInitial extends UpdateBookmarkStatusState {}
+
+class UpdateBookmarkStatusInProgress extends UpdateBookmarkStatusState {}
+
+class UpdateBookmarkStatusSuccess extends UpdateBookmarkStatusState {
+ final NewsModel news;
+ final bool wasBookmarkNewsProcess; //to check that process of Bookmark done or not
+ UpdateBookmarkStatusSuccess(this.news, this.wasBookmarkNewsProcess);
+}
+
+class UpdateBookmarkStatusFailure extends UpdateBookmarkStatusState {
+ final String errorMessage;
+
+ UpdateBookmarkStatusFailure(this.errorMessage);
+}
+
+class UpdateBookmarkStatusCubit extends Cubit {
+ final BookmarkRepository bookmarkRepository;
+
+ UpdateBookmarkStatusCubit(this.bookmarkRepository) : super(UpdateBookmarkStatusInitial());
+
+ void setBookmarkNews({required NewsModel news, required String status}) {
+ emit(UpdateBookmarkStatusInProgress());
+ bookmarkRepository.setBookmark(newsId: (news.newsId != null) ? news.newsId! : news.id!, status: status).then((value) {
+ emit(UpdateBookmarkStatusSuccess(news, status == "1" ? true : false));
+ }).catchError((e) {
+ ApiMessageAndCodeException apiMessageAndCodeException = e;
+ emit(UpdateBookmarkStatusFailure(apiMessageAndCodeException.errorMessage.toString()));
+ });
+ }
+}
diff --git a/news-app/lib/cubits/Bookmark/bookmarkCubit.dart b/news-app/lib/cubits/Bookmark/bookmarkCubit.dart
new file mode 100644
index 00000000..2d89aef0
--- /dev/null
+++ b/news-app/lib/cubits/Bookmark/bookmarkCubit.dart
@@ -0,0 +1,111 @@
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:news/data/models/NewsModel.dart';
+import 'package:news/data/repositories/Bookmark/bookmarkRepository.dart';
+import 'package:news/utils/strings.dart';
+
+abstract class BookmarkState {}
+
+class BookmarkInitial extends BookmarkState {}
+
+class BookmarkFetchInProgress extends BookmarkState {}
+
+class BookmarkFetchSuccess extends BookmarkState {
+ final List bookmark;
+ final int totalBookmarkCount;
+ final bool hasMoreFetchError;
+ final bool hasMore;
+
+ BookmarkFetchSuccess({required this.bookmark, required this.totalBookmarkCount, required this.hasMoreFetchError, required this.hasMore});
+}
+
+class BookmarkFetchFailure extends BookmarkState {
+ final String errorMessage;
+
+ BookmarkFetchFailure(this.errorMessage);
+}
+
+class BookmarkCubit extends Cubit {
+ final BookmarkRepository bookmarkRepository;
+ int perPageLimit = 25;
+
+ BookmarkCubit(this.bookmarkRepository) : super(BookmarkInitial());
+
+ void getBookmark({required String langId}) async {
+ emit(BookmarkFetchInProgress());
+
+ try {
+ final result = await bookmarkRepository.getBookmark(limit: perPageLimit.toString(), offset: "0", langId: langId);
+
+ if (result[ERROR]) {
+ final message = result[MESSAGE];
+ if (message == "No Data Found") {
+ emit(BookmarkFetchSuccess(bookmark: [], totalBookmarkCount: 0, hasMoreFetchError: false, hasMore: false));
+ } else {
+ emit(BookmarkFetchFailure(message));
+ }
+ return;
+ }
+
+ final bookmarks = result['Bookmark'] as List;
+ final total = result[TOTAL] as int;
+
+ emit(BookmarkFetchSuccess(bookmark: bookmarks, totalBookmarkCount: total, hasMoreFetchError: false, hasMore: bookmarks.length < total));
+ } catch (e) {
+ final error = e.toString();
+ emit(error == "No Data Found" ? BookmarkFetchSuccess(bookmark: [], totalBookmarkCount: 0, hasMoreFetchError: false, hasMore: false) : BookmarkFetchFailure(error));
+ }
+ }
+
+ bool hasMoreBookmark() {
+ return (state is BookmarkFetchSuccess) ? (state as BookmarkFetchSuccess).hasMore : false;
+ }
+
+ void getMoreBookmark({required String langId}) async {
+ if (state is BookmarkFetchSuccess) {
+ try {
+ final result = await bookmarkRepository.getBookmark(limit: perPageLimit.toString(), offset: (state as BookmarkFetchSuccess).bookmark.length.toString(), langId: langId);
+ List updatedResults = (state as BookmarkFetchSuccess).bookmark;
+ updatedResults.addAll(result['Bookmark'] as List);
+ emit(BookmarkFetchSuccess(bookmark: updatedResults, totalBookmarkCount: result[TOTAL], hasMoreFetchError: false, hasMore: updatedResults.length < result[TOTAL]));
+ } catch (e) {
+ emit(BookmarkFetchSuccess(
+ bookmark: (state as BookmarkFetchSuccess).bookmark,
+ hasMoreFetchError: (e.toString() == "No Data Found") ? false : true,
+ totalBookmarkCount: (state as BookmarkFetchSuccess).totalBookmarkCount,
+ hasMore: (state as BookmarkFetchSuccess).hasMore));
+ }
+ }
+ }
+
+ void addBookmarkNews(NewsModel model) {
+ if (state is BookmarkFetchSuccess) {
+ List bookmarklist = [];
+ bookmarklist.insert(0, model);
+ bookmarklist.addAll((state as BookmarkFetchSuccess).bookmark);
+
+ emit(BookmarkFetchSuccess(
+ bookmark: List.from(bookmarklist), hasMoreFetchError: true, totalBookmarkCount: (state as BookmarkFetchSuccess).totalBookmarkCount, hasMore: (state as BookmarkFetchSuccess).hasMore));
+ }
+ }
+
+ void removeBookmarkNews(NewsModel model) {
+ if (state is BookmarkFetchSuccess) {
+ final bookmark = (state as BookmarkFetchSuccess).bookmark;
+ bookmark.removeWhere(((element) => (element.id == model.id || element.newsId == model.id)));
+ emit(BookmarkFetchSuccess(
+ bookmark: List.from(bookmark), hasMoreFetchError: true, totalBookmarkCount: (state as BookmarkFetchSuccess).totalBookmarkCount, hasMore: (state as BookmarkFetchSuccess).hasMore));
+ }
+ }
+
+ bool isNewsBookmark(String newsId) {
+ if (state is BookmarkFetchSuccess) {
+ final bookmark = (state as BookmarkFetchSuccess).bookmark;
+ return (bookmark.isNotEmpty) ? (bookmark.indexWhere((element) => (element.newsId == newsId || element.id == newsId)) != -1) : false;
+ }
+ return false;
+ }
+
+ void resetState() {
+ emit(BookmarkFetchInProgress());
+ }
+}
diff --git a/news-app/lib/cubits/ConnectivityCubit.dart b/news-app/lib/cubits/ConnectivityCubit.dart
new file mode 100644
index 00000000..0eb95129
--- /dev/null
+++ b/news-app/lib/cubits/ConnectivityCubit.dart
@@ -0,0 +1,79 @@
+import 'dart:async';
+
+import 'package:equatable/equatable.dart';
+import 'package:connectivity_plus/connectivity_plus.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+
+class ConnectivityCubit extends Cubit {
+ final ConnectivityService _connectivityService;
+ late StreamSubscription _subscription;
+
+ ConnectivityCubit(this._connectivityService) : super(ConnectivityInitial()) {
+ _startMonitoring();
+ }
+
+ void _startMonitoring() {
+ _subscription = _connectivityService.connectivityStream.listen((result) {
+ if (result == ConnectivityResult.none) {
+ emit(ConnectivityDisconnected());
+ } else {
+ emit(ConnectivityConnected(result));
+ }
+ });
+ }
+
+ Future checkInitialConnection() async {
+ final result = await _connectivityService.checkConnectivity();
+ if (result == ConnectivityResult.none) {
+ emit(ConnectivityDisconnected());
+ } else {
+ emit(ConnectivityConnected(result as ConnectivityResult));
+ }
+ }
+
+ @override
+ Future close() {
+ _subscription.cancel();
+ return super.close();
+ }
+}
+
+abstract class ConnectivityState extends Equatable {
+ const ConnectivityState();
+
+ @override
+ List