feat: new pokemon api

This commit is contained in:
Chen Asraf
2023-07-10 02:52:05 +03:00
parent 15f2df61fa
commit ddfb5f1e87
24 changed files with 1585 additions and 1765 deletions

4
.gitignore vendored
View File

@@ -45,3 +45,7 @@ app.*.map.json
tool/data
lib/data
firebase_options.dart
firebase_app_id_file.json
google-services.json
GoogleService-Info.plist

View File

@@ -22,6 +22,10 @@ if (flutterVersionName == null) {
}
apply plugin: 'com.android.application'
// START: FlutterFire Configuration
apply plugin: 'com.google.gms.google-services'
// apply plugin: 'com.google.firebase.crashlytics'
// END: FlutterFire Configuration
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
@@ -44,13 +48,14 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.pokedex"
applicationId "dev.casraf.pokedex"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
}
buildTypes {

View File

@@ -7,6 +7,10 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
// START: FlutterFire Configuration
classpath 'com.google.gms:google-services:4.3.10'
// classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
// END: FlutterFire Configuration
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
@@ -26,6 +30,6 @@ subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}

View File

@@ -1,3 +1,3 @@
org.gradle.jvmargs=-Xmx1536M
org.gradle.jvmargs=-Xmx2048M
android.useAndroidX=true
android.enableJetifier=true

908
ios/Podfile.lock Normal file
View File

@@ -0,0 +1,908 @@
PODS:
- abseil/algorithm (1.20211102.0):
- abseil/algorithm/algorithm (= 1.20211102.0)
- abseil/algorithm/container (= 1.20211102.0)
- abseil/algorithm/algorithm (1.20211102.0):
- abseil/base/config
- abseil/algorithm/container (1.20211102.0):
- abseil/algorithm/algorithm
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/base (1.20211102.0):
- abseil/base/atomic_hook (= 1.20211102.0)
- abseil/base/base (= 1.20211102.0)
- abseil/base/base_internal (= 1.20211102.0)
- abseil/base/config (= 1.20211102.0)
- abseil/base/core_headers (= 1.20211102.0)
- abseil/base/dynamic_annotations (= 1.20211102.0)
- abseil/base/endian (= 1.20211102.0)
- abseil/base/errno_saver (= 1.20211102.0)
- abseil/base/fast_type_id (= 1.20211102.0)
- abseil/base/log_severity (= 1.20211102.0)
- abseil/base/malloc_internal (= 1.20211102.0)
- abseil/base/pretty_function (= 1.20211102.0)
- abseil/base/raw_logging_internal (= 1.20211102.0)
- abseil/base/spinlock_wait (= 1.20211102.0)
- abseil/base/strerror (= 1.20211102.0)
- abseil/base/throw_delegate (= 1.20211102.0)
- abseil/base/atomic_hook (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/base (1.20211102.0):
- abseil/base/atomic_hook
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/log_severity
- abseil/base/raw_logging_internal
- abseil/base/spinlock_wait
- abseil/meta/type_traits
- abseil/base/base_internal (1.20211102.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/base/config (1.20211102.0)
- abseil/base/core_headers (1.20211102.0):
- abseil/base/config
- abseil/base/dynamic_annotations (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/errno_saver (1.20211102.0):
- abseil/base/config
- abseil/base/fast_type_id (1.20211102.0):
- abseil/base/config
- abseil/base/log_severity (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/malloc_internal (1.20211102.0):
- abseil/base/base
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/raw_logging_internal
- abseil/base/pretty_function (1.20211102.0)
- abseil/base/raw_logging_internal (1.20211102.0):
- abseil/base/atomic_hook
- abseil/base/config
- abseil/base/core_headers
- abseil/base/log_severity
- abseil/base/spinlock_wait (1.20211102.0):
- abseil/base/base_internal
- abseil/base/core_headers
- abseil/base/errno_saver
- abseil/base/strerror (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/errno_saver
- abseil/base/throw_delegate (1.20211102.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/container/common (1.20211102.0):
- abseil/meta/type_traits
- abseil/types/optional
- abseil/container/compressed_tuple (1.20211102.0):
- abseil/utility/utility
- abseil/container/container_memory (1.20211102.0):
- abseil/base/config
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/utility/utility
- abseil/container/fixed_array (1.20211102.0):
- abseil/algorithm/algorithm
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/throw_delegate
- abseil/container/compressed_tuple
- abseil/memory/memory
- abseil/container/flat_hash_map (1.20211102.0):
- abseil/algorithm/container
- abseil/container/container_memory
- abseil/container/hash_function_defaults
- abseil/container/raw_hash_map
- abseil/memory/memory
- abseil/container/hash_function_defaults (1.20211102.0):
- abseil/base/config
- abseil/hash/hash
- abseil/strings/cord
- abseil/strings/strings
- abseil/container/hash_policy_traits (1.20211102.0):
- abseil/meta/type_traits
- abseil/container/hashtable_debug_hooks (1.20211102.0):
- abseil/base/config
- abseil/container/hashtablez_sampler (1.20211102.0):
- abseil/base/base
- abseil/base/core_headers
- abseil/container/have_sse
- abseil/debugging/stacktrace
- abseil/memory/memory
- abseil/profiling/exponential_biased
- abseil/profiling/sample_recorder
- abseil/synchronization/synchronization
- abseil/utility/utility
- abseil/container/have_sse (1.20211102.0)
- abseil/container/inlined_vector (1.20211102.0):
- abseil/algorithm/algorithm
- abseil/base/core_headers
- abseil/base/throw_delegate
- abseil/container/inlined_vector_internal
- abseil/memory/memory
- abseil/container/inlined_vector_internal (1.20211102.0):
- abseil/base/core_headers
- abseil/container/compressed_tuple
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/types/span
- abseil/container/layout (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/strings/strings
- abseil/types/span
- abseil/utility/utility
- abseil/container/raw_hash_map (1.20211102.0):
- abseil/base/throw_delegate
- abseil/container/container_memory
- abseil/container/raw_hash_set
- abseil/container/raw_hash_set (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/container/common
- abseil/container/compressed_tuple
- abseil/container/container_memory
- abseil/container/hash_policy_traits
- abseil/container/hashtable_debug_hooks
- abseil/container/hashtablez_sampler
- abseil/container/have_sse
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/utility/utility
- abseil/debugging/debugging_internal (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/errno_saver
- abseil/base/raw_logging_internal
- abseil/debugging/demangle_internal (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/debugging/stacktrace (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/debugging/debugging_internal
- abseil/debugging/symbolize (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/malloc_internal
- abseil/base/raw_logging_internal
- abseil/debugging/debugging_internal
- abseil/debugging/demangle_internal
- abseil/strings/strings
- abseil/functional/bind_front (1.20211102.0):
- abseil/base/base_internal
- abseil/container/compressed_tuple
- abseil/meta/type_traits
- abseil/utility/utility
- abseil/functional/function_ref (1.20211102.0):
- abseil/base/base_internal
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/hash/city (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/hash/hash (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/container/fixed_array
- abseil/hash/city
- abseil/hash/low_level_hash
- abseil/meta/type_traits
- abseil/numeric/int128
- abseil/strings/strings
- abseil/types/optional
- abseil/types/variant
- abseil/utility/utility
- abseil/hash/low_level_hash (1.20211102.0):
- abseil/base/config
- abseil/base/endian
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/memory (1.20211102.0):
- abseil/memory/memory (= 1.20211102.0)
- abseil/memory/memory (1.20211102.0):
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/meta (1.20211102.0):
- abseil/meta/type_traits (= 1.20211102.0)
- abseil/meta/type_traits (1.20211102.0):
- abseil/base/config
- abseil/numeric/bits (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/numeric/int128 (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/numeric/bits
- abseil/numeric/representation (1.20211102.0):
- abseil/base/config
- abseil/profiling/exponential_biased (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/profiling/sample_recorder (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/synchronization/synchronization
- abseil/time/time
- abseil/random/distributions (1.20211102.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/random/internal/distribution_caller
- abseil/random/internal/fast_uniform_bits
- abseil/random/internal/fastmath
- abseil/random/internal/generate_real
- abseil/random/internal/iostream_state_saver
- abseil/random/internal/traits
- abseil/random/internal/uniform_helper
- abseil/random/internal/wide_multiply
- abseil/strings/strings
- abseil/random/internal/distribution_caller (1.20211102.0):
- abseil/base/config
- abseil/base/fast_type_id
- abseil/utility/utility
- abseil/random/internal/fast_uniform_bits (1.20211102.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/random/internal/fastmath (1.20211102.0):
- abseil/numeric/bits
- abseil/random/internal/generate_real (1.20211102.0):
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/random/internal/fastmath
- abseil/random/internal/traits
- abseil/random/internal/iostream_state_saver (1.20211102.0):
- abseil/meta/type_traits
- abseil/numeric/int128
- abseil/random/internal/nonsecure_base (1.20211102.0):
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/random/internal/pool_urbg
- abseil/random/internal/salted_seed_seq
- abseil/random/internal/seed_material
- abseil/types/optional
- abseil/types/span
- abseil/random/internal/pcg_engine (1.20211102.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/random/internal/fastmath
- abseil/random/internal/iostream_state_saver
- abseil/random/internal/platform (1.20211102.0):
- abseil/base/config
- abseil/random/internal/pool_urbg (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/random/internal/randen
- abseil/random/internal/seed_material
- abseil/random/internal/traits
- abseil/random/seed_gen_exception
- abseil/types/span
- abseil/random/internal/randen (1.20211102.0):
- abseil/base/raw_logging_internal
- abseil/random/internal/platform
- abseil/random/internal/randen_hwaes
- abseil/random/internal/randen_slow
- abseil/random/internal/randen_engine (1.20211102.0):
- abseil/base/endian
- abseil/meta/type_traits
- abseil/random/internal/iostream_state_saver
- abseil/random/internal/randen
- abseil/random/internal/randen_hwaes (1.20211102.0):
- abseil/base/config
- abseil/random/internal/platform
- abseil/random/internal/randen_hwaes_impl
- abseil/random/internal/randen_hwaes_impl (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/numeric/int128
- abseil/random/internal/platform
- abseil/random/internal/randen_slow (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/numeric/int128
- abseil/random/internal/platform
- abseil/random/internal/salted_seed_seq (1.20211102.0):
- abseil/container/inlined_vector
- abseil/meta/type_traits
- abseil/random/internal/seed_material
- abseil/types/optional
- abseil/types/span
- abseil/random/internal/seed_material (1.20211102.0):
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/raw_logging_internal
- abseil/random/internal/fast_uniform_bits
- abseil/strings/strings
- abseil/types/optional
- abseil/types/span
- abseil/random/internal/traits (1.20211102.0):
- abseil/base/config
- abseil/random/internal/uniform_helper (1.20211102.0):
- abseil/base/config
- abseil/meta/type_traits
- abseil/random/internal/traits
- abseil/random/internal/wide_multiply (1.20211102.0):
- abseil/base/config
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/random/internal/traits
- abseil/random/random (1.20211102.0):
- abseil/random/distributions
- abseil/random/internal/nonsecure_base
- abseil/random/internal/pcg_engine
- abseil/random/internal/pool_urbg
- abseil/random/internal/randen_engine
- abseil/random/seed_sequences
- abseil/random/seed_gen_exception (1.20211102.0):
- abseil/base/config
- abseil/random/seed_sequences (1.20211102.0):
- abseil/container/inlined_vector
- abseil/random/internal/nonsecure_base
- abseil/random/internal/pool_urbg
- abseil/random/internal/salted_seed_seq
- abseil/random/internal/seed_material
- abseil/random/seed_gen_exception
- abseil/types/span
- abseil/status/status (1.20211102.0):
- abseil/base/atomic_hook
- abseil/base/config
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/container/inlined_vector
- abseil/debugging/stacktrace
- abseil/debugging/symbolize
- abseil/functional/function_ref
- abseil/strings/cord
- abseil/strings/str_format
- abseil/strings/strings
- abseil/types/optional
- abseil/status/statusor (1.20211102.0):
- abseil/base/base
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/meta/type_traits
- abseil/status/status
- abseil/strings/strings
- abseil/types/variant
- abseil/utility/utility
- abseil/strings/cord (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/container/fixed_array
- abseil/container/inlined_vector
- abseil/functional/function_ref
- abseil/meta/type_traits
- abseil/strings/cord_internal
- abseil/strings/cordz_functions
- abseil/strings/cordz_info
- abseil/strings/cordz_statistics
- abseil/strings/cordz_update_scope
- abseil/strings/cordz_update_tracker
- abseil/strings/internal
- abseil/strings/str_format
- abseil/strings/strings
- abseil/types/optional
- abseil/strings/cord_internal (1.20211102.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/base/throw_delegate
- abseil/container/compressed_tuple
- abseil/container/inlined_vector
- abseil/container/layout
- abseil/functional/function_ref
- abseil/meta/type_traits
- abseil/strings/strings
- abseil/types/span
- abseil/strings/cordz_functions (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/profiling/exponential_biased
- abseil/strings/cordz_handle (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/synchronization/synchronization
- abseil/strings/cordz_info (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/container/inlined_vector
- abseil/debugging/stacktrace
- abseil/strings/cord_internal
- abseil/strings/cordz_functions
- abseil/strings/cordz_handle
- abseil/strings/cordz_statistics
- abseil/strings/cordz_update_tracker
- abseil/synchronization/synchronization
- abseil/types/span
- abseil/strings/cordz_statistics (1.20211102.0):
- abseil/base/config
- abseil/strings/cordz_update_tracker
- abseil/strings/cordz_update_scope (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/strings/cord_internal
- abseil/strings/cordz_info
- abseil/strings/cordz_update_tracker
- abseil/strings/cordz_update_tracker (1.20211102.0):
- abseil/base/config
- abseil/strings/internal (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/meta/type_traits
- abseil/strings/str_format (1.20211102.0):
- abseil/strings/str_format_internal
- abseil/strings/str_format_internal (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/functional/function_ref
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/numeric/representation
- abseil/strings/strings
- abseil/types/optional
- abseil/types/span
- abseil/strings/strings (1.20211102.0):
- abseil/base/base
- abseil/base/config
- abseil/base/core_headers
- abseil/base/endian
- abseil/base/raw_logging_internal
- abseil/base/throw_delegate
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/numeric/bits
- abseil/numeric/int128
- abseil/strings/internal
- abseil/synchronization/graphcycles_internal (1.20211102.0):
- abseil/base/base
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/malloc_internal
- abseil/base/raw_logging_internal
- abseil/synchronization/kernel_timeout_internal (1.20211102.0):
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/time/time
- abseil/synchronization/synchronization (1.20211102.0):
- abseil/base/atomic_hook
- abseil/base/base
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/base/dynamic_annotations
- abseil/base/malloc_internal
- abseil/base/raw_logging_internal
- abseil/debugging/stacktrace
- abseil/debugging/symbolize
- abseil/synchronization/graphcycles_internal
- abseil/synchronization/kernel_timeout_internal
- abseil/time/time
- abseil/time (1.20211102.0):
- abseil/time/internal (= 1.20211102.0)
- abseil/time/time (= 1.20211102.0)
- abseil/time/internal (1.20211102.0):
- abseil/time/internal/cctz (= 1.20211102.0)
- abseil/time/internal/cctz (1.20211102.0):
- abseil/time/internal/cctz/civil_time (= 1.20211102.0)
- abseil/time/internal/cctz/time_zone (= 1.20211102.0)
- abseil/time/internal/cctz/civil_time (1.20211102.0):
- abseil/base/config
- abseil/time/internal/cctz/time_zone (1.20211102.0):
- abseil/base/config
- abseil/time/internal/cctz/civil_time
- abseil/time/time (1.20211102.0):
- abseil/base/base
- abseil/base/core_headers
- abseil/base/raw_logging_internal
- abseil/numeric/int128
- abseil/strings/strings
- abseil/time/internal/cctz/civil_time
- abseil/time/internal/cctz/time_zone
- abseil/types (1.20211102.0):
- abseil/types/any (= 1.20211102.0)
- abseil/types/bad_any_cast (= 1.20211102.0)
- abseil/types/bad_any_cast_impl (= 1.20211102.0)
- abseil/types/bad_optional_access (= 1.20211102.0)
- abseil/types/bad_variant_access (= 1.20211102.0)
- abseil/types/compare (= 1.20211102.0)
- abseil/types/optional (= 1.20211102.0)
- abseil/types/span (= 1.20211102.0)
- abseil/types/variant (= 1.20211102.0)
- abseil/types/any (1.20211102.0):
- abseil/base/config
- abseil/base/core_headers
- abseil/base/fast_type_id
- abseil/meta/type_traits
- abseil/types/bad_any_cast
- abseil/utility/utility
- abseil/types/bad_any_cast (1.20211102.0):
- abseil/base/config
- abseil/types/bad_any_cast_impl
- abseil/types/bad_any_cast_impl (1.20211102.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/types/bad_optional_access (1.20211102.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/types/bad_variant_access (1.20211102.0):
- abseil/base/config
- abseil/base/raw_logging_internal
- abseil/types/compare (1.20211102.0):
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/types/optional (1.20211102.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/memory/memory
- abseil/meta/type_traits
- abseil/types/bad_optional_access
- abseil/utility/utility
- abseil/types/span (1.20211102.0):
- abseil/algorithm/algorithm
- abseil/base/core_headers
- abseil/base/throw_delegate
- abseil/meta/type_traits
- abseil/types/variant (1.20211102.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/base/core_headers
- abseil/meta/type_traits
- abseil/types/bad_variant_access
- abseil/utility/utility
- abseil/utility/utility (1.20211102.0):
- abseil/base/base_internal
- abseil/base/config
- abseil/meta/type_traits
- AppAuth (1.6.2):
- AppAuth/Core (= 1.6.2)
- AppAuth/ExternalUserAgent (= 1.6.2)
- AppAuth/Core (1.6.2)
- AppAuth/ExternalUserAgent (1.6.2):
- AppAuth/Core
- BoringSSL-GRPC (0.0.24):
- BoringSSL-GRPC/Implementation (= 0.0.24)
- BoringSSL-GRPC/Interface (= 0.0.24)
- BoringSSL-GRPC/Implementation (0.0.24):
- BoringSSL-GRPC/Interface (= 0.0.24)
- BoringSSL-GRPC/Interface (0.0.24)
- cloud_firestore (4.2.0):
- Firebase/Firestore (= 10.3.0)
- firebase_core
- Flutter
- nanopb (< 2.30910.0, >= 2.30908.0)
- Firebase/Auth (10.3.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 10.3.0)
- Firebase/CoreOnly (10.3.0):
- FirebaseCore (= 10.3.0)
- Firebase/Crashlytics (10.3.0):
- Firebase/CoreOnly
- FirebaseCrashlytics (~> 10.3.0)
- Firebase/Firestore (10.3.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 10.3.0)
- Firebase/RemoteConfig (10.3.0):
- Firebase/CoreOnly
- FirebaseRemoteConfig (~> 10.3.0)
- firebase_auth (4.2.0):
- Firebase/Auth (= 10.3.0)
- firebase_core
- Flutter
- firebase_core (2.4.0):
- Firebase/CoreOnly (= 10.3.0)
- Flutter
- firebase_crashlytics (3.0.7):
- Firebase/Crashlytics (= 10.3.0)
- firebase_core
- Flutter
- firebase_remote_config (3.0.7):
- Firebase/RemoteConfig (= 10.3.0)
- firebase_core
- Flutter
- FirebaseABTesting (10.11.0):
- FirebaseCore (~> 10.0)
- FirebaseAuth (10.3.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- FirebaseCore (10.3.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreInternal (10.11.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseCrashlytics (10.3.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
- GoogleUtilities/Environment (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (~> 2.1)
- FirebaseFirestore (10.3.0):
- abseil/algorithm (~> 1.20211102.0)
- abseil/base (~> 1.20211102.0)
- abseil/container/flat_hash_map (~> 1.20211102.0)
- abseil/memory (~> 1.20211102.0)
- abseil/meta (~> 1.20211102.0)
- abseil/strings/strings (~> 1.20211102.0)
- abseil/time (~> 1.20211102.0)
- abseil/types (~> 1.20211102.0)
- FirebaseCore (~> 10.0)
- "gRPC-C++ (~> 1.44.0)"
- leveldb-library (~> 1.22)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseInstallations (10.11.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseRemoteConfig (10.3.0):
- FirebaseABTesting (~> 10.0)
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- Flutter (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- google_sign_in_ios (0.0.1):
- Flutter
- GoogleSignIn (~> 6.2)
- GoogleDataTransport (9.2.3):
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleSignIn (6.2.4):
- AppAuth (~> 1.5)
- GTMAppAuth (~> 1.3)
- GTMSessionFetcher/Core (< 3.0, >= 1.1)
- GoogleUtilities/AppDelegateSwizzler (7.11.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.11.1):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.11.1):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.11.1):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.11.1)"
- GoogleUtilities/Reachability (7.11.1):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.11.1):
- GoogleUtilities/Logger
- "gRPC-C++ (1.44.0)":
- "gRPC-C++/Implementation (= 1.44.0)"
- "gRPC-C++/Interface (= 1.44.0)"
- "gRPC-C++/Implementation (1.44.0)":
- abseil/base/base (= 1.20211102.0)
- abseil/base/core_headers (= 1.20211102.0)
- abseil/container/flat_hash_map (= 1.20211102.0)
- abseil/container/inlined_vector (= 1.20211102.0)
- abseil/functional/bind_front (= 1.20211102.0)
- abseil/hash/hash (= 1.20211102.0)
- abseil/memory/memory (= 1.20211102.0)
- abseil/random/random (= 1.20211102.0)
- abseil/status/status (= 1.20211102.0)
- abseil/status/statusor (= 1.20211102.0)
- abseil/strings/cord (= 1.20211102.0)
- abseil/strings/str_format (= 1.20211102.0)
- abseil/strings/strings (= 1.20211102.0)
- abseil/synchronization/synchronization (= 1.20211102.0)
- abseil/time/time (= 1.20211102.0)
- abseil/types/optional (= 1.20211102.0)
- abseil/types/variant (= 1.20211102.0)
- abseil/utility/utility (= 1.20211102.0)
- "gRPC-C++/Interface (= 1.44.0)"
- gRPC-Core (= 1.44.0)
- "gRPC-C++/Interface (1.44.0)"
- gRPC-Core (1.44.0):
- gRPC-Core/Implementation (= 1.44.0)
- gRPC-Core/Interface (= 1.44.0)
- gRPC-Core/Implementation (1.44.0):
- abseil/base/base (= 1.20211102.0)
- abseil/base/core_headers (= 1.20211102.0)
- abseil/container/flat_hash_map (= 1.20211102.0)
- abseil/container/inlined_vector (= 1.20211102.0)
- abseil/functional/bind_front (= 1.20211102.0)
- abseil/hash/hash (= 1.20211102.0)
- abseil/memory/memory (= 1.20211102.0)
- abseil/random/random (= 1.20211102.0)
- abseil/status/status (= 1.20211102.0)
- abseil/status/statusor (= 1.20211102.0)
- abseil/strings/cord (= 1.20211102.0)
- abseil/strings/str_format (= 1.20211102.0)
- abseil/strings/strings (= 1.20211102.0)
- abseil/synchronization/synchronization (= 1.20211102.0)
- abseil/time/time (= 1.20211102.0)
- abseil/types/optional (= 1.20211102.0)
- abseil/types/variant (= 1.20211102.0)
- abseil/utility/utility (= 1.20211102.0)
- BoringSSL-GRPC (= 0.0.24)
- gRPC-Core/Interface (= 1.44.0)
- Libuv-gRPC (= 0.0.10)
- gRPC-Core/Interface (1.44.0)
- GTMAppAuth (1.3.1):
- AppAuth/Core (~> 1.6)
- GTMSessionFetcher/Core (< 3.0, >= 1.5)
- GTMSessionFetcher/Core (2.3.0)
- leveldb-library (1.22.2)
- Libuv-gRPC (0.0.10):
- Libuv-gRPC/Implementation (= 0.0.10)
- Libuv-gRPC/Interface (= 0.0.10)
- Libuv-gRPC/Implementation (0.0.10):
- Libuv-gRPC/Interface (= 0.0.10)
- Libuv-gRPC/Interface (0.0.10)
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
- nanopb/decode (2.30909.0)
- nanopb/encode (2.30909.0)
- path_provider_ios (0.0.1):
- Flutter
- PromisesObjC (2.2.0)
- shared_preferences_ios (0.0.1):
- Flutter
- sign_in_with_apple (0.0.1):
- Flutter
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- wakelock (0.0.1):
- Flutter
DEPENDENCIES:
- cloud_firestore (from `.symlinks/plugins/cloud_firestore/ios`)
- firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
- firebase_crashlytics (from `.symlinks/plugins/firebase_crashlytics/ios`)
- firebase_remote_config (from `.symlinks/plugins/firebase_remote_config/ios`)
- Flutter (from `Flutter`)
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- wakelock (from `.symlinks/plugins/wakelock/ios`)
SPEC REPOS:
trunk:
- abseil
- AppAuth
- BoringSSL-GRPC
- Firebase
- FirebaseABTesting
- FirebaseAuth
- FirebaseCore
- FirebaseCoreInternal
- FirebaseCrashlytics
- FirebaseFirestore
- FirebaseInstallations
- FirebaseRemoteConfig
- FMDB
- GoogleDataTransport
- GoogleSignIn
- GoogleUtilities
- "gRPC-C++"
- gRPC-Core
- GTMAppAuth
- GTMSessionFetcher
- leveldb-library
- Libuv-gRPC
- nanopb
- PromisesObjC
EXTERNAL SOURCES:
cloud_firestore:
:path: ".symlinks/plugins/cloud_firestore/ios"
firebase_auth:
:path: ".symlinks/plugins/firebase_auth/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_crashlytics:
:path: ".symlinks/plugins/firebase_crashlytics/ios"
firebase_remote_config:
:path: ".symlinks/plugins/firebase_remote_config/ios"
Flutter:
:path: Flutter
google_sign_in_ios:
:path: ".symlinks/plugins/google_sign_in_ios/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
shared_preferences_ios:
:path: ".symlinks/plugins/shared_preferences_ios/ios"
sign_in_with_apple:
:path: ".symlinks/plugins/sign_in_with_apple/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
wakelock:
:path: ".symlinks/plugins/wakelock/ios"
SPEC CHECKSUMS:
abseil: ebe5b5529fb05d93a8bdb7951607be08b7fa71bc
AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570
BoringSSL-GRPC: 3175b25143e648463a56daeaaa499c6cb86dad33
cloud_firestore: cf019e947a49ebb56ddf4ae7f6f2ca13469da1b1
Firebase: f92fc551ead69c94168d36c2b26188263860acd9
firebase_auth: 579a0dc15451491cc83fccaa5102296635f24938
firebase_core: 6f2f753e316765799d88568232ed59e300ff53db
firebase_crashlytics: 4aecad95b85802572a72804e4ca57385357e5255
firebase_remote_config: 7fba03b2c711b07b78c12a832730827a6bee7a74
FirebaseABTesting: 3f6b711718feb87346dc05f8c964601bc8fb2cf6
FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6
FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
FirebaseCoreInternal: 9e46c82a14a3b3a25be4e1e151ce6d21536b89c0
FirebaseCrashlytics: f20d956f8229010b645e534693c39e0b7843c268
FirebaseFirestore: 244f71ff14ef44f39e00b44d356eac708ce03103
FirebaseInstallations: 2a2c6859354cbec0a228a863d4daf6de7c74ced4
FirebaseRemoteConfig: c24f767c17b0440ee63c7e93380d599173556113
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
google_sign_in_ios: 4f85eb9f937450765c8573bb85fd8cd6a5af675c
GoogleDataTransport: f0308f5905a745f94fb91fea9c6cbaf3831cb1bd
GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
GoogleUtilities: 9aa0ad5a7bc171f8bae016300bfcfa3fb8425749
"gRPC-C++": 9675f953ace2b3de7c506039d77be1f2e77a8db2
gRPC-Core: 943e491cb0d45598b0b0eb9e910c88080369290b
GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2
leveldb-library: f03246171cce0484482ec291f88b6d563699ee06
Libuv-gRPC: 55e51798e14ef436ad9bc45d12d43b77b49df378
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
sign_in_with_apple: f3bf75217ea4c2c8b91823f225d70230119b8440
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3
COCOAPODS: 1.11.3

View File

@@ -13,6 +13,8 @@
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 */; };
9A1A74E2C39B643942CDB63F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B614AFF32CE791A460397DB9 /* Pods_Runner.framework */; };
C2CC0F1923E610831217F9E6 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 00CF6856B2390472A7F3A6A9 /* GoogleService-Info.plist */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -29,9 +31,11 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
00CF6856B2390472A7F3A6A9 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
58CEA867CEE857662A23AA44 /* 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 = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
@@ -42,6 +46,9 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
B614AFF32CE791A460397DB9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
B77515FB5AB0901F271935E1 /* 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 = "<group>"; };
D4FB3FC7D19154CCF9372164 /* 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 = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -49,12 +56,21 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
9A1A74E2C39B643942CDB63F /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2BC63D6D5787BDE1BE1CA2E6 /* Frameworks */ = {
isa = PBXGroup;
children = (
B614AFF32CE791A460397DB9 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
@@ -72,6 +88,9 @@
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
00CF6856B2390472A7F3A6A9 /* GoogleService-Info.plist */,
B7C44D14200ED22966A00960 /* Pods */,
2BC63D6D5787BDE1BE1CA2E6 /* Frameworks */,
);
sourceTree = "<group>";
};
@@ -98,6 +117,17 @@
path = Runner;
sourceTree = "<group>";
};
B7C44D14200ED22966A00960 /* Pods */ = {
isa = PBXGroup;
children = (
B77515FB5AB0901F271935E1 /* Pods-Runner.debug.xcconfig */,
58CEA867CEE857662A23AA44 /* Pods-Runner.release.xcconfig */,
D4FB3FC7D19154CCF9372164 /* Pods-Runner.profile.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -105,12 +135,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
B65BB4A0FAFA225023536A8E /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
CDD68F33122F6E61B969A1F9 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -163,6 +195,7 @@
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
C2CC0F1923E610831217F9E6 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -199,6 +232,45 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
B65BB4A0FAFA225023536A8E /* [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;
};
CDD68F33122F6E61B969A1F9 /* [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;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */

View File

@@ -4,4 +4,7 @@
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -1,990 +0,0 @@
import 'dart:convert';
import 'package:strings/strings.dart' as strings;
import '../utils/extensions/iterable_extensions.dart';
import 'pokemon_species.dart';
class Pokemon {
const Pokemon({
required this.abilities,
required this.baseExperience,
required this.forms,
required this.gameIndices,
required this.height,
required this.heldItems,
required this.id,
required this.isDefault,
required this.locationAreaEncounters,
required this.moves,
required this.name,
required this.order,
required this.pastTypes,
required this.species,
required this.sprites,
required this.stats,
required this.types,
required this.weight,
required this.speciesData,
});
final List<Ability> abilities;
final int? baseExperience;
final List<ObjectRef> forms;
final List<GameIndex> gameIndices;
final int height;
final List<HeldItem> heldItems;
final int id;
final bool isDefault;
final String locationAreaEncounters;
final List<Move> moves;
final String name;
final int order;
final List<dynamic> pastTypes;
final ObjectRef species;
final Sprites sprites;
final List<Stat> stats;
final List<Type> types;
final int weight;
final PokemonSpecies? speciesData;
String? get imageUrl =>
sprites.other?.home.frontDefault ??
sprites.frontDefault ??
sprites.versions?.generationViii.icons.frontDefault;
String get displayName {
final speciesName = speciesData?.names
.firstWhereOrNull((n) => n.language.name == 'en')
?.name;
return speciesName != null
? strings.capitalize(speciesName)
: name.splitMapJoin(
RegExp(r'[ -]'),
onMatch: (m) =>
strings.capitalize(m.input.substring(m.start, m.end)),
onNonMatch: (n) => strings.capitalize(n),
);
}
String? get formName {
final speciesName = species.name;
if (speciesName == name) {
return null;
}
final form = name.split('-').last;
final presets = {
'gmax': 'Gygantamax',
'alola': 'Alolan',
'galar': 'Galarian',
'hisui': 'Hisuian',
};
return presets[form] ?? strings.capitalize(form);
}
Pokemon copyWith({
List<Ability>? abilities,
int? baseExperience,
List<ObjectRef>? forms,
List<GameIndex>? gameIndices,
int? height,
List<HeldItem>? heldItems,
int? id,
bool? isDefault,
String? locationAreaEncounters,
List<Move>? moves,
String? name,
int? order,
List<dynamic>? pastTypes,
ObjectRef? species,
Sprites? sprites,
List<Stat>? stats,
List<Type>? types,
int? weight,
PokemonSpecies? speciesData,
}) =>
Pokemon(
abilities: abilities ?? this.abilities,
baseExperience: baseExperience ?? this.baseExperience,
forms: forms ?? this.forms,
gameIndices: gameIndices ?? this.gameIndices,
height: height ?? this.height,
heldItems: heldItems ?? this.heldItems,
id: id ?? this.id,
isDefault: isDefault ?? this.isDefault,
locationAreaEncounters:
locationAreaEncounters ?? this.locationAreaEncounters,
moves: moves ?? this.moves,
name: name ?? this.name,
order: order ?? this.order,
pastTypes: pastTypes ?? this.pastTypes,
species: species ?? this.species,
sprites: sprites ?? this.sprites,
stats: stats ?? this.stats,
types: types ?? this.types,
weight: weight ?? this.weight,
speciesData: speciesData ?? this.speciesData,
);
factory Pokemon.fromRawJson(String str) => Pokemon.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Pokemon.fromJson(Map<String, dynamic> json) => Pokemon(
abilities: List<Ability>.from(
json["abilities"].map((x) => Ability.fromJson(x))),
baseExperience: json["base_experience"],
forms: List<ObjectRef>.from(
json["forms"].map((x) => ObjectRef.fromJson(x))),
gameIndices: List<GameIndex>.from(
json["game_indices"].map((x) => GameIndex.fromJson(x))),
height: json["height"],
heldItems: List<HeldItem>.from(
json["held_items"].map((x) => HeldItem.fromJson(x))),
id: json["id"],
isDefault: json["is_default"],
locationAreaEncounters: json["location_area_encounters"],
moves: List<Move>.from(json["moves"].map((x) => Move.fromJson(x))),
name: json["name"],
order: json["order"],
pastTypes: List<dynamic>.from(json["past_types"].map((x) => x)),
species: ObjectRef.fromJson(json["species"]),
sprites: Sprites.fromJson(json["sprites"]),
stats: List<Stat>.from(json["stats"].map((x) => Stat.fromJson(x))),
types: List<Type>.from(json["types"].map((x) => Type.fromJson(x))),
weight: json["weight"],
speciesData: json['species_data'] != null
? PokemonSpecies.fromJson(json['species_data'])
: null,
// speciesData: PokemonSpecies.fromJson(json['species_data']),
);
Map<String, dynamic> toJson() => {
"abilities": List<dynamic>.from(abilities.map((x) => x.toJson())),
"base_experience": baseExperience,
"forms": List<dynamic>.from(forms.map((x) => x.toJson())),
"game_indices": List<dynamic>.from(gameIndices.map((x) => x.toJson())),
"height": height,
"held_items": List<dynamic>.from(heldItems.map((x) => x.toJson())),
"id": id,
"is_default": isDefault,
"location_area_encounters": locationAreaEncounters,
"moves": List<dynamic>.from(moves.map((x) => x.toJson())),
"name": name,
"order": order,
"past_types": List<dynamic>.from(pastTypes.map((x) => x)),
"species": species.toJson(),
"sprites": sprites.toJson(),
"stats": List<dynamic>.from(stats.map((x) => x.toJson())),
"types": List<dynamic>.from(types.map((x) => x.toJson())),
"weight": weight,
"species_data": speciesData?.toJson(),
};
}
class Ability {
Ability({
required this.ability,
required this.isHidden,
required this.slot,
});
final ObjectRef ability;
final bool isHidden;
final int slot;
Ability copyWith({
ObjectRef? ability,
bool? isHidden,
int? slot,
}) =>
Ability(
ability: ability ?? this.ability,
isHidden: isHidden ?? this.isHidden,
slot: slot ?? this.slot,
);
factory Ability.fromRawJson(String str) => Ability.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Ability.fromJson(Map<String, dynamic> json) => Ability(
ability: ObjectRef.fromJson(json["ability"]),
isHidden: json["is_hidden"],
slot: json["slot"],
);
Map<String, dynamic> toJson() => {
"ability": ability.toJson(),
"is_hidden": isHidden,
"slot": slot,
};
}
class ObjectRef {
ObjectRef({
required this.name,
required this.url,
});
final String name;
final String url;
ObjectRef copyWith({
String? name,
String? url,
}) =>
ObjectRef(
name: name ?? this.name,
url: url ?? this.url,
);
factory ObjectRef.fromRawJson(String str) =>
ObjectRef.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ObjectRef.fromJson(Map<String, dynamic> json) => ObjectRef(
name: json["name"],
url: json["url"],
);
Map<String, dynamic> toJson() => {
"name": name,
"url": url,
};
}
class GameIndex {
GameIndex({
required this.gameIndex,
required this.version,
});
final int gameIndex;
final ObjectRef version;
GameIndex copyWith({
int? gameIndex,
ObjectRef? version,
}) =>
GameIndex(
gameIndex: gameIndex ?? this.gameIndex,
version: version ?? this.version,
);
factory GameIndex.fromRawJson(String str) =>
GameIndex.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GameIndex.fromJson(Map<String, dynamic> json) => GameIndex(
gameIndex: json["game_index"],
version: ObjectRef.fromJson(json["version"]),
);
Map<String, dynamic> toJson() => {
"game_index": gameIndex,
"version": version.toJson(),
};
}
class HeldItem {
HeldItem({
required this.item,
required this.versionDetails,
});
final ObjectRef item;
final List<VersionDetail> versionDetails;
HeldItem copyWith({
ObjectRef? item,
List<VersionDetail>? versionDetails,
}) =>
HeldItem(
item: item ?? this.item,
versionDetails: versionDetails ?? this.versionDetails,
);
factory HeldItem.fromRawJson(String str) =>
HeldItem.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory HeldItem.fromJson(Map<String, dynamic> json) => HeldItem(
item: ObjectRef.fromJson(json["item"]),
versionDetails: List<VersionDetail>.from(
json["version_details"].map((x) => VersionDetail.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"item": item.toJson(),
"version_details":
List<dynamic>.from(versionDetails.map((x) => x.toJson())),
};
}
class VersionDetail {
VersionDetail({
required this.rarity,
required this.version,
});
final int rarity;
final ObjectRef version;
VersionDetail copyWith({
int? rarity,
ObjectRef? version,
}) =>
VersionDetail(
rarity: rarity ?? this.rarity,
version: version ?? this.version,
);
factory VersionDetail.fromRawJson(String str) =>
VersionDetail.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory VersionDetail.fromJson(Map<String, dynamic> json) => VersionDetail(
rarity: json["rarity"],
version: ObjectRef.fromJson(json["version"]),
);
Map<String, dynamic> toJson() => {
"rarity": rarity,
"version": version.toJson(),
};
}
class Move {
Move({
required this.move,
required this.versionGroupDetails,
});
final ObjectRef move;
final List<VersionGroupDetail> versionGroupDetails;
Move copyWith({
ObjectRef? move,
List<VersionGroupDetail>? versionGroupDetails,
}) =>
Move(
move: move ?? this.move,
versionGroupDetails: versionGroupDetails ?? this.versionGroupDetails,
);
factory Move.fromRawJson(String str) => Move.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Move.fromJson(Map<String, dynamic> json) => Move(
move: ObjectRef.fromJson(json["move"]),
versionGroupDetails: List<VersionGroupDetail>.from(
json["version_group_details"]
.map((x) => VersionGroupDetail.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"move": move.toJson(),
"version_group_details":
List<dynamic>.from(versionGroupDetails.map((x) => x.toJson())),
};
}
class VersionGroupDetail {
VersionGroupDetail({
required this.levelLearnedAt,
required this.moveLearnMethod,
required this.versionGroup,
});
final int levelLearnedAt;
final ObjectRef moveLearnMethod;
final ObjectRef versionGroup;
VersionGroupDetail copyWith({
int? levelLearnedAt,
ObjectRef? moveLearnMethod,
ObjectRef? versionGroup,
}) =>
VersionGroupDetail(
levelLearnedAt: levelLearnedAt ?? this.levelLearnedAt,
moveLearnMethod: moveLearnMethod ?? this.moveLearnMethod,
versionGroup: versionGroup ?? this.versionGroup,
);
factory VersionGroupDetail.fromRawJson(String str) =>
VersionGroupDetail.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory VersionGroupDetail.fromJson(Map<String, dynamic> json) =>
VersionGroupDetail(
levelLearnedAt: json["level_learned_at"],
moveLearnMethod: ObjectRef.fromJson(json["move_learn_method"]),
versionGroup: ObjectRef.fromJson(json["version_group"]),
);
Map<String, dynamic> toJson() => {
"level_learned_at": levelLearnedAt,
"move_learn_method": moveLearnMethod.toJson(),
"version_group": versionGroup.toJson(),
};
}
class GenerationV {
GenerationV({
required this.blackWhite,
});
final Sprites blackWhite;
GenerationV copyWith({
Sprites? blackWhite,
}) =>
GenerationV(
blackWhite: blackWhite ?? this.blackWhite,
);
factory GenerationV.fromRawJson(String str) =>
GenerationV.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationV.fromJson(Map<String, dynamic> json) => GenerationV(
blackWhite: Sprites.fromJson(json["black-white"]),
);
Map<String, dynamic> toJson() => {
"black-white": blackWhite.toJson(),
};
}
class GenerationVI {
GenerationVI({
required this.xY,
required this.omegaRubyAlphaSapphire,
});
final Sprites xY;
final Sprites omegaRubyAlphaSapphire;
GenerationVI copyWith({
Sprites? xY,
Sprites? omegaRubyAlphaSapphire,
}) =>
GenerationVI(
xY: xY ?? this.xY,
omegaRubyAlphaSapphire:
omegaRubyAlphaSapphire ?? this.omegaRubyAlphaSapphire,
);
factory GenerationVI.fromRawJson(String str) =>
GenerationVI.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationVI.fromJson(Map<String, dynamic> json) => GenerationVI(
xY: Sprites.fromJson(json["x-y"]),
omegaRubyAlphaSapphire:
Sprites.fromJson(json["omegaruby-alphasapphire"]),
);
Map<String, dynamic> toJson() => {
"x-y": xY.toJson(),
"omegaruby-alphasapphire": xY.toJson(),
};
}
class GenerationIV {
GenerationIV({
required this.diamondPearl,
required this.heartGoldSoulSilver,
required this.platinum,
});
final Sprites diamondPearl;
final Sprites heartGoldSoulSilver;
final Sprites platinum;
GenerationIV copyWith({
Sprites? diamondPearl,
Sprites? heartGoldSoulSilver,
Sprites? platinum,
}) =>
GenerationIV(
diamondPearl: diamondPearl ?? this.diamondPearl,
heartGoldSoulSilver: heartGoldSoulSilver ?? this.heartGoldSoulSilver,
platinum: platinum ?? this.platinum,
);
factory GenerationIV.fromRawJson(String str) =>
GenerationIV.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationIV.fromJson(Map<String, dynamic> json) => GenerationIV(
diamondPearl: Sprites.fromJson(json["diamond-pearl"]),
heartGoldSoulSilver: Sprites.fromJson(json["heartgold-soulsilver"]),
platinum: Sprites.fromJson(json["platinum"]),
);
Map<String, dynamic> toJson() => {
"diamond-pearl": diamondPearl.toJson(),
"heartgold-soulsilver": heartGoldSoulSilver.toJson(),
"platinum": platinum.toJson(),
};
}
class VersionSprites {
VersionSprites({
required this.generationI,
required this.generationIi,
required this.generationIii,
required this.generationIv,
required this.generationV,
required this.generationVi,
required this.generationVii,
required this.generationViii,
});
final GenerationI generationI;
final GenerationII generationIi;
final GenerationIII generationIii;
final GenerationIV generationIv;
final GenerationV generationV;
final GenerationVI generationVi;
final GenerationVII generationVii;
final GenerationVIII generationViii;
VersionSprites copyWith({
GenerationI? generationI,
GenerationII? generationIi,
GenerationIII? generationIii,
GenerationIV? generationIv,
GenerationV? generationV,
GenerationVI? generationVi,
GenerationVII? generationVii,
GenerationVIII? generationViii,
}) =>
VersionSprites(
generationI: generationI ?? this.generationI,
generationIi: generationIi ?? this.generationIi,
generationIii: generationIii ?? this.generationIii,
generationIv: generationIv ?? this.generationIv,
generationV: generationV ?? this.generationV,
generationVi: generationVi ?? this.generationVi,
generationVii: generationVii ?? this.generationVii,
generationViii: generationViii ?? this.generationViii,
);
factory VersionSprites.fromRawJson(String str) =>
VersionSprites.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory VersionSprites.fromJson(Map<String, dynamic> json) => VersionSprites(
generationI: GenerationI.fromJson(json["generation-i"]),
generationIi: GenerationII.fromJson(json["generation-ii"]),
generationIii: GenerationIII.fromJson(json["generation-iii"]),
generationIv: GenerationIV.fromJson(json["generation-iv"]),
generationV: GenerationV.fromJson(json["generation-v"]),
generationVi: GenerationVI.fromJson(json["generation-vi"]),
generationVii: GenerationVII.fromJson(json["generation-vii"]),
generationViii: GenerationVIII.fromJson(json["generation-viii"]),
);
Map<String, dynamic> toJson() => {
"generation-i": generationI.toJson(),
"generation-ii": generationIi.toJson(),
"generation-iii": generationIii.toJson(),
"generation-iv": generationIv.toJson(),
"generation-v": generationV.toJson(),
"generation-vi": generationVi.toJson(),
"generation-vii": generationVii.toJson(),
"generation-viii": generationViii.toJson(),
};
}
class Sprites {
Sprites({
required this.backDefault,
required this.backFemale,
required this.backShiny,
required this.backShinyFemale,
required this.frontDefault,
required this.frontFemale,
required this.frontShiny,
required this.frontShinyFemale,
required this.other,
required this.versions,
required this.animated,
});
final String? backDefault;
final String? backFemale;
final String? backShiny;
final String? backShinyFemale;
final String? frontDefault;
final String? frontFemale;
final String? frontShiny;
final String? frontShinyFemale;
final OtherSprites? other;
final VersionSprites? versions;
final Sprites? animated;
Sprites copyWith({
String? backDefault,
String? backFemale,
String? backShiny,
String? backShinyFemale,
String? frontDefault,
String? frontFemale,
String? frontShiny,
String? frontShinyFemale,
OtherSprites? other,
VersionSprites? versions,
Sprites? animated,
}) =>
Sprites(
backDefault: backDefault ?? this.backDefault,
backFemale: backFemale ?? this.backFemale,
backShiny: backShiny ?? this.backShiny,
backShinyFemale: backShinyFemale ?? this.backShinyFemale,
frontDefault: frontDefault ?? this.frontDefault,
frontFemale: frontFemale ?? this.frontFemale,
frontShiny: frontShiny ?? this.frontShiny,
frontShinyFemale: frontShinyFemale ?? this.frontShinyFemale,
other: other ?? this.other,
versions: versions ?? this.versions,
animated: animated ?? this.animated,
);
factory Sprites.fromRawJson(String str) => Sprites.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Sprites.fromJson(Map<String, dynamic> json) => Sprites(
backDefault: json["back_default"],
backFemale: json["back_female"],
backShiny: json["back_shiny"],
backShinyFemale: json["back_shiny_female"],
frontDefault: json["front_default"],
frontFemale: json["front_female"],
frontShiny: json["front_shiny"],
frontShinyFemale: json["front_shiny_female"],
other:
json["other"] == null ? null : OtherSprites.fromJson(json["other"]),
versions: json["versions"] == null
? null
: VersionSprites.fromJson(json["versions"]),
animated: json["animated"] == null
? null
: Sprites.fromJson(json["animated"]),
);
Map<String, dynamic> toJson() => {
"back_default": backDefault,
"back_female": backFemale,
"back_shiny": backShiny,
"back_shiny_female": backShinyFemale,
"front_default": frontDefault,
"front_female": frontFemale,
"front_shiny": frontShiny,
"front_shiny_female": frontShinyFemale,
"other": other?.toJson(),
"versions": versions?.toJson(),
"animated": animated?.toJson(),
};
}
class GenerationI {
GenerationI({
required this.redBlue,
required this.yellow,
});
final Sprites redBlue;
final Sprites yellow;
GenerationI copyWith({
Sprites? redBlue,
Sprites? yellow,
}) =>
GenerationI(
redBlue: redBlue ?? this.redBlue,
yellow: yellow ?? this.yellow,
);
factory GenerationI.fromRawJson(String str) =>
GenerationI.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationI.fromJson(Map<String, dynamic> json) => GenerationI(
redBlue: Sprites.fromJson(json["red-blue"]),
yellow: Sprites.fromJson(json["yellow"]),
);
Map<String, dynamic> toJson() => {
"red-blue": redBlue.toJson(),
"yellow": yellow.toJson(),
};
}
class GenerationII {
GenerationII({
required this.crystal,
required this.gold,
required this.silver,
});
final Sprites crystal;
final Sprites gold;
final Sprites silver;
GenerationII copyWith({
Sprites? crystal,
Sprites? gold,
Sprites? silver,
}) =>
GenerationII(
crystal: crystal ?? this.crystal,
gold: gold ?? this.gold,
silver: silver ?? this.silver,
);
factory GenerationII.fromRawJson(String str) =>
GenerationII.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationII.fromJson(Map<String, dynamic> json) => GenerationII(
crystal: Sprites.fromJson(json["crystal"]),
gold: Sprites.fromJson(json["gold"]),
silver: Sprites.fromJson(json["silver"]),
);
Map<String, dynamic> toJson() => {
"crystal": crystal.toJson(),
"gold": gold.toJson(),
"silver": silver.toJson(),
};
}
class GenerationIII {
GenerationIII({
required this.emerald,
required this.fireRedLeafGreen,
required this.rubySapphire,
});
final Sprites emerald;
final Sprites fireRedLeafGreen;
final Sprites rubySapphire;
GenerationIII copyWith({
Sprites? emerald,
Sprites? fireRedLeafGreen,
Sprites? rubySapphire,
}) =>
GenerationIII(
emerald: emerald ?? this.emerald,
fireRedLeafGreen: fireRedLeafGreen ?? this.fireRedLeafGreen,
rubySapphire: rubySapphire ?? this.rubySapphire,
);
factory GenerationIII.fromRawJson(String str) =>
GenerationIII.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationIII.fromJson(Map<String, dynamic> json) => GenerationIII(
emerald: Sprites.fromJson(json["emerald"]),
fireRedLeafGreen: Sprites.fromJson(json["firered-leafgreen"]),
rubySapphire: Sprites.fromJson(json["ruby-sapphire"]),
);
Map<String, dynamic> toJson() => {
"emerald": emerald.toJson(),
"firered-leafgreen": fireRedLeafGreen.toJson(),
"ruby-sapphire": rubySapphire.toJson(),
};
}
class GenerationVII {
GenerationVII({
required this.icons,
required this.ultraSunUltraMoon,
});
final Sprites icons;
final Sprites ultraSunUltraMoon;
GenerationVII copyWith({
Sprites? icons,
Sprites? ultraSunUltraMoon,
}) =>
GenerationVII(
icons: icons ?? this.icons,
ultraSunUltraMoon: ultraSunUltraMoon ?? this.ultraSunUltraMoon,
);
factory GenerationVII.fromRawJson(String str) =>
GenerationVII.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationVII.fromJson(Map<String, dynamic> json) => GenerationVII(
icons: Sprites.fromJson(json["icons"]),
ultraSunUltraMoon: Sprites.fromJson(json["ultra-sun-ultra-moon"]),
);
Map<String, dynamic> toJson() => {
"icons": icons.toJson(),
"ultra-sun-ultra-moon": ultraSunUltraMoon.toJson(),
};
}
class GenerationVIII {
GenerationVIII({
required this.icons,
});
final Sprites icons;
GenerationVIII copyWith({
Sprites? icons,
}) =>
GenerationVIII(
icons: icons ?? this.icons,
);
factory GenerationVIII.fromRawJson(String str) =>
GenerationVIII.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GenerationVIII.fromJson(Map<String, dynamic> json) => GenerationVIII(
icons: Sprites.fromJson(json["icons"]),
);
Map<String, dynamic> toJson() => {
"icons": icons.toJson(),
};
}
class OtherSprites {
OtherSprites({
required this.dreamWorld,
required this.home,
required this.officialArtwork,
});
final Sprites dreamWorld;
final Sprites home;
final Sprites officialArtwork;
OtherSprites copyWith({
Sprites? dreamWorld,
Sprites? home,
Sprites? officialArtwork,
}) =>
OtherSprites(
dreamWorld: dreamWorld ?? this.dreamWorld,
home: home ?? this.home,
officialArtwork: officialArtwork ?? this.officialArtwork,
);
factory OtherSprites.fromRawJson(String str) =>
OtherSprites.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory OtherSprites.fromJson(Map<String, dynamic> json) => OtherSprites(
dreamWorld: Sprites.fromJson(json["dream_world"]),
home: Sprites.fromJson(json["home"]),
officialArtwork: Sprites.fromJson(json["official-artwork"]),
);
Map<String, dynamic> toJson() => {
"dream_world": dreamWorld.toJson(),
"home": home.toJson(),
"official-artwork": officialArtwork.toJson(),
};
}
class Stat {
Stat({
required this.baseStat,
required this.effort,
required this.stat,
});
final int baseStat;
final int effort;
final ObjectRef stat;
Stat copyWith({
int? baseStat,
int? effort,
ObjectRef? stat,
}) =>
Stat(
baseStat: baseStat ?? this.baseStat,
effort: effort ?? this.effort,
stat: stat ?? this.stat,
);
factory Stat.fromRawJson(String str) => Stat.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Stat.fromJson(Map<String, dynamic> json) => Stat(
baseStat: json["base_stat"],
effort: json["effort"],
stat: ObjectRef.fromJson(json["stat"]),
);
Map<String, dynamic> toJson() => {
"base_stat": baseStat,
"effort": effort,
"stat": stat.toJson(),
};
}
class Type {
Type({
required this.slot,
required this.type,
});
final int slot;
final ObjectRef type;
Type copyWith({
int? slot,
ObjectRef? type,
}) =>
Type(
slot: slot ?? this.slot,
type: type ?? this.type,
);
factory Type.fromRawJson(String str) => Type.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Type.fromJson(Map<String, dynamic> json) => Type(
slot: json["slot"],
type: ObjectRef.fromJson(json["type"]),
);
Map<String, dynamic> toJson() => {
"slot": slot,
"type": type.toJson(),
};
}

View File

@@ -0,0 +1,38 @@
import 'package:pokemon_api/pokemon_api.dart';
import 'package:strings/strings.dart' as strings;
import '../utils/extensions/string_extensions.dart';
import '../utils/extensions/iterable_extensions.dart';
class PokemonHelper {
static String? imageUrl(Pokemon pokemon) =>
pokemon.sprites.other?.home.frontDefault ??
pokemon.sprites.frontDefault ??
pokemon.sprites.versions?.generation8.icons.frontDefault;
static String? shinyImageUrl(Pokemon pokemon) =>
pokemon.sprites.other?.home.frontShiny ??
pokemon.sprites.frontShiny ??
pokemon.sprites.versions?.generation8.icons.frontShiny;
static String displayName(PokemonSpecies pokemon) {
final speciesName = pokemon.names.firstWhereOrNull((n) => n.language.name == 'en')?.name;
return speciesName != null ? strings.capitalize(speciesName) : pokemon.name.capitalize();
}
static String? formName(Pokemon pokemon, PokemonSpecies species) {
final speciesName = species.name;
if (speciesName == pokemon.name) {
return null;
}
final form = pokemon.name.split('-').sublist(1).join(' ');
final presets = {
'gmax': 'Gygantamax',
'alola': 'Alolan',
'galar': 'Galarian',
'hisui': 'Hisuian',
};
return presets[form] ?? form.capitalize();
}
}

View File

@@ -1,447 +0,0 @@
import 'dart:convert';
import 'pokemon.dart';
class PokemonSpecies {
PokemonSpecies({
required this.baseHappiness,
required this.captureRate,
required this.color,
required this.eggGroups,
required this.evolutionChain,
required this.evolvesFromSpecies,
required this.flavorTextEntries,
required this.formDescriptions,
required this.formsSwitchable,
required this.genderRate,
required this.genera,
required this.generation,
required this.growthRate,
required this.habitat,
required this.hasGenderDifferences,
required this.hatchCounter,
required this.id,
required this.isBaby,
required this.isLegendary,
required this.isMythical,
required this.name,
required this.names,
required this.order,
required this.palParkEncounters,
required this.pokedexNumbers,
required this.shape,
required this.varieties,
});
final int? baseHappiness;
final int captureRate;
final ObjectRef color;
final List<ObjectRef> eggGroups;
final EvolutionChain? evolutionChain;
final ObjectRef? evolvesFromSpecies;
final List<FlavorTextEntry> flavorTextEntries;
final List<dynamic> formDescriptions;
final bool formsSwitchable;
final int genderRate;
final List<Genus> genera;
final ObjectRef generation;
final ObjectRef growthRate;
final ObjectRef? habitat;
final bool hasGenderDifferences;
final int? hatchCounter;
final int id;
final bool isBaby;
final bool isLegendary;
final bool isMythical;
final String name;
final List<Name> names;
final int order;
final List<PalParkEncounter> palParkEncounters;
final List<PokedexNumber> pokedexNumbers;
final ObjectRef? shape;
final List<Variety> varieties;
PokemonSpecies copyWith({
int? baseHappiness,
int? captureRate,
ObjectRef? color,
List<ObjectRef>? eggGroups,
EvolutionChain? evolutionChain,
ObjectRef? evolvesFromSpecies,
List<FlavorTextEntry>? flavorTextEntries,
List<dynamic>? formDescriptions,
bool? formsSwitchable,
int? genderRate,
List<Genus>? genera,
ObjectRef? generation,
ObjectRef? growthRate,
ObjectRef? habitat,
bool? hasGenderDifferences,
int? hatchCounter,
int? id,
bool? isBaby,
bool? isLegendary,
bool? isMythical,
String? name,
List<Name>? names,
int? order,
List<PalParkEncounter>? palParkEncounters,
List<PokedexNumber>? pokedexNumbers,
ObjectRef? shape,
List<Variety>? varieties,
}) =>
PokemonSpecies(
baseHappiness: baseHappiness ?? this.baseHappiness,
captureRate: captureRate ?? this.captureRate,
color: color ?? this.color,
eggGroups: eggGroups ?? this.eggGroups,
evolutionChain: evolutionChain ?? this.evolutionChain,
evolvesFromSpecies: evolvesFromSpecies ?? this.evolvesFromSpecies,
flavorTextEntries: flavorTextEntries ?? this.flavorTextEntries,
formDescriptions: formDescriptions ?? this.formDescriptions,
formsSwitchable: formsSwitchable ?? this.formsSwitchable,
genderRate: genderRate ?? this.genderRate,
genera: genera ?? this.genera,
generation: generation ?? this.generation,
growthRate: growthRate ?? this.growthRate,
habitat: habitat ?? this.habitat,
hasGenderDifferences: hasGenderDifferences ?? this.hasGenderDifferences,
hatchCounter: hatchCounter ?? this.hatchCounter,
id: id ?? this.id,
isBaby: isBaby ?? this.isBaby,
isLegendary: isLegendary ?? this.isLegendary,
isMythical: isMythical ?? this.isMythical,
name: name ?? this.name,
names: names ?? this.names,
order: order ?? this.order,
palParkEncounters: palParkEncounters ?? this.palParkEncounters,
pokedexNumbers: pokedexNumbers ?? this.pokedexNumbers,
shape: shape ?? this.shape,
varieties: varieties ?? this.varieties,
);
factory PokemonSpecies.fromRawJson(String str) =>
PokemonSpecies.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory PokemonSpecies.fromJson(Map<String, dynamic> json) => PokemonSpecies(
baseHappiness: json["base_happiness"],
captureRate: json["capture_rate"],
color: ObjectRef.fromJson(json["color"]),
eggGroups: List<ObjectRef>.from(
json["egg_groups"].map((x) => ObjectRef.fromJson(x))),
evolutionChain: json["evolution_chain"] != null
? EvolutionChain.fromJson(json["evolution_chain"])
: null,
evolvesFromSpecies: json["evolves_from_species"] == null
? null
: ObjectRef.fromJson(json["evolves_from_species"]),
flavorTextEntries: List<FlavorTextEntry>.from(
json["flavor_text_entries"]
.map((x) => FlavorTextEntry.fromJson(x))),
formDescriptions:
List<dynamic>.from(json["form_descriptions"].map((x) => x)),
formsSwitchable: json["forms_switchable"],
genderRate: json["gender_rate"],
genera: List<Genus>.from(json["genera"].map((x) => Genus.fromJson(x))),
generation: ObjectRef.fromJson(json["generation"]),
growthRate: ObjectRef.fromJson(json["growth_rate"]),
habitat: json["habitat"] == null
? null
: ObjectRef.fromJson(json["habitat"]),
hasGenderDifferences: json["has_gender_differences"],
hatchCounter: json["hatch_counter"],
id: json["id"],
isBaby: json["is_baby"],
isLegendary: json["is_legendary"],
isMythical: json["is_mythical"],
name: json["name"],
names: List<Name>.from(json["names"].map((x) => Name.fromJson(x))),
order: json["order"],
palParkEncounters: List<PalParkEncounter>.from(
json["pal_park_encounters"]
.map((x) => PalParkEncounter.fromJson(x))),
pokedexNumbers: List<PokedexNumber>.from(
json["pokedex_numbers"].map((x) => PokedexNumber.fromJson(x))),
shape: json["shape"] != null ? ObjectRef.fromJson(json["shape"]) : null,
varieties: List<Variety>.from(
json["varieties"].map((x) => Variety.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"base_happiness": baseHappiness,
"capture_rate": captureRate,
"color": color.toJson(),
"egg_groups": List<dynamic>.from(eggGroups.map((x) => x.toJson())),
"evolution_chain": evolutionChain?.toJson(),
"evolves_from_species": evolvesFromSpecies?.toJson(),
"flavor_text_entries":
List<dynamic>.from(flavorTextEntries.map((x) => x.toJson())),
"form_descriptions": List<dynamic>.from(formDescriptions.map((x) => x)),
"forms_switchable": formsSwitchable,
"gender_rate": genderRate,
"genera": List<dynamic>.from(genera.map((x) => x.toJson())),
"generation": generation.toJson(),
"growth_rate": growthRate.toJson(),
"habitat": habitat?.toJson(),
"has_gender_differences": hasGenderDifferences,
"hatch_counter": hatchCounter,
"id": id,
"is_baby": isBaby,
"is_legendary": isLegendary,
"is_mythical": isMythical,
"name": name,
"names": List<dynamic>.from(names.map((x) => x.toJson())),
"order": order,
"pal_park_encounters":
List<dynamic>.from(palParkEncounters.map((x) => x.toJson())),
"pokedex_numbers":
List<dynamic>.from(pokedexNumbers.map((x) => x.toJson())),
"shape": shape?.toJson(),
"varieties": List<dynamic>.from(varieties.map((x) => x.toJson())),
};
}
class EvolutionChain {
EvolutionChain({
required this.url,
});
final String url;
EvolutionChain copyWith({
String? url,
}) =>
EvolutionChain(
url: url ?? this.url,
);
factory EvolutionChain.fromRawJson(String str) =>
EvolutionChain.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory EvolutionChain.fromJson(Map<String, dynamic> json) => EvolutionChain(
url: json["url"],
);
Map<String, dynamic> toJson() => {
"url": url,
};
}
class FlavorTextEntry {
FlavorTextEntry({
required this.flavorText,
required this.language,
required this.version,
});
final String flavorText;
final ObjectRef language;
final ObjectRef version;
FlavorTextEntry copyWith({
String? flavorText,
ObjectRef? language,
ObjectRef? version,
}) =>
FlavorTextEntry(
flavorText: flavorText ?? this.flavorText,
language: language ?? this.language,
version: version ?? this.version,
);
factory FlavorTextEntry.fromRawJson(String str) =>
FlavorTextEntry.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory FlavorTextEntry.fromJson(Map<String, dynamic> json) =>
FlavorTextEntry(
flavorText: json["flavor_text"],
language: ObjectRef.fromJson(json["language"]),
version: ObjectRef.fromJson(json["version"]),
);
Map<String, dynamic> toJson() => {
"flavor_text": flavorText,
"language": language.toJson(),
"version": version.toJson(),
};
}
class Genus {
Genus({
required this.genus,
required this.language,
});
final String genus;
final ObjectRef language;
Genus copyWith({
String? genus,
ObjectRef? language,
}) =>
Genus(
genus: genus ?? this.genus,
language: language ?? this.language,
);
factory Genus.fromRawJson(String str) => Genus.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Genus.fromJson(Map<String, dynamic> json) => Genus(
genus: json["genus"],
language: ObjectRef.fromJson(json["language"]),
);
Map<String, dynamic> toJson() => {
"genus": genus,
"language": language.toJson(),
};
}
class Name {
Name({
required this.language,
required this.name,
});
final ObjectRef language;
final String name;
Name copyWith({
ObjectRef? language,
String? name,
}) =>
Name(
language: language ?? this.language,
name: name ?? this.name,
);
factory Name.fromRawJson(String str) => Name.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Name.fromJson(Map<String, dynamic> json) => Name(
language: ObjectRef.fromJson(json["language"]),
name: json["name"],
);
Map<String, dynamic> toJson() => {
"language": language.toJson(),
"name": name,
};
}
class PalParkEncounter {
PalParkEncounter({
required this.area,
required this.baseScore,
required this.rate,
});
final ObjectRef area;
final int baseScore;
final int rate;
PalParkEncounter copyWith({
ObjectRef? area,
int? baseScore,
int? rate,
}) =>
PalParkEncounter(
area: area ?? this.area,
baseScore: baseScore ?? this.baseScore,
rate: rate ?? this.rate,
);
factory PalParkEncounter.fromRawJson(String str) =>
PalParkEncounter.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory PalParkEncounter.fromJson(Map<String, dynamic> json) =>
PalParkEncounter(
area: ObjectRef.fromJson(json["area"]),
baseScore: json["base_score"],
rate: json["rate"],
);
Map<String, dynamic> toJson() => {
"area": area.toJson(),
"base_score": baseScore,
"rate": rate,
};
}
class PokedexNumber {
PokedexNumber({
required this.entryNumber,
required this.pokedex,
});
final int entryNumber;
final ObjectRef pokedex;
PokedexNumber copyWith({
int? entryNumber,
ObjectRef? pokedex,
}) =>
PokedexNumber(
entryNumber: entryNumber ?? this.entryNumber,
pokedex: pokedex ?? this.pokedex,
);
factory PokedexNumber.fromRawJson(String str) =>
PokedexNumber.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory PokedexNumber.fromJson(Map<String, dynamic> json) => PokedexNumber(
entryNumber: json["entry_number"],
pokedex: ObjectRef.fromJson(json["pokedex"]),
);
Map<String, dynamic> toJson() => {
"entry_number": entryNumber,
"pokedex": pokedex.toJson(),
};
}
class Variety {
Variety({
required this.isDefault,
required this.pokemon,
});
final bool isDefault;
final ObjectRef pokemon;
Variety copyWith({
bool? isDefault,
ObjectRef? pokemon,
}) =>
Variety(
isDefault: isDefault ?? this.isDefault,
pokemon: pokemon ?? this.pokemon,
);
factory Variety.fromRawJson(String str) => Variety.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory Variety.fromJson(Map<String, dynamic> json) => Variety(
isDefault: json["is_default"],
pokemon: ObjectRef.fromJson(json["pokemon"]),
);
Map<String, dynamic> toJson() => {
"is_default": isDefault,
"pokemon": pokemon.toJson(),
};
}

View File

@@ -0,0 +1,11 @@
import 'package:strings/strings.dart' as strings;
extension StringCapitalization on String {
String capitalize() {
return splitMapJoin(
RegExp(r'[ -]'),
onMatch: (m) => strings.capitalize(m.input.substring(m.start, m.end)),
onNonMatch: (n) => strings.capitalize(n),
);
}
}

View File

@@ -1,4 +1,9 @@
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:flutter/material.dart';
import 'package:localstore/localstore.dart';
import 'package:pokemon_api/pokemon_api.dart';
import 'package:provider/provider.dart';
import 'core/routes.dart';
@@ -6,7 +11,44 @@ import 'modules/PokemonDetails/pokemon_details_page.dart';
import 'modules/PokemonList/pokemon_list_controller.dart';
import 'modules/PokemonList/pokemon_list_page.dart';
class LocalstoreCache extends CacheManager {
static const String collection = 'cache';
String _filename(String key) => '${md5.convert(utf8.encode(key))}.json';
@override
Future<void> add(String key, value) {
return Localstore.instance.collection(collection).doc(_filename(key)).set(value);
}
@override
Future<void> clear() {
return Localstore.instance.collection(collection).delete();
}
@override
Future<bool> contains(String key) async {
return (await Localstore.instance.collection(collection).doc(_filename(key)).get()) != null;
}
@override
Future<void> fill(Map<String, dynamic> cache) {
return Future.wait(cache.entries.map((doc) => add(doc.key, doc.value)));
}
@override
Future get(String key) {
return Localstore.instance.collection(collection).doc(_filename(key)).get();
}
@override
Future<void> remove(String key) {
return Localstore.instance.collection(collection).doc(_filename(key)).delete();
}
}
void main() {
PokemonAPIClient.instance.setCache(LocalstoreCache());
runApp(const MyApp());
}
@@ -119,3 +161,4 @@ class _MyHomePageState extends State<MyHomePage> {
);
}
}

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:pokedex/core/models/pokemon_helper.dart';
import 'pokemon_details_args.dart';
import '../PokemonList/pokemon_list_controller.dart';
import '../../widgets/pokemon_image.dart';
@@ -6,18 +7,31 @@ import '../../widgets/pokemon_image.dart';
class PokemonDetailsPage extends StatelessWidget {
const PokemonDetailsPage({super.key});
PokemonDetailsArgs argsOf(BuildContext context) => PokemonDetailsArgs.of(context);
@override
Widget build(BuildContext context) {
final ctrl = PokemonListController.of(context);
final poke = ctrl.pokemonMap[PokemonDetailsArgs.of(context).name]!;
final args = argsOf(context);
final poke = ctrl.pokemonMap[args.name]!;
final species = ctrl.speciesMap[poke.species.name]!;
final children = <Widget Function()>[
() => Text(poke.displayName),
() => PokemonImage(poke: poke, size: 250),
() => Text(PokemonHelper.displayName(species)),
() => Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Hero(
tag: 'pokemon-${poke.name}',
child: PokemonImage(poke: poke, size: 250),
),
PokemonImage(poke: poke, size: 250, shiny: true),
],
),
];
return Scaffold(
appBar: AppBar(
title: Text(poke.displayName),
title: Text(PokemonHelper.displayName(species)),
),
body: ListView.builder(
itemBuilder: (context, index) => children[index].call(),
@@ -26,3 +40,4 @@ class PokemonDetailsPage extends StatelessWidget {
);
}
}

View File

@@ -1,30 +1,76 @@
import 'package:flutter/material.dart';
import 'package:pokedex/data/pokemon.dart';
import 'package:pokemon_api/pokemon_api.dart';
import 'package:provider/provider.dart';
import '../../core/models/pokemon.dart';
class PokemonListController extends ChangeNotifier {
bool loading = false;
Iterable<Pokemon> pokemonList = [];
List<Pokemon> pokemonList = [];
Map<String, Pokemon> pokemonMap = {};
List<PokemonSpecies> speciesList = [];
Map<String, PokemonSpecies> speciesMap = {};
PokemonListController() {
debugPrint('PokemonListController()');
getPokemon();
}
static PokemonListController of(BuildContext context) =>
Provider.of<PokemonListController>(context, listen: false);
static PokemonListController of(BuildContext context) => Provider.of<PokemonListController>(context, listen: false);
Future<void> getPokemon() async {
debugPrint('getPokemon()');
loading = true;
await Future.microtask(() {
pokemonMap = getAllPokemon();
pokemonList = pokemonMap.values;
});
final pokemonListResources = await PokemonAPIClient.instance.getPokemonList(PageOptions(), maxPages: null);
final pokemonSpeciesListResources =
await PokemonAPIClient.instance.getPokemonSpeciesList(PageOptions(), maxPages: null);
final pokemonFutures = <Future<Pokemon>>[];
final speciesFutures = <Future<PokemonSpecies>>[];
var i = 0;
for (final resource in pokemonListResources) {
pokemonFutures.add(resource.get());
if (i < pokemonSpeciesListResources.length) {
speciesFutures.add(pokemonSpeciesListResources[i].get());
}
if (pokemonFutures.length == 5) {
await Future.wait([
Future.wait(pokemonFutures).then((value) => pokemonList.addAll(value)),
Future.wait(speciesFutures).then((value) => speciesList.addAll(value)),
]);
pokemonFutures.clear();
speciesFutures.clear();
}
i++;
}
if (pokemonFutures.isNotEmpty) {
await Future.wait(pokemonFutures).then((value) => pokemonList.addAll(value));
}
if (speciesFutures.isNotEmpty) {
await Future.wait(speciesFutures).then((value) => speciesList.addAll(value));
}
pokemonMap = Map.fromEntries(pokemonList.map((e) => MapEntry(e.name, e)));
speciesMap = Map.fromEntries(speciesList.map((e) => MapEntry(e.name, e)));
loading = false;
notifyListeners();
}
}
class ProgressReporter {
final int total;
int count = 0;
ProgressReporter(this.total);
void increment() {
count++;
debugPrint('ProgressReporter: $count/$total');
}
bool get isDone => count >= total;
double get progress => count / total;
}

View File

@@ -1,8 +1,9 @@
import 'package:flutter/material.dart';
import 'package:pokedex/core/models/pokemon_helper.dart';
import 'package:pokedex/modules/PokemonList/pokemon_list_controller.dart';
import 'package:pokemon_api/pokemon_api.dart';
import 'package:provider/provider.dart';
import '../../core/models/pokemon.dart';
import '../../widgets/pokemon_list_item.dart';
class PokemonListPage extends StatefulWidget {
@@ -18,6 +19,8 @@ class _PokemonListPageState extends State<PokemonListPage> {
bool searching = false;
bool afterInit = false;
PokemonListController get ctrl => PokemonListController.of(context);
@override
void initState() {
super.initState();
@@ -54,27 +57,37 @@ class _PokemonListPageState extends State<PokemonListPage> {
super.dispose();
}
PokemonListController get ctrl => PokemonListController.of(context);
Iterable<Pokemon> _applyFilters(Iterable<Pokemon> list) =>
list.where((poke) => [poke.displayName, poke.formName]
.join(' ')
.toLowerCase()
.contains(search.text.toLowerCase()));
Iterable<Pokemon> _applyFilters(Iterable<Pokemon> list) => list.where((poke) {
final species = ctrl.speciesMap[poke.species.name];
return [
species != null ? PokemonHelper.displayName(species) : null,
species != null ? PokemonHelper.formName(poke, species) : null,
poke.name,
].whereType<String>().join(' ').toLowerCase().contains(search.text.toLowerCase());
});
@override
Widget build(BuildContext context) {
debugPrint("pokemon count: ${ctrl.pokemonList.length}");
return Scaffold(
appBar: AppBar(
title: searching
? TextField(
controller: search,
decoration: const InputDecoration(hintText: 'Search by name'),
autofocus: true,
)
: const Text('Pokedex')),
title: searching
? TextField(
controller: search,
decoration: InputDecoration(
hintText: 'Search by name',
suffixIcon: search.text.isNotEmpty
? IconButton(
icon: const Icon(Icons.close),
onPressed: () => search.clear(),
)
: null,
),
autofocus: true,
)
: const Text('Pokedex'),
),
floatingActionButton: FloatingActionButton(
// child: const Icon(Icons.catching_pokemon),
child: const Icon(Icons.search),
onPressed: () => setState(() => searching = !searching),
),
@@ -99,3 +112,4 @@ class _PokemonListPageState extends State<PokemonListPage> {
);
}
}

View File

@@ -1,22 +1,24 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import '../core/models/pokemon.dart';
import 'package:pokedex/core/models/pokemon_helper.dart';
import 'package:pokemon_api/pokemon_api.dart';
class PokemonImage extends StatelessWidget {
const PokemonImage({
super.key,
this.size = 64,
required this.poke,
this.shiny = false,
});
final Pokemon poke;
final double size;
final bool shiny;
@override
Widget build(BuildContext context) {
return CachedNetworkImage(
imageUrl: poke.imageUrl!,
imageUrl: !shiny ? PokemonHelper.imageUrl(poke)! : PokemonHelper.shinyImageUrl(poke)!,
width: size,
height: size,
progressIndicatorBuilder: (context, url, progress) => const Center(
@@ -26,3 +28,4 @@ class PokemonImage extends StatelessWidget {
);
}
}

View File

@@ -1,9 +1,11 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:pokedex/core/models/pokemon_helper.dart';
import 'package:pokedex/core/routes.dart';
import 'package:pokedex/core/utils/extensions/string_extensions.dart';
import 'package:pokedex/modules/PokemonDetails/pokemon_details_args.dart';
import 'package:pokemon_api/pokemon_api.dart';
import '../core/models/pokemon.dart';
import '../core/routes.dart';
import '../modules/PokemonList/pokemon_list_controller.dart';
import 'pokemon_image.dart';
class PokemonListItem extends StatelessWidget {
@@ -16,6 +18,8 @@ class PokemonListItem extends StatelessWidget {
@override
Widget build(BuildContext context) {
final species = PokemonListController.of(context).speciesMap[poke.species.name];
print('poke: ${poke.name}, species: ${species?.name}');
return Card(
child: InkWell(
onTap: () => Navigator.pushNamed(
@@ -27,18 +31,19 @@ class PokemonListItem extends StatelessWidget {
children: [
Padding(
padding: const EdgeInsets.all(8).copyWith(top: 0),
child: poke.imageUrl != null
? SizedBox.square(
dimension: 64,
child: PokemonImage(poke: poke, size: 64),
)
: const SizedBox.square(dimension: 64),
child: Hero(
tag: 'pokemon-${poke.name}',
child: PokemonImage(poke: poke, size: 64),
// child: poke != null
// ? PokemonImage(poke: poke, size: 64)
// : const SizedBox.square(dimension: 64, child: Placeholder()),
),
),
const SizedBox(width: 8),
Text(
[
poke.displayName,
poke.formName != null ? '(${poke.formName})' : null,
species != null ? PokemonHelper.displayName(species) : poke.name.capitalize(),
species != null && PokemonHelper.formName(poke, species) != null ? '(${PokemonHelper.formName(poke, species)})' : null,
].whereType<String>().join(' '),
style: Theme.of(context).textTheme.titleMedium,
),
@@ -48,3 +53,4 @@ class PokemonListItem extends StatelessWidget {
);
}
}

View File

@@ -8,8 +8,6 @@ import Foundation
import cloud_firestore
import firebase_auth
import firebase_core
import firebase_crashlytics
import firebase_remote_config
import path_provider_macos
import shared_preferences_macos
import sign_in_with_apple
@@ -20,8 +18,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin"))
FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseCrashlyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCrashlyticsPlugin"))
FLTFirebaseRemoteConfigPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseRemoteConfigPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SignInWithApplePlugin.register(with: registry.registrar(forPlugin: "SignInWithApplePlugin"))

View File

@@ -1,4 +1,4 @@
platform :osx, '10.13'
platform :osx, '10.14'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@@ -602,65 +602,40 @@ PODS:
- BoringSSL-GRPC/Implementation (0.0.24):
- BoringSSL-GRPC/Interface (= 0.0.24)
- BoringSSL-GRPC/Interface (0.0.24)
- cloud_firestore (4.1.0):
- Firebase/CoreOnly (~> 10.2.0)
- Firebase/Firestore (~> 10.2.0)
- cloud_firestore (4.2.0):
- Firebase/CoreOnly (~> 10.3.0)
- Firebase/Firestore (~> 10.3.0)
- firebase_core
- FlutterMacOS
- nanopb (< 2.30910.0, >= 2.30908.0)
- Firebase/Auth (10.2.0):
- Firebase/Auth (10.3.0):
- Firebase/CoreOnly
- FirebaseAuth (~> 10.2.0)
- Firebase/CoreOnly (10.2.0):
- FirebaseCore (= 10.2.0)
- Firebase/Crashlytics (10.2.0):
- FirebaseAuth (~> 10.3.0)
- Firebase/CoreOnly (10.3.0):
- FirebaseCore (= 10.3.0)
- Firebase/Firestore (10.3.0):
- Firebase/CoreOnly
- FirebaseCrashlytics (~> 10.2.0)
- Firebase/Firestore (10.2.0):
- Firebase/CoreOnly
- FirebaseFirestore (~> 10.2.0)
- Firebase/RemoteConfig (10.2.0):
- Firebase/CoreOnly
- FirebaseRemoteConfig (~> 10.2.0)
- firebase_auth (4.1.5):
- Firebase/Auth (~> 10.2.0)
- Firebase/CoreOnly (~> 10.2.0)
- FirebaseFirestore (~> 10.3.0)
- firebase_auth (4.2.0):
- Firebase/Auth (~> 10.3.0)
- Firebase/CoreOnly (~> 10.3.0)
- firebase_core
- FlutterMacOS
- firebase_core (2.3.0):
- Firebase/CoreOnly (~> 10.2.0)
- firebase_core (2.4.0):
- Firebase/CoreOnly (~> 10.3.0)
- FlutterMacOS
- firebase_crashlytics (3.0.6):
- Firebase/CoreOnly (~> 10.2.0)
- Firebase/Crashlytics (~> 10.2.0)
- firebase_core
- FlutterMacOS
- firebase_remote_config (3.0.6):
- Firebase/CoreOnly (~> 10.2.0)
- Firebase/RemoteConfig (~> 10.2.0)
- firebase_core
- FlutterMacOS
- FirebaseABTesting (10.3.0):
- FirebaseCore (~> 10.0)
- FirebaseAuth (10.2.0):
- FirebaseAuth (10.3.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
- GoogleUtilities/Environment (~> 7.8)
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
- FirebaseCore (10.2.0):
- FirebaseCore (10.3.0):
- FirebaseCoreInternal (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/Logger (~> 7.8)
- FirebaseCoreInternal (10.3.0):
- FirebaseCoreInternal (10.11.0):
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FirebaseCrashlytics (10.2.0):
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleDataTransport (~> 9.2)
- GoogleUtilities/Environment (~> 7.8)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (~> 2.1)
- FirebaseFirestore (10.2.0):
- FirebaseFirestore (10.3.0):
- abseil/algorithm (~> 1.20211102.0)
- abseil/base (~> 1.20211102.0)
- abseil/container/flat_hash_map (~> 1.20211102.0)
@@ -673,41 +648,24 @@ PODS:
- "gRPC-C++ (~> 1.44.0)"
- leveldb-library (~> 1.22)
- nanopb (< 2.30910.0, >= 2.30908.0)
- FirebaseInstallations (10.3.0):
- FirebaseCore (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- GoogleUtilities/UserDefaults (~> 7.8)
- PromisesObjC (~> 2.1)
- FirebaseRemoteConfig (10.2.0):
- FirebaseABTesting (~> 10.0)
- FirebaseCore (~> 10.0)
- FirebaseInstallations (~> 10.0)
- GoogleUtilities/Environment (~> 7.8)
- "GoogleUtilities/NSData+zlib (~> 7.8)"
- FlutterMacOS (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- GoogleDataTransport (9.2.0):
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
- GoogleUtilities/AppDelegateSwizzler (7.11.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.10.0):
- GoogleUtilities/Environment (7.11.1):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/Logger (7.10.0):
- GoogleUtilities/Logger (7.11.1):
- GoogleUtilities/Environment
- GoogleUtilities/Network (7.10.0):
- GoogleUtilities/Network (7.11.1):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.10.0)"
- GoogleUtilities/Reachability (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (7.10.0):
- "GoogleUtilities/NSData+zlib (7.11.1)"
- GoogleUtilities/Reachability (7.11.1):
- GoogleUtilities/Logger
- "gRPC-C++ (1.44.0)":
- "gRPC-C++/Implementation (= 1.44.0)"
@@ -760,8 +718,8 @@ PODS:
- gRPC-Core/Interface (= 1.44.0)
- Libuv-gRPC (= 0.0.10)
- gRPC-Core/Interface (1.44.0)
- GTMSessionFetcher/Core (3.0.0)
- leveldb-library (1.22.1)
- GTMSessionFetcher/Core (3.1.1)
- leveldb-library (1.22.2)
- Libuv-gRPC (0.0.10):
- Libuv-gRPC/Implementation (= 0.0.10)
- Libuv-gRPC/Interface (= 0.0.10)
@@ -775,7 +733,7 @@ PODS:
- nanopb/encode (2.30909.0)
- path_provider_macos (0.0.1):
- FlutterMacOS
- PromisesObjC (2.1.1)
- PromisesObjC (2.2.0)
- shared_preferences_macos (0.0.1):
- FlutterMacOS
- sign_in_with_apple (0.0.1):
@@ -790,8 +748,6 @@ DEPENDENCIES:
- cloud_firestore (from `Flutter/ephemeral/.symlinks/plugins/cloud_firestore/macos`)
- firebase_auth (from `Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos`)
- firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`)
- firebase_crashlytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_crashlytics/macos`)
- firebase_remote_config (from `Flutter/ephemeral/.symlinks/plugins/firebase_remote_config/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`)
- shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`)
@@ -804,16 +760,11 @@ SPEC REPOS:
- abseil
- BoringSSL-GRPC
- Firebase
- FirebaseABTesting
- FirebaseAuth
- FirebaseCore
- FirebaseCoreInternal
- FirebaseCrashlytics
- FirebaseFirestore
- FirebaseInstallations
- FirebaseRemoteConfig
- FMDB
- GoogleDataTransport
- GoogleUtilities
- "gRPC-C++"
- gRPC-Core
@@ -830,10 +781,6 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos
firebase_core:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos
firebase_crashlytics:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_crashlytics/macos
firebase_remote_config:
:path: Flutter/ephemeral/.symlinks/plugins/firebase_remote_config/macos
FlutterMacOS:
:path: Flutter/ephemeral
path_provider_macos:
@@ -850,37 +797,30 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
abseil: ebe5b5529fb05d93a8bdb7951607be08b7fa71bc
BoringSSL-GRPC: 3175b25143e648463a56daeaaa499c6cb86dad33
cloud_firestore: 5bfd8f92a2f11f9d25a0ee69303ca069cadc7637
Firebase: a3ea7eba4382afd83808376edb99acdaff078dcf
firebase_auth: 89ed93a8d1d8f657fec8fe149bdeeb02e55c92d4
firebase_core: f6f75d92dcdd5ef1b43876017affde02b7b402ec
firebase_crashlytics: e8ef15b4479fcdff5b4e4e2bec9e503a3a0c1a19
firebase_remote_config: 6ab273e930bca58db45485074073e54ea6173860
FirebaseABTesting: e6660693429b4663573c82f8d2f1041deff1753a
FirebaseAuth: 08e7739244eeae5216d0a3f8d9f16a76be9c252e
FirebaseCore: 813838072b797b64f529f3c2ee35e696e5641dd1
FirebaseCoreInternal: 29b76f784d607df8b2a1259d73c3f04f1210137b
FirebaseCrashlytics: df7406152189d48346deafb716806d7bd9ebb573
FirebaseFirestore: bda7a1ca8c19319a2acd2761cd4b962022c1d5ea
FirebaseInstallations: e2f26126089dcf41e215f7b8925af8d953c7d602
FirebaseRemoteConfig: 5bdeadd64a042dad0f6a38fee7e017818240c3d2
FlutterMacOS: 85f90bfb3f1703249cf1539e4dfbff31e8584698
cloud_firestore: 9d2cc3475f9f2f3cbb7099c8c17bc7e23fccfbf2
Firebase: f92fc551ead69c94168d36c2b26188263860acd9
firebase_auth: 845851827499eb92e56bed878ff756ae75c0324e
firebase_core: 7bd6c8dabdeba26600cf939a5f59b20e78156d7c
FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6
FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
FirebaseCoreInternal: 9e46c82a14a3b3a25be4e1e151ce6d21536b89c0
FirebaseFirestore: 244f71ff14ef44f39e00b44d356eac708ce03103
FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
GoogleUtilities: 9aa0ad5a7bc171f8bae016300bfcfa3fb8425749
"gRPC-C++": 9675f953ace2b3de7c506039d77be1f2e77a8db2
gRPC-Core: 943e491cb0d45598b0b0eb9e910c88080369290b
GTMSessionFetcher: c1edebe64e9fb4e8f6415d018edf1fd3eac074a1
leveldb-library: 50c7b45cbd7bf543c81a468fe557a16ae3db8729
GTMSessionFetcher: e8647203b65cee28c5f73d0f473d096653945e72
leveldb-library: f03246171cce0484482ec291f88b6d563699ee06
Libuv-gRPC: 55e51798e14ef436ad9bc45d12d43b77b49df378
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
path_provider_macos: 3c0c3b4b0d4a76d2bf989a913c2de869c5641a19
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
shared_preferences_macos: a64dc611287ed6cbe28fd1297898db1336975727
sign_in_with_apple: a9e97e744e8edc36aefc2723111f652102a7a727
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9
PODFILE CHECKSUM: a884f6dd3f7494f3892ee6c81feea3a3abbf9153
PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
COCOAPODS: 1.11.3

View File

@@ -21,6 +21,7 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
1E595A3214DA9687C2EEDD33 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 759A7BFF29CB8253C577BDA3 /* GoogleService-Info.plist */; };
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
@@ -68,6 +69,7 @@
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
69925F0F6FF72430A287E27B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
759A7BFF29CB8253C577BDA3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; };
75CA243D7B808268DDE27297 /* 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 = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
@@ -106,6 +108,7 @@
33CC10EE2044A3C60003C045 /* Products */,
D73912EC22F37F3D000D13A0 /* Frameworks */,
FCCE5DF74820964B24566096 /* Pods */,
759A7BFF29CB8253C577BDA3 /* GoogleService-Info.plist */,
);
sourceTree = "<group>";
};
@@ -167,7 +170,6 @@
75CA243D7B808268DDE27297 /* Pods-Runner.release.xcconfig */,
A68B3A09A66BCC18FAA0BF11 /* Pods-Runner.profile.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
@@ -185,6 +187,7 @@
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
A09979528FB9ECC4475F5769 /* [CP] Embed Pods Frameworks */,
701C8C718B7F59663EA21B6A /* [firebase_crashlytics] Crashlytics Upload Symbols (disabled) */,
);
buildRules = (
);
@@ -203,7 +206,7 @@
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0920;
LastUpgradeCheck = 1300;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
33CC10EC2044A3C60003C045 = {
@@ -248,6 +251,7 @@
files = (
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
1E595A3214DA9687C2EEDD33 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -314,6 +318,26 @@
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;
};
701C8C718B7F59663EA21B6A /* [firebase_crashlytics] Crashlytics Upload Symbols (disabled) */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}\"",
"\"$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)\"",
);
name = "[firebase_crashlytics] Crashlytics Upload Symbols (disabled)";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "# \"$PODS_ROOT/FirebaseCrashlytics/upload-symbols\" --flutter-project \"$PROJECT_DIR/firebase_app_id_file.json\" \n";
};
A09979528FB9ECC4475F5769 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -405,7 +429,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
@@ -484,7 +508,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
@@ -531,7 +555,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.13;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
LastUpgradeVersion = "1430"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

File diff suppressed because it is too large Load Diff

View File

@@ -37,8 +37,8 @@ dependencies:
cupertino_icons: ^1.0.2
firebase_core: ^2.3.0
cloud_firestore: ^4.1.0
firebase_crashlytics: ^3.0.6
firebase_remote_config: ^3.0.6
# firebase_crashlytics: ^3.0.6
# firebase_remote_config: ^3.0.6
firebase_auth: ^4.1.5
provider: ^6.0.4
shared_preferences: ^2.0.15
@@ -51,6 +51,15 @@ dependencies:
intl_generator: ^0.4.0
sqflite: ^2.2.2
strings: ^0.2.2
palette_generator: ^0.3.3+2
# pokemon_api:
# git:
# url: https://github.com/chenasraf/pokemon_api_dart.git
# ref: master
pokemon_api:
path: ../pokemon_api
localstore: ^1.3.5
crypto: ^3.0.3
dev_dependencies:
flutter_test:
@@ -66,6 +75,7 @@ dev_dependencies:
# rules and activating additional ones.
flutter_lints: ^2.0.0
queue: ^3.1.0+2
btool: ^0.1.2
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
@@ -117,7 +127,7 @@ script_runner:
- name: get-name
cmd: dart run btool get packageName
suppress_header_output: true
- push: 'version=$(get-version); name=$(get-name); echo "Pushing ${name}-$version.apk"; adb push build/app/outputs/flutter-apk/app-release.apk /sdcard/Download/${name}-${version}.apk'
- push: 'version=$(get-version); name=$(get-name); echo "Pushing ${name}-$version.apk"; adb push "build/app/outputs/flutter-apk/app-release.apk" "/sdcard/Download/${name}-${version}.apk"'
- install: adb install -r build/app/outputs/flutter-apk/app-release.apk
- to-device: build:apk && push && install
- auto-fix: dart fix --apply