Compare commits
132 Commits
RESET_PASS
...
master
After Width: | Height: | Size: 162 KiB |
After Width: | Height: | Size: 844 KiB |
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"projects": {
|
||||||
|
"default": "justmusic-435d5"
|
||||||
|
}
|
||||||
|
}
|
@ -1,30 +1,45 @@
|
|||||||
# This file tracks properties of this Flutter project.
|
# This file tracks properties of this Flutter project.
|
||||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||||
#
|
#
|
||||||
# This file should be version controlled.
|
# This file should be version controlled and should not be manually edited.
|
||||||
|
|
||||||
version:
|
version:
|
||||||
revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
revision: "db7ef5bf9f59442b0e200a90587e8fa5e0c6336a"
|
||||||
channel: stable
|
channel: "stable"
|
||||||
|
|
||||||
project_type: app
|
project_type: app
|
||||||
|
|
||||||
# Tracks metadata for the flutter migrate command
|
# Tracks metadata for the flutter migrate command
|
||||||
migration:
|
migration:
|
||||||
platforms:
|
platforms:
|
||||||
- platform: root
|
- platform: root
|
||||||
create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
- platform: android
|
- platform: android
|
||||||
create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
|
- platform: ios
|
||||||
# User provided section
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
# List of Local paths (relative to this file) that should be
|
- platform: linux
|
||||||
# ignored by the migrate tool.
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
#
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
# Files that are not part of the templates will be ignored by default.
|
- platform: macos
|
||||||
unmanaged_files:
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
- 'lib/main.dart'
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
- 'ios/Runner.xcodeproj/project.pbxproj'
|
- platform: web
|
||||||
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
|
- platform: windows
|
||||||
|
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
|
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||||
|
|
||||||
|
# User provided section
|
||||||
|
|
||||||
|
# List of Local paths (relative to this file) that should be
|
||||||
|
# ignored by the migrate tool.
|
||||||
|
#
|
||||||
|
# Files that are not part of the templates will be ignored by default.
|
||||||
|
unmanaged_files:
|
||||||
|
- 'lib/main.dart'
|
||||||
|
- 'ios/Runner.xcodeproj/project.pbxproj'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.example.justmusic
|
package com.justdev.justmusic
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 9.2 KiB |
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"hosting": {
|
||||||
|
"site": "justmusic-435d5",
|
||||||
|
"public": "build/web",
|
||||||
|
"ignore": [
|
||||||
|
"firebase.json",
|
||||||
|
"**/.*",
|
||||||
|
"**/node_modules/**"
|
||||||
|
],
|
||||||
|
"rewrites": [
|
||||||
|
{
|
||||||
|
"source": "**",
|
||||||
|
"destination": "/index.html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -1 +1,2 @@
|
|||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||||
#include "Generated.xcconfig"
|
#include "Generated.xcconfig"
|
||||||
|
@ -1 +1,2 @@
|
|||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||||
#include "Generated.xcconfig"
|
#include "Generated.xcconfig"
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
# Uncomment this line to define a global platform for your project
|
||||||
|
platform :ios, '11.0'
|
||||||
|
|
||||||
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|
||||||
|
project 'Runner', {
|
||||||
|
'Debug' => :debug,
|
||||||
|
'Profile' => :release,
|
||||||
|
'Release' => :release,
|
||||||
|
}
|
||||||
|
|
||||||
|
def flutter_root
|
||||||
|
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
|
||||||
|
unless File.exist?(generated_xcode_build_settings_path)
|
||||||
|
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
|
||||||
|
end
|
||||||
|
|
||||||
|
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||||
|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||||
|
return matches[1].strip if matches
|
||||||
|
end
|
||||||
|
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
|
||||||
|
end
|
||||||
|
|
||||||
|
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||||
|
|
||||||
|
flutter_ios_podfile_setup
|
||||||
|
|
||||||
|
target 'Runner' do
|
||||||
|
use_frameworks!
|
||||||
|
use_modular_headers!
|
||||||
|
|
||||||
|
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
|
||||||
|
target 'RunnerTests' do
|
||||||
|
inherit! :search_paths
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
post_install do |installer|
|
||||||
|
installer.pods_project.targets.each do |target|
|
||||||
|
flutter_additional_ios_build_settings(target)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,958 @@
|
|||||||
|
PODS:
|
||||||
|
- abseil/algorithm (1.20220623.0):
|
||||||
|
- abseil/algorithm/algorithm (= 1.20220623.0)
|
||||||
|
- abseil/algorithm/container (= 1.20220623.0)
|
||||||
|
- abseil/algorithm/algorithm (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/algorithm/container (1.20220623.0):
|
||||||
|
- abseil/algorithm/algorithm
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/base (1.20220623.0):
|
||||||
|
- abseil/base/atomic_hook (= 1.20220623.0)
|
||||||
|
- abseil/base/base (= 1.20220623.0)
|
||||||
|
- abseil/base/base_internal (= 1.20220623.0)
|
||||||
|
- abseil/base/config (= 1.20220623.0)
|
||||||
|
- abseil/base/core_headers (= 1.20220623.0)
|
||||||
|
- abseil/base/dynamic_annotations (= 1.20220623.0)
|
||||||
|
- abseil/base/endian (= 1.20220623.0)
|
||||||
|
- abseil/base/errno_saver (= 1.20220623.0)
|
||||||
|
- abseil/base/fast_type_id (= 1.20220623.0)
|
||||||
|
- abseil/base/log_severity (= 1.20220623.0)
|
||||||
|
- abseil/base/malloc_internal (= 1.20220623.0)
|
||||||
|
- abseil/base/prefetch (= 1.20220623.0)
|
||||||
|
- abseil/base/pretty_function (= 1.20220623.0)
|
||||||
|
- abseil/base/raw_logging_internal (= 1.20220623.0)
|
||||||
|
- abseil/base/spinlock_wait (= 1.20220623.0)
|
||||||
|
- abseil/base/strerror (= 1.20220623.0)
|
||||||
|
- abseil/base/throw_delegate (= 1.20220623.0)
|
||||||
|
- abseil/base/atomic_hook (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/base (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/base/config (1.20220623.0)
|
||||||
|
- abseil/base/core_headers (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/dynamic_annotations (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/endian (1.20220623.0):
|
||||||
|
- abseil/base/base
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/errno_saver (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/fast_type_id (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/log_severity (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/malloc_internal (1.20220623.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/prefetch (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/pretty_function (1.20220623.0)
|
||||||
|
- abseil/base/raw_logging_internal (1.20220623.0):
|
||||||
|
- abseil/base/atomic_hook
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/errno_saver
|
||||||
|
- abseil/base/log_severity
|
||||||
|
- abseil/base/spinlock_wait (1.20220623.0):
|
||||||
|
- abseil/base/base_internal
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/errno_saver
|
||||||
|
- abseil/base/strerror (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/errno_saver
|
||||||
|
- abseil/base/throw_delegate (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/cleanup/cleanup (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/cleanup/cleanup_internal
|
||||||
|
- abseil/cleanup/cleanup_internal (1.20220623.0):
|
||||||
|
- abseil/base/base_internal
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/container/common (1.20220623.0):
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/types/optional
|
||||||
|
- abseil/container/compressed_tuple (1.20220623.0):
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/container/container_memory (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/memory/memory
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/container/fixed_array (1.20220623.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.20220623.0):
|
||||||
|
- abseil/algorithm/container
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/container/container_memory
|
||||||
|
- abseil/container/hash_function_defaults
|
||||||
|
- abseil/container/raw_hash_map
|
||||||
|
- abseil/memory/memory
|
||||||
|
- abseil/container/flat_hash_set (1.20220623.0):
|
||||||
|
- abseil/algorithm/container
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/container/container_memory
|
||||||
|
- abseil/container/hash_function_defaults
|
||||||
|
- abseil/container/raw_hash_set
|
||||||
|
- abseil/memory/memory
|
||||||
|
- abseil/container/hash_function_defaults (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/hash/hash
|
||||||
|
- abseil/strings/cord
|
||||||
|
- abseil/strings/strings
|
||||||
|
- abseil/container/hash_policy_traits (1.20220623.0):
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/container/hashtable_debug_hooks (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/container/hashtablez_sampler (1.20220623.0):
|
||||||
|
- abseil/base/base
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/debugging/stacktrace
|
||||||
|
- abseil/memory/memory
|
||||||
|
- abseil/profiling/exponential_biased
|
||||||
|
- abseil/profiling/sample_recorder
|
||||||
|
- abseil/synchronization/synchronization
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/container/inlined_vector (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/container/compressed_tuple
|
||||||
|
- abseil/memory/memory
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/types/span
|
||||||
|
- abseil/container/layout (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/throw_delegate
|
||||||
|
- abseil/container/container_memory
|
||||||
|
- abseil/container/raw_hash_set
|
||||||
|
- abseil/container/raw_hash_set (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/endian
|
||||||
|
- abseil/base/prefetch
|
||||||
|
- 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/memory/memory
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/debugging/debugging_internal (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/base
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/debugging/stacktrace (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/debugging/debugging_internal
|
||||||
|
- abseil/debugging/symbolize (1.20220623.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/any_invocable (1.20220623.0):
|
||||||
|
- abseil/base/base_internal
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/functional/bind_front (1.20220623.0):
|
||||||
|
- abseil/base/base_internal
|
||||||
|
- abseil/container/compressed_tuple
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/functional/function_ref (1.20220623.0):
|
||||||
|
- abseil/base/base_internal
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/hash/city (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/endian
|
||||||
|
- abseil/hash/hash (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/endian
|
||||||
|
- abseil/container/fixed_array
|
||||||
|
- abseil/functional/function_ref
|
||||||
|
- 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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/endian
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/numeric/int128
|
||||||
|
- abseil/memory (1.20220623.0):
|
||||||
|
- abseil/memory/memory (= 1.20220623.0)
|
||||||
|
- abseil/memory/memory (1.20220623.0):
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/meta (1.20220623.0):
|
||||||
|
- abseil/meta/type_traits (= 1.20220623.0)
|
||||||
|
- abseil/meta/type_traits (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/numeric/bits (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/numeric/int128 (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/numeric/representation (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/profiling/exponential_biased (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/profiling/sample_recorder (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/synchronization/synchronization
|
||||||
|
- abseil/time/time
|
||||||
|
- abseil/random/distributions (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/fast_type_id
|
||||||
|
- abseil/utility/utility
|
||||||
|
- abseil/random/internal/fast_uniform_bits (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/random/internal/traits
|
||||||
|
- abseil/random/internal/fastmath (1.20220623.0):
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/random/internal/generate_real (1.20220623.0):
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/random/internal/fastmath
|
||||||
|
- abseil/random/internal/traits
|
||||||
|
- abseil/random/internal/iostream_state_saver (1.20220623.0):
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/numeric/int128
|
||||||
|
- abseil/random/internal/nonsecure_base (1.20220623.0):
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/container/inlined_vector
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/random/internal/pool_urbg
|
||||||
|
- abseil/random/internal/salted_seed_seq
|
||||||
|
- abseil/random/internal/seed_material
|
||||||
|
- abseil/types/span
|
||||||
|
- abseil/random/internal/pcg_engine (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/random/internal/pool_urbg (1.20220623.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.20220623.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.20220623.0):
|
||||||
|
- abseil/base/endian
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/random/internal/iostream_state_saver
|
||||||
|
- abseil/random/internal/randen
|
||||||
|
- abseil/random/internal/randen_hwaes (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/random/internal/platform
|
||||||
|
- abseil/random/internal/randen_hwaes_impl
|
||||||
|
- abseil/random/internal/randen_hwaes_impl (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/numeric/int128
|
||||||
|
- abseil/random/internal/platform
|
||||||
|
- abseil/random/internal/randen_slow (1.20220623.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.20220623.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.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/numeric/int128
|
||||||
|
- abseil/random/internal/uniform_helper (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/numeric/int128
|
||||||
|
- abseil/random/internal/traits
|
||||||
|
- abseil/random/internal/wide_multiply (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/numeric/bits
|
||||||
|
- abseil/numeric/int128
|
||||||
|
- abseil/random/internal/traits
|
||||||
|
- abseil/random/random (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/random/seed_sequences (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- 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.20220623.0):
|
||||||
|
- abseil/base/atomic_hook
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/base/strerror
|
||||||
|
- 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.20220623.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.20220623.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/numeric/bits
|
||||||
|
- 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/types/span
|
||||||
|
- abseil/strings/cord_internal (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/profiling/exponential_biased
|
||||||
|
- abseil/strings/cordz_handle (1.20220623.0):
|
||||||
|
- abseil/base/base
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/synchronization/synchronization
|
||||||
|
- abseil/strings/cordz_info (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/strings/cordz_update_tracker
|
||||||
|
- abseil/strings/cordz_update_scope (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/strings/internal (1.20220623.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.20220623.0):
|
||||||
|
- abseil/strings/str_format_internal
|
||||||
|
- abseil/strings/str_format_internal (1.20220623.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/utility/utility
|
||||||
|
- abseil/strings/strings (1.20220623.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.20220623.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.20220623.0):
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/time/time
|
||||||
|
- abseil/synchronization/synchronization (1.20220623.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.20220623.0):
|
||||||
|
- abseil/time/internal (= 1.20220623.0)
|
||||||
|
- abseil/time/time (= 1.20220623.0)
|
||||||
|
- abseil/time/internal (1.20220623.0):
|
||||||
|
- abseil/time/internal/cctz (= 1.20220623.0)
|
||||||
|
- abseil/time/internal/cctz (1.20220623.0):
|
||||||
|
- abseil/time/internal/cctz/civil_time (= 1.20220623.0)
|
||||||
|
- abseil/time/internal/cctz/time_zone (= 1.20220623.0)
|
||||||
|
- abseil/time/internal/cctz/civil_time (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/time/internal/cctz/time_zone (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/time/internal/cctz/civil_time
|
||||||
|
- abseil/time/time (1.20220623.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.20220623.0):
|
||||||
|
- abseil/types/any (= 1.20220623.0)
|
||||||
|
- abseil/types/bad_any_cast (= 1.20220623.0)
|
||||||
|
- abseil/types/bad_any_cast_impl (= 1.20220623.0)
|
||||||
|
- abseil/types/bad_optional_access (= 1.20220623.0)
|
||||||
|
- abseil/types/bad_variant_access (= 1.20220623.0)
|
||||||
|
- abseil/types/compare (= 1.20220623.0)
|
||||||
|
- abseil/types/optional (= 1.20220623.0)
|
||||||
|
- abseil/types/span (= 1.20220623.0)
|
||||||
|
- abseil/types/variant (= 1.20220623.0)
|
||||||
|
- abseil/types/any (1.20220623.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.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/types/bad_any_cast_impl
|
||||||
|
- abseil/types/bad_any_cast_impl (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/types/bad_optional_access (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/types/bad_variant_access (1.20220623.0):
|
||||||
|
- abseil/base/config
|
||||||
|
- abseil/base/raw_logging_internal
|
||||||
|
- abseil/types/compare (1.20220623.0):
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/types/optional (1.20220623.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.20220623.0):
|
||||||
|
- abseil/algorithm/algorithm
|
||||||
|
- abseil/base/core_headers
|
||||||
|
- abseil/base/throw_delegate
|
||||||
|
- abseil/meta/type_traits
|
||||||
|
- abseil/types/variant (1.20220623.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.20220623.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
|
||||||
|
- audioplayers_darwin (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- 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.8.4):
|
||||||
|
- Firebase/Firestore (= 10.12.0)
|
||||||
|
- firebase_core
|
||||||
|
- Flutter
|
||||||
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
|
- Firebase/Auth (10.12.0):
|
||||||
|
- Firebase/CoreOnly
|
||||||
|
- FirebaseAuth (~> 10.12.0)
|
||||||
|
- Firebase/CoreOnly (10.12.0):
|
||||||
|
- FirebaseCore (= 10.12.0)
|
||||||
|
- Firebase/Firestore (10.12.0):
|
||||||
|
- Firebase/CoreOnly
|
||||||
|
- FirebaseFirestore (~> 10.12.0)
|
||||||
|
- Firebase/Messaging (10.12.0):
|
||||||
|
- Firebase/CoreOnly
|
||||||
|
- FirebaseMessaging (~> 10.12.0)
|
||||||
|
- Firebase/Storage (10.12.0):
|
||||||
|
- Firebase/CoreOnly
|
||||||
|
- FirebaseStorage (~> 10.12.0)
|
||||||
|
- firebase_auth (4.7.2):
|
||||||
|
- Firebase/Auth (= 10.12.0)
|
||||||
|
- firebase_core
|
||||||
|
- Flutter
|
||||||
|
- firebase_core (2.15.0):
|
||||||
|
- Firebase/CoreOnly (= 10.12.0)
|
||||||
|
- Flutter
|
||||||
|
- firebase_messaging (14.6.5):
|
||||||
|
- Firebase/Messaging (= 10.12.0)
|
||||||
|
- firebase_core
|
||||||
|
- Flutter
|
||||||
|
- firebase_storage (11.2.5):
|
||||||
|
- Firebase/Storage (= 10.12.0)
|
||||||
|
- firebase_core
|
||||||
|
- Flutter
|
||||||
|
- FirebaseAppCheckInterop (10.14.0)
|
||||||
|
- FirebaseAuth (10.12.0):
|
||||||
|
- FirebaseAppCheckInterop (~> 10.0)
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
|
||||||
|
- FirebaseAuthInterop (10.14.0)
|
||||||
|
- FirebaseCore (10.12.0):
|
||||||
|
- FirebaseCoreInternal (~> 10.0)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GoogleUtilities/Logger (~> 7.8)
|
||||||
|
- FirebaseCoreExtension (10.14.0):
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- FirebaseCoreInternal (10.14.0):
|
||||||
|
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||||
|
- FirebaseFirestore (10.12.0):
|
||||||
|
- abseil/algorithm (~> 1.20220623.0)
|
||||||
|
- abseil/base (~> 1.20220623.0)
|
||||||
|
- abseil/container/flat_hash_map (~> 1.20220623.0)
|
||||||
|
- abseil/memory (~> 1.20220623.0)
|
||||||
|
- abseil/meta (~> 1.20220623.0)
|
||||||
|
- abseil/strings/strings (~> 1.20220623.0)
|
||||||
|
- abseil/time (~> 1.20220623.0)
|
||||||
|
- abseil/types (~> 1.20220623.0)
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- "gRPC-C++ (~> 1.50.1)"
|
||||||
|
- leveldb-library (~> 1.22)
|
||||||
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
|
- FirebaseInstallations (10.14.0):
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
|
- PromisesObjC (~> 2.1)
|
||||||
|
- FirebaseMessaging (10.12.0):
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- FirebaseInstallations (~> 10.0)
|
||||||
|
- GoogleDataTransport (~> 9.2)
|
||||||
|
- GoogleUtilities/AppDelegateSwizzler (~> 7.8)
|
||||||
|
- GoogleUtilities/Environment (~> 7.8)
|
||||||
|
- GoogleUtilities/Reachability (~> 7.8)
|
||||||
|
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||||
|
- nanopb (< 2.30910.0, >= 2.30908.0)
|
||||||
|
- FirebaseStorage (10.12.0):
|
||||||
|
- FirebaseAppCheckInterop (~> 10.0)
|
||||||
|
- FirebaseAuthInterop (~> 10.0)
|
||||||
|
- FirebaseCore (~> 10.0)
|
||||||
|
- FirebaseCoreExtension (~> 10.0)
|
||||||
|
- GTMSessionFetcher/Core (< 4.0, >= 2.1)
|
||||||
|
- Flutter (1.0.0)
|
||||||
|
- flutter_keyboard_visibility (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- FMDB (2.7.5):
|
||||||
|
- FMDB/standard (= 2.7.5)
|
||||||
|
- FMDB/standard (2.7.5)
|
||||||
|
- geolocator_apple (1.2.0):
|
||||||
|
- Flutter
|
||||||
|
- google_sign_in_ios (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- GoogleSignIn (~> 6.2)
|
||||||
|
- GoogleDataTransport (9.2.5):
|
||||||
|
- 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.5):
|
||||||
|
- GoogleUtilities/Environment
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- GoogleUtilities/Network
|
||||||
|
- GoogleUtilities/Environment (7.11.5):
|
||||||
|
- PromisesObjC (< 3.0, >= 1.2)
|
||||||
|
- GoogleUtilities/Logger (7.11.5):
|
||||||
|
- GoogleUtilities/Environment
|
||||||
|
- GoogleUtilities/Network (7.11.5):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- "GoogleUtilities/NSData+zlib"
|
||||||
|
- GoogleUtilities/Reachability
|
||||||
|
- "GoogleUtilities/NSData+zlib (7.11.5)"
|
||||||
|
- GoogleUtilities/Reachability (7.11.5):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- GoogleUtilities/UserDefaults (7.11.5):
|
||||||
|
- GoogleUtilities/Logger
|
||||||
|
- "gRPC-C++ (1.50.1)":
|
||||||
|
- "gRPC-C++/Implementation (= 1.50.1)"
|
||||||
|
- "gRPC-C++/Interface (= 1.50.1)"
|
||||||
|
- "gRPC-C++/Implementation (1.50.1)":
|
||||||
|
- abseil/base/base (= 1.20220623.0)
|
||||||
|
- abseil/base/core_headers (= 1.20220623.0)
|
||||||
|
- abseil/cleanup/cleanup (= 1.20220623.0)
|
||||||
|
- abseil/container/flat_hash_map (= 1.20220623.0)
|
||||||
|
- abseil/container/flat_hash_set (= 1.20220623.0)
|
||||||
|
- abseil/container/inlined_vector (= 1.20220623.0)
|
||||||
|
- abseil/functional/any_invocable (= 1.20220623.0)
|
||||||
|
- abseil/functional/bind_front (= 1.20220623.0)
|
||||||
|
- abseil/functional/function_ref (= 1.20220623.0)
|
||||||
|
- abseil/hash/hash (= 1.20220623.0)
|
||||||
|
- abseil/memory/memory (= 1.20220623.0)
|
||||||
|
- abseil/meta/type_traits (= 1.20220623.0)
|
||||||
|
- abseil/random/random (= 1.20220623.0)
|
||||||
|
- abseil/status/status (= 1.20220623.0)
|
||||||
|
- abseil/status/statusor (= 1.20220623.0)
|
||||||
|
- abseil/strings/cord (= 1.20220623.0)
|
||||||
|
- abseil/strings/str_format (= 1.20220623.0)
|
||||||
|
- abseil/strings/strings (= 1.20220623.0)
|
||||||
|
- abseil/synchronization/synchronization (= 1.20220623.0)
|
||||||
|
- abseil/time/time (= 1.20220623.0)
|
||||||
|
- abseil/types/optional (= 1.20220623.0)
|
||||||
|
- abseil/types/span (= 1.20220623.0)
|
||||||
|
- abseil/types/variant (= 1.20220623.0)
|
||||||
|
- abseil/utility/utility (= 1.20220623.0)
|
||||||
|
- "gRPC-C++/Interface (= 1.50.1)"
|
||||||
|
- gRPC-Core (= 1.50.1)
|
||||||
|
- "gRPC-C++/Interface (1.50.1)"
|
||||||
|
- gRPC-Core (1.50.1):
|
||||||
|
- gRPC-Core/Implementation (= 1.50.1)
|
||||||
|
- gRPC-Core/Interface (= 1.50.1)
|
||||||
|
- gRPC-Core/Implementation (1.50.1):
|
||||||
|
- abseil/base/base (= 1.20220623.0)
|
||||||
|
- abseil/base/core_headers (= 1.20220623.0)
|
||||||
|
- abseil/container/flat_hash_map (= 1.20220623.0)
|
||||||
|
- abseil/container/flat_hash_set (= 1.20220623.0)
|
||||||
|
- abseil/container/inlined_vector (= 1.20220623.0)
|
||||||
|
- abseil/functional/any_invocable (= 1.20220623.0)
|
||||||
|
- abseil/functional/bind_front (= 1.20220623.0)
|
||||||
|
- abseil/functional/function_ref (= 1.20220623.0)
|
||||||
|
- abseil/hash/hash (= 1.20220623.0)
|
||||||
|
- abseil/memory/memory (= 1.20220623.0)
|
||||||
|
- abseil/meta/type_traits (= 1.20220623.0)
|
||||||
|
- abseil/random/random (= 1.20220623.0)
|
||||||
|
- abseil/status/status (= 1.20220623.0)
|
||||||
|
- abseil/status/statusor (= 1.20220623.0)
|
||||||
|
- abseil/strings/cord (= 1.20220623.0)
|
||||||
|
- abseil/strings/str_format (= 1.20220623.0)
|
||||||
|
- abseil/strings/strings (= 1.20220623.0)
|
||||||
|
- abseil/synchronization/synchronization (= 1.20220623.0)
|
||||||
|
- abseil/time/time (= 1.20220623.0)
|
||||||
|
- abseil/types/optional (= 1.20220623.0)
|
||||||
|
- abseil/types/span (= 1.20220623.0)
|
||||||
|
- abseil/types/variant (= 1.20220623.0)
|
||||||
|
- abseil/utility/utility (= 1.20220623.0)
|
||||||
|
- BoringSSL-GRPC (= 0.0.24)
|
||||||
|
- gRPC-Core/Interface (= 1.50.1)
|
||||||
|
- gRPC-Core/Interface (1.50.1)
|
||||||
|
- GTMAppAuth (1.3.1):
|
||||||
|
- AppAuth/Core (~> 1.6)
|
||||||
|
- GTMSessionFetcher/Core (< 3.0, >= 1.5)
|
||||||
|
- GTMSessionFetcher/Core (2.3.0)
|
||||||
|
- image_picker_ios (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- leveldb-library (1.22.2)
|
||||||
|
- 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_foundation (0.0.1):
|
||||||
|
- Flutter
|
||||||
|
- FlutterMacOS
|
||||||
|
- PromisesObjC (2.3.1)
|
||||||
|
- sqflite (0.0.3):
|
||||||
|
- Flutter
|
||||||
|
- FMDB (>= 2.7.5)
|
||||||
|
|
||||||
|
DEPENDENCIES:
|
||||||
|
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
|
||||||
|
- 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_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
||||||
|
- firebase_storage (from `.symlinks/plugins/firebase_storage/ios`)
|
||||||
|
- Flutter (from `Flutter`)
|
||||||
|
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
|
||||||
|
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`)
|
||||||
|
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
|
||||||
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
|
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
|
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||||
|
|
||||||
|
SPEC REPOS:
|
||||||
|
trunk:
|
||||||
|
- abseil
|
||||||
|
- AppAuth
|
||||||
|
- BoringSSL-GRPC
|
||||||
|
- Firebase
|
||||||
|
- FirebaseAppCheckInterop
|
||||||
|
- FirebaseAuth
|
||||||
|
- FirebaseAuthInterop
|
||||||
|
- FirebaseCore
|
||||||
|
- FirebaseCoreExtension
|
||||||
|
- FirebaseCoreInternal
|
||||||
|
- FirebaseFirestore
|
||||||
|
- FirebaseInstallations
|
||||||
|
- FirebaseMessaging
|
||||||
|
- FirebaseStorage
|
||||||
|
- FMDB
|
||||||
|
- GoogleDataTransport
|
||||||
|
- GoogleSignIn
|
||||||
|
- GoogleUtilities
|
||||||
|
- "gRPC-C++"
|
||||||
|
- gRPC-Core
|
||||||
|
- GTMAppAuth
|
||||||
|
- GTMSessionFetcher
|
||||||
|
- leveldb-library
|
||||||
|
- nanopb
|
||||||
|
- PromisesObjC
|
||||||
|
|
||||||
|
EXTERNAL SOURCES:
|
||||||
|
audioplayers_darwin:
|
||||||
|
:path: ".symlinks/plugins/audioplayers_darwin/ios"
|
||||||
|
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_messaging:
|
||||||
|
:path: ".symlinks/plugins/firebase_messaging/ios"
|
||||||
|
firebase_storage:
|
||||||
|
:path: ".symlinks/plugins/firebase_storage/ios"
|
||||||
|
Flutter:
|
||||||
|
:path: Flutter
|
||||||
|
flutter_keyboard_visibility:
|
||||||
|
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
|
||||||
|
geolocator_apple:
|
||||||
|
:path: ".symlinks/plugins/geolocator_apple/ios"
|
||||||
|
google_sign_in_ios:
|
||||||
|
:path: ".symlinks/plugins/google_sign_in_ios/ios"
|
||||||
|
image_picker_ios:
|
||||||
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
|
path_provider_foundation:
|
||||||
|
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
||||||
|
sqflite:
|
||||||
|
:path: ".symlinks/plugins/sqflite/ios"
|
||||||
|
|
||||||
|
SPEC CHECKSUMS:
|
||||||
|
abseil: 926fb7a82dc6d2b8e1f2ed7f3a718bce691d1e46
|
||||||
|
AppAuth: 3bb1d1cd9340bd09f5ed189fb00b1cc28e1e8570
|
||||||
|
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
|
||||||
|
BoringSSL-GRPC: 3175b25143e648463a56daeaaa499c6cb86dad33
|
||||||
|
cloud_firestore: 005e157ad342dbfb2e461cb111a9020aa71bfb22
|
||||||
|
Firebase: 07150e75d142fb9399f6777fa56a187b17f833a0
|
||||||
|
firebase_auth: 3f7820b22557dd4a1b024f4d86947d1a0ff8a10f
|
||||||
|
firebase_core: e477125798fc37cd4ab43ca6a8536bf7e0929c00
|
||||||
|
firebase_messaging: 334d68c3a36b6d4d5cd91e4f42509e0d4ae49828
|
||||||
|
firebase_storage: d5c1b95383db1230d9fed88c76cb257d8d1ec1d6
|
||||||
|
FirebaseAppCheckInterop: c87f1d5421c852413dd936b2b2340b21e62501a0
|
||||||
|
FirebaseAuth: a66c1e14ec58f41d154a4b41ce1a23ea00ad4805
|
||||||
|
FirebaseAuthInterop: 23be77be1ca68e4bd15214f403f807a6ca70d7e0
|
||||||
|
FirebaseCore: f86a1394906b97ac445ae49c92552a9425831bed
|
||||||
|
FirebaseCoreExtension: 976638051b1a46b503afce7ec80277f9161f2040
|
||||||
|
FirebaseCoreInternal: d558159ee6cc4b823c2296ecc193de9f6d9a5bb3
|
||||||
|
FirebaseFirestore: f94c9541515fa4a49af52269bbc50349009424b4
|
||||||
|
FirebaseInstallations: f672b1eda64e6381c21d424a2f680a943fd83f3b
|
||||||
|
FirebaseMessaging: bb2c4f6422a753038fe137d90ae7c1af57251316
|
||||||
|
FirebaseStorage: 1d7ca8c8953fc61ccacaa7c612696b5402968a0d
|
||||||
|
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
|
||||||
|
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
|
||||||
|
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||||
|
geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401
|
||||||
|
google_sign_in_ios: 1256ff9d941db546373826966720b0c24804bcdd
|
||||||
|
GoogleDataTransport: 54dee9d48d14580407f8f5fbf2f496e92437a2f2
|
||||||
|
GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
|
||||||
|
GoogleUtilities: 13e2c67ede716b8741c7989e26893d151b2b2084
|
||||||
|
"gRPC-C++": 0968bace703459fd3e5dcb0b2bed4c573dbff046
|
||||||
|
gRPC-Core: 17108291d84332196d3c8466b48f016fc17d816d
|
||||||
|
GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
|
||||||
|
GTMSessionFetcher: 3a63d75eecd6aa32c2fc79f578064e1214dfdec2
|
||||||
|
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||||
|
leveldb-library: f03246171cce0484482ec291f88b6d563699ee06
|
||||||
|
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
|
||||||
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
||||||
|
PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
|
||||||
|
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
||||||
|
|
||||||
|
PODFILE CHECKSUM: 6b9eb94e9f98a329f2ef624b852a6e42d090af2b
|
||||||
|
|
||||||
|
COCOAPODS: 1.14.3
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 564 B After Width: | Height: | Size: 421 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 729 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 8.6 KiB |
@ -1,34 +1,36 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CLIENT_ID</key>
|
<key>CLIENT_ID</key>
|
||||||
<string>994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com</string>
|
<string>994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com</string>
|
||||||
<key>REVERSED_CLIENT_ID</key>
|
<key>REVERSED_CLIENT_ID</key>
|
||||||
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
|
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
|
||||||
<key>API_KEY</key>
|
<key>ANDROID_CLIENT_ID</key>
|
||||||
<string>AIzaSyBbYqsR6t7JTi8_XFNEHd43IRuKlYGeI3U</string>
|
<string>994903990520-073l30b0afj0uq7apsvc8p8ukantpu6q.apps.googleusercontent.com</string>
|
||||||
<key>GCM_SENDER_ID</key>
|
<key>API_KEY</key>
|
||||||
<string>994903990520</string>
|
<string>AIzaSyBbYqsR6t7JTi8_XFNEHd43IRuKlYGeI3U</string>
|
||||||
<key>PLIST_VERSION</key>
|
<key>GCM_SENDER_ID</key>
|
||||||
<string>1</string>
|
<string>994903990520</string>
|
||||||
<key>BUNDLE_ID</key>
|
<key>PLIST_VERSION</key>
|
||||||
<string>com.example.justmusic</string>
|
<string>1</string>
|
||||||
<key>PROJECT_ID</key>
|
<key>BUNDLE_ID</key>
|
||||||
<string>justmusic-435d5</string>
|
<string>com.example.justmusic</string>
|
||||||
<key>STORAGE_BUCKET</key>
|
<key>PROJECT_ID</key>
|
||||||
<string>justmusic-435d5.appspot.com</string>
|
<string>justmusic-435d5</string>
|
||||||
<key>IS_ADS_ENABLED</key>
|
<key>STORAGE_BUCKET</key>
|
||||||
<false></false>
|
<string>justmusic-435d5.appspot.com</string>
|
||||||
<key>IS_ANALYTICS_ENABLED</key>
|
<key>IS_ADS_ENABLED</key>
|
||||||
<false></false>
|
<false></false>
|
||||||
<key>IS_APPINVITE_ENABLED</key>
|
<key>IS_ANALYTICS_ENABLED</key>
|
||||||
<true></true>
|
<false></false>
|
||||||
<key>IS_GCM_ENABLED</key>
|
<key>IS_APPINVITE_ENABLED</key>
|
||||||
<true></true>
|
<true></true>
|
||||||
<key>IS_SIGNIN_ENABLED</key>
|
<key>IS_GCM_ENABLED</key>
|
||||||
<true></true>
|
<true></true>
|
||||||
<key>GOOGLE_APP_ID</key>
|
<key>IS_SIGNIN_ENABLED</key>
|
||||||
<string>1:994903990520:ios:93188f32e320babe0a9b0d</string>
|
<true></true>
|
||||||
</dict>
|
<key>GOOGLE_APP_ID</key>
|
||||||
|
<string>1:994903990520:ios:93188f32e320babe0a9b0d</string>
|
||||||
|
</dict>
|
||||||
</plist>
|
</plist>
|
@ -0,0 +1,12 @@
|
|||||||
|
import Flutter
|
||||||
|
import UIKit
|
||||||
|
import XCTest
|
||||||
|
|
||||||
|
class RunnerTests: XCTestCase {
|
||||||
|
|
||||||
|
func testExample() {
|
||||||
|
// If you add code to the Runner application, consider adding tests here.
|
||||||
|
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"file_generated_by": "FlutterFire CLI",
|
|
||||||
"purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory",
|
|
||||||
"GOOGLE_APP_ID": "1:994903990520:ios:93188f32e320babe0a9b0d",
|
|
||||||
"FIREBASE_PROJECT_ID": "justmusic-435d5",
|
|
||||||
"GCM_SENDER_ID": "994903990520"
|
|
||||||
}
|
|
@ -1,235 +1,254 @@
|
|||||||
import 'package:auto_size_text/auto_size_text.dart';
|
import 'package:auto_size_text/auto_size_text.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
|
import 'package:gradient_borders/box_borders/gradient_box_border.dart';
|
||||||
import 'package:justmusic/components/profil_picture_component.dart';
|
import 'package:justmusic/components/profil_picture_component.dart';
|
||||||
import 'package:text_scroll/text_scroll.dart';
|
import 'package:text_scroll/text_scroll.dart';
|
||||||
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
|
import 'package:zoom_tap_animation/zoom_tap_animation.dart';
|
||||||
|
|
||||||
import '../model/Post.dart';
|
import '../model/Post.dart';
|
||||||
|
|
||||||
class PostComponent extends StatefulWidget {
|
class PostComponent extends StatefulWidget {
|
||||||
final Function(Post)? callback;
|
final Function(Post)? callback;
|
||||||
final Post post;
|
final Post post;
|
||||||
final int index;
|
final int index;
|
||||||
|
|
||||||
PostComponent({Key? key, required this.callback, required this.post, required this.index}) : super(key: key);
|
PostComponent({Key? key, required this.callback, required this.post, required this.index}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<PostComponent> createState() => _PostComponentState();
|
State<PostComponent> createState() => _PostComponentState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _PostComponentState extends State<PostComponent> with TickerProviderStateMixin {
|
class _PostComponentState extends State<PostComponent> with TickerProviderStateMixin {
|
||||||
bool choice = false;
|
bool choice = false;
|
||||||
DateTime today = DateTime.now();
|
DateTime today = DateTime.now();
|
||||||
|
|
||||||
void switchChoice() {
|
void switchChoice() {
|
||||||
setState(() {
|
setState(() {
|
||||||
choice = !choice;
|
choice = !choice;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
String formatPostDate(DateTime postDate) {
|
||||||
@override
|
DateTime now = DateTime.now();
|
||||||
void initState() {
|
DateTime yesterday = DateTime(now.year, now.month, now.day - 1);
|
||||||
print("post: ${widget.post.date.toString()}");
|
|
||||||
print("ajrd: ${DateTime.now().toString()}");
|
if (postDate.year == now.year && postDate.month == now.month && postDate.day == now.day) {
|
||||||
super.initState();
|
// Aujourd'hui
|
||||||
}
|
return "Aujourd'hui, ${postDate.hour}:${postDate.minute.toString().padLeft(2, '0')}";
|
||||||
|
} else if (postDate.year == yesterday.year && postDate.month == yesterday.month && postDate.day == yesterday.day) {
|
||||||
@override
|
// Hier
|
||||||
Widget build(BuildContext context) {
|
return 'hier, ${postDate.hour}:${postDate.minute.toString().padLeft(2, '0')}';
|
||||||
return GestureDetector(
|
} else {
|
||||||
onTap: switchChoice,
|
// Autre date
|
||||||
child: SizedBox(
|
return '${postDate.day} ${_getMonthAbbreviation(postDate.month)} ${postDate.hour}:${postDate.minute.toString().padLeft(2, '0')}';
|
||||||
width: double.infinity,
|
}
|
||||||
child: Column(
|
}
|
||||||
children: [
|
|
||||||
Row(
|
String _getMonthAbbreviation(int month) {
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
const List<String> monthsAbbreviation = [
|
||||||
children: [
|
'janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.',
|
||||||
ProfilPictureComponent(user: widget.post.user),
|
];
|
||||||
Expanded(
|
|
||||||
flex: 8,
|
return monthsAbbreviation[month - 1];
|
||||||
child: Padding(
|
}
|
||||||
padding: const EdgeInsets.only(left: 10),
|
|
||||||
child: Column(
|
@override
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
void initState() {
|
||||||
children: [
|
print("post: ${widget.post.date.toString()}");
|
||||||
Text(
|
print("ajrd: ${DateTime.now().toString()}");
|
||||||
widget.post.user.pseudo,
|
super.initState();
|
||||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w600),
|
}
|
||||||
),
|
|
||||||
widget.post.location.item2 != null
|
@override
|
||||||
? Text(
|
Widget build(BuildContext context) {
|
||||||
"${widget.post.location.item1}, ${widget.post.location.item2}",
|
var mins = "0";
|
||||||
style: GoogleFonts.plusJakartaSans(
|
if (widget.post.date.minute < 10) {
|
||||||
color: Colors.white.withOpacity(0.4),
|
mins = "0${widget.post.date.minute}";
|
||||||
fontWeight: FontWeight.w300,
|
} else {
|
||||||
fontSize: 13),
|
mins = widget.post.date.minute.toString();
|
||||||
)
|
}
|
||||||
: Text(
|
|
||||||
"",
|
return GestureDetector(
|
||||||
style: GoogleFonts.plusJakartaSans(
|
onTap: switchChoice,
|
||||||
color: Colors.white.withOpacity(0.4),
|
child: SizedBox(
|
||||||
fontWeight: FontWeight.w300,
|
width: double.infinity,
|
||||||
fontSize: 13),
|
child: Column(
|
||||||
)
|
children: [
|
||||||
],
|
Row(
|
||||||
),
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
),
|
children: [
|
||||||
),
|
ProfilPictureComponent(user: widget.post.user),
|
||||||
DateTime(today.year, today.month, today.day).isAtSameMomentAs(
|
Expanded(
|
||||||
DateTime(widget.post.date.year, widget.post.date.month, widget.post.date.day))
|
flex: 8,
|
||||||
? Text(
|
child: Padding(
|
||||||
"Aujourd'hui, ${widget.post.date.hour}:${widget.post.date.minute}",
|
padding: const EdgeInsets.only(left: 10),
|
||||||
style: GoogleFonts.plusJakartaSans(
|
child: Column(
|
||||||
color: Colors.white.withOpacity(0.4), fontWeight: FontWeight.w300, fontSize: 13),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
)
|
children: [
|
||||||
: Text(
|
Text(
|
||||||
"hier, ${widget.post.date.hour}:${widget.post.date.minute}",
|
widget.post.user.pseudo,
|
||||||
style: GoogleFonts.plusJakartaSans(
|
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w600),
|
||||||
color: Colors.white.withOpacity(0.4), fontWeight: FontWeight.w300, fontSize: 13),
|
),
|
||||||
),
|
widget.post.location.item2 != null
|
||||||
],
|
? Text(
|
||||||
),
|
"${widget.post.location.item1}, ${widget.post.location.item2}",
|
||||||
SizedBox(height: 10),
|
style: GoogleFonts.plusJakartaSans(
|
||||||
ZoomTapAnimation(
|
color: Colors.white.withOpacity(0.4),
|
||||||
onTap: () {
|
fontWeight: FontWeight.w300,
|
||||||
widget.callback!(widget.post);
|
fontSize: 13),
|
||||||
},
|
)
|
||||||
enableLongTapRepeatEvent: false,
|
: Text(
|
||||||
longTapRepeatDuration: const Duration(milliseconds: 100),
|
"",
|
||||||
begin: 1.0,
|
style: GoogleFonts.plusJakartaSans(
|
||||||
end: 0.99,
|
color: Colors.white.withOpacity(0.4),
|
||||||
beginDuration: const Duration(milliseconds: 70),
|
fontWeight: FontWeight.w300,
|
||||||
endDuration: const Duration(milliseconds: 100),
|
fontSize: 13),
|
||||||
beginCurve: Curves.decelerate,
|
)
|
||||||
endCurve: Curves.easeInOutSine,
|
],
|
||||||
child: AspectRatio(
|
),
|
||||||
aspectRatio: 1 / 1,
|
),
|
||||||
child: Container(
|
),
|
||||||
decoration: BoxDecoration(
|
Text(
|
||||||
// add border
|
formatPostDate(widget.post.date),
|
||||||
border: const GradientBoxBorder(
|
style: GoogleFonts.plusJakartaSans(
|
||||||
gradient: LinearGradient(colors: [
|
color: Colors.white.withOpacity(0.4), fontWeight: FontWeight.w300, fontSize: 13),
|
||||||
Colors.transparent,
|
)
|
||||||
Color(0xFF323232),
|
],
|
||||||
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
|
),
|
||||||
width: 2.5,
|
SizedBox(height: 10),
|
||||||
),
|
ZoomTapAnimation(
|
||||||
// set border radius
|
onTap: () {
|
||||||
borderRadius: BorderRadius.circular(20),
|
widget.callback!(widget.post);
|
||||||
),
|
},
|
||||||
child: ClipRRect(
|
enableLongTapRepeatEvent: false,
|
||||||
borderRadius: BorderRadius.circular(18),
|
longTapRepeatDuration: const Duration(milliseconds: 100),
|
||||||
// implement image
|
begin: 1.0,
|
||||||
child: Stack(
|
end: 0.99,
|
||||||
alignment: Alignment.bottomCenter,
|
beginDuration: const Duration(milliseconds: 70),
|
||||||
children: [
|
endDuration: const Duration(milliseconds: 100),
|
||||||
SizedBox(
|
beginCurve: Curves.decelerate,
|
||||||
width: double.infinity,
|
endCurve: Curves.easeInOutSine,
|
||||||
child: FadeInImage.assetNetwork(
|
child: AspectRatio(
|
||||||
image: widget.post.music.cover!,
|
aspectRatio: 1 / 1,
|
||||||
fadeInDuration: const Duration(milliseconds: 100),
|
child: Container(
|
||||||
placeholder: "assets/images/loadingPlaceholder.gif",
|
decoration: BoxDecoration(
|
||||||
),
|
// add border
|
||||||
),
|
border: const GradientBoxBorder(
|
||||||
Image(
|
gradient: LinearGradient(colors: [
|
||||||
image: AssetImage("assets/images/shadow_post.png"),
|
Colors.transparent,
|
||||||
opacity: AnimationController(vsync: this, value: 0.7),
|
Color(0xFF323232),
|
||||||
fit: BoxFit.fitHeight,
|
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
|
||||||
width: double.infinity,
|
width: 2.5,
|
||||||
),
|
),
|
||||||
widget.post.description == null
|
// set border radius
|
||||||
? Container()
|
borderRadius: BorderRadius.circular(20),
|
||||||
: Padding(
|
),
|
||||||
padding: EdgeInsets.all(15),
|
child: ClipRRect(
|
||||||
child: AutoSizeText(
|
borderRadius: BorderRadius.circular(18),
|
||||||
'“${widget.post.description}”',
|
// implement image
|
||||||
style: GoogleFonts.plusJakartaSans(
|
child: Stack(
|
||||||
color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.sp),
|
alignment: Alignment.bottomCenter,
|
||||||
maxFontSize: 20,
|
children: [
|
||||||
maxLines: 1,
|
SizedBox(
|
||||||
),
|
width: double.infinity,
|
||||||
),
|
child: Image.network(
|
||||||
widget.post.selfie != null
|
widget.post.music.cover!,
|
||||||
? Positioned(
|
),
|
||||||
top: 0,
|
),
|
||||||
right: 0,
|
Image(
|
||||||
child: Padding(
|
image: AssetImage("assets/images/shadow_post.png"),
|
||||||
padding: EdgeInsets.all(12),
|
opacity: AnimationController(vsync: this, value: 0.7),
|
||||||
child: Container(
|
fit: BoxFit.fitHeight,
|
||||||
constraints: BoxConstraints(maxWidth: 140, maxHeight: 140),
|
width: double.infinity,
|
||||||
width: 90.sp,
|
),
|
||||||
height: 90.sp,
|
widget.post.description == null
|
||||||
decoration: BoxDecoration(
|
? Container()
|
||||||
color: Colors.white,
|
: Padding(
|
||||||
// add border
|
padding: EdgeInsets.all(15),
|
||||||
border: Border.all(width: 3, color: Colors.white),
|
child: AutoSizeText(
|
||||||
// set border radius
|
'“${widget.post.description}”',
|
||||||
borderRadius: BorderRadius.circular(15),
|
style: GoogleFonts.plusJakartaSans(
|
||||||
),
|
color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.sp),
|
||||||
child: ClipRRect(
|
maxFontSize: 20,
|
||||||
borderRadius: BorderRadius.circular(13),
|
maxLines: 1,
|
||||||
// implement image
|
),
|
||||||
child: FadeInImage.assetNetwork(
|
),
|
||||||
image: widget.post.selfie!,
|
widget.post.selfie != null
|
||||||
fit: BoxFit.cover,
|
? Positioned(
|
||||||
fadeInDuration: const Duration(milliseconds: 100),
|
top: 0,
|
||||||
placeholder: "assets/images/loadingPlaceholder.gif",
|
right: 0,
|
||||||
),
|
child: Padding(
|
||||||
),
|
padding: EdgeInsets.all(12),
|
||||||
),
|
child: Container(
|
||||||
))
|
constraints: BoxConstraints(maxWidth: 140, maxHeight: 140),
|
||||||
: Container(),
|
width: 90.sp,
|
||||||
],
|
height: 90.sp,
|
||||||
),
|
decoration: BoxDecoration(
|
||||||
),
|
color: Colors.white,
|
||||||
),
|
// add border
|
||||||
)),
|
border: Border.all(width: 3, color: Colors.white),
|
||||||
SizedBox(height: 15),
|
// set border radius
|
||||||
Column(
|
borderRadius: BorderRadius.circular(15),
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
),
|
||||||
children: [
|
child: ClipRRect(
|
||||||
Row(
|
borderRadius: BorderRadius.circular(13),
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
// implement image
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
child: Image.network(
|
||||||
children: [
|
widget.post.selfie!,
|
||||||
Expanded(
|
fit: BoxFit.cover,
|
||||||
flex: 8,
|
),
|
||||||
child: Padding(
|
),
|
||||||
padding: EdgeInsets.only(bottom: 2),
|
),
|
||||||
child: TextScroll(
|
))
|
||||||
widget.post.music.title!,
|
: Container(),
|
||||||
style: GoogleFonts.plusJakartaSans(
|
],
|
||||||
height: 1, color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
|
),
|
||||||
mode: TextScrollMode.endless,
|
),
|
||||||
velocity: Velocity(pixelsPerSecond: Offset(50, 20)),
|
),
|
||||||
pauseBetween: Duration(milliseconds: 500),
|
)),
|
||||||
),
|
SizedBox(height: 15),
|
||||||
)),
|
Column(
|
||||||
Container(width: 10),
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
AutoSizeText(
|
children: [
|
||||||
widget.post.music.date.toString(),
|
Row(
|
||||||
style: GoogleFonts.plusJakartaSans(
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
textAlign: TextAlign.end,
|
children: [
|
||||||
maxFontSize: 20,
|
Expanded(
|
||||||
),
|
flex: 8,
|
||||||
],
|
child: Padding(
|
||||||
),
|
padding: EdgeInsets.only(bottom: 2),
|
||||||
TextScroll(
|
child: TextScroll(
|
||||||
widget.post.music.artists.first.name!,
|
widget.post.music.title!,
|
||||||
style: GoogleFonts.plusJakartaSans(
|
style: GoogleFonts.plusJakartaSans(
|
||||||
height: 1, color: Colors.white.withOpacity(0.5), fontWeight: FontWeight.w300, fontSize: 16.h),
|
height: 1, color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
|
||||||
mode: TextScrollMode.endless,
|
mode: TextScrollMode.endless,
|
||||||
pauseBetween: Duration(milliseconds: 500),
|
velocity: Velocity(pixelsPerSecond: Offset(50, 20)),
|
||||||
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
|
pauseBetween: Duration(milliseconds: 500),
|
||||||
),
|
),
|
||||||
],
|
)),
|
||||||
),
|
Container(width: 10),
|
||||||
],
|
AutoSizeText(
|
||||||
)));
|
widget.post.music.date.toString(),
|
||||||
}
|
style: GoogleFonts.plusJakartaSans(
|
||||||
}
|
color: Colors.white, fontWeight: FontWeight.w600, fontSize: 26.h),
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
maxFontSize: 20,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
TextScroll(
|
||||||
|
widget.post.music.artists.first.name!,
|
||||||
|
style: GoogleFonts.plusJakartaSans(
|
||||||
|
height: 1, color: Colors.white.withOpacity(0.5), fontWeight: FontWeight.w300, fontSize: 16.h),
|
||||||
|
mode: TextScrollMode.endless,
|
||||||
|
pauseBetween: Duration(milliseconds: 500),
|
||||||
|
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
class UserException implements Exception {
|
||||||
|
String code;
|
||||||
|
String description;
|
||||||
|
|
||||||
|
UserException(this.code,this.description);
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
|
import 'Music.dart';
|
||||||
|
|
||||||
|
class Capsule {
|
||||||
|
final String _id;
|
||||||
|
late Music _music;
|
||||||
|
Tuple2<String?,String?> _location;
|
||||||
|
DateTime _date;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
Capsule(this._id, this._location, this._date);
|
||||||
|
|
||||||
|
//Getters and setters
|
||||||
|
String get id => _id;
|
||||||
|
|
||||||
|
Music get music => _music;
|
||||||
|
|
||||||
|
set music(Music value) {
|
||||||
|
_music = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tuple2<String?, String?> get location => _location;
|
||||||
|
|
||||||
|
set location(Tuple2<String?, String?> value) {
|
||||||
|
_location = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
DateTime get date => _date;
|
||||||
|
|
||||||
|
set date(DateTime value) {
|
||||||
|
_date = value;
|
||||||
|
}
|
||||||
|
}
|
@ -1,208 +1,418 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:flutter/Material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:justmusic/model/Music.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
|
import 'package:justmusic/model/Music.dart';
|
||||||
import '../components/music_list_component.dart';
|
|
||||||
import '../values/constants.dart';
|
import '../components/music_list_component.dart';
|
||||||
import '../main.dart';
|
import '../values/constants.dart';
|
||||||
|
import '../main.dart';
|
||||||
class SearchSongScreen extends StatefulWidget {
|
|
||||||
final Function callback;
|
class SearchSongScreen extends StatefulWidget {
|
||||||
const SearchSongScreen({Key? key, required this.callback}) : super(key: key);
|
final Function callback;
|
||||||
|
const SearchSongScreen({Key? key, required this.callback}) : super(key: key);
|
||||||
@override
|
|
||||||
State<SearchSongScreen> createState() => _SearchSongScreenState();
|
@override
|
||||||
}
|
State<SearchSongScreen> createState() => _SearchSongScreenState();
|
||||||
|
}
|
||||||
class _SearchSongScreenState extends State<SearchSongScreen> {
|
|
||||||
final ScrollController _scrollController = ScrollController();
|
class _SearchSongScreenState extends State<SearchSongScreen> {
|
||||||
final TextEditingController _textEditingController = TextEditingController();
|
final ScrollController _scrollController = ScrollController();
|
||||||
|
final TextEditingController _textEditingController = TextEditingController();
|
||||||
int? playingIndex;
|
PageController controller = PageController();
|
||||||
|
bool isCollectionSelected = false;
|
||||||
Future<void> resetFullScreen() async {
|
|
||||||
await SystemChannels.platform.invokeMethod<void>(
|
int? playingIndex;
|
||||||
'SystemChrome.restoreSystemUIOverlays',
|
|
||||||
);
|
Future<void> resetFullScreen() async {
|
||||||
}
|
await SystemChannels.platform.invokeMethod<void>(
|
||||||
|
'SystemChrome.restoreSystemUIOverlays',
|
||||||
@override
|
);
|
||||||
void initState() {
|
}
|
||||||
super.initState();
|
|
||||||
fetchTrendingMusic();
|
@override
|
||||||
_scrollController.addListener(_scrollListener);
|
void initState() {
|
||||||
}
|
super.initState();
|
||||||
|
fetchTrendingMusic();
|
||||||
Future<void> fetchTrendingMusic() async {
|
_scrollController.addListener(_scrollListener);
|
||||||
await MyApp.musicViewModel.getMusicsWithPlaylistId('37i9dQZF1DX1X23oiQRTB5').then((value) {
|
}
|
||||||
setState(() {
|
|
||||||
filteredData = value;
|
Future<void> fetchTrendingMusic() async {
|
||||||
});
|
await MyApp.musicViewModel.getMusicsWithPlaylistId('37i9dQZF1DX1X23oiQRTB5').then((value) {
|
||||||
});
|
setState(() {
|
||||||
}
|
filteredData = value;
|
||||||
|
});
|
||||||
Future<void> _scrollListener() async {
|
});
|
||||||
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
|
}
|
||||||
filteredData.addAll(await MyApp.musicViewModel
|
|
||||||
.getMusicsWithName(_textEditingController.text, limit: 10, offset: filteredData.length));
|
Future<void> _scrollListener() async {
|
||||||
setState(() {
|
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
|
||||||
filteredData = filteredData;
|
filteredData.addAll(await MyApp.musicViewModel
|
||||||
});
|
.getMusicsWithName(_textEditingController.text, limit: 10, offset: filteredData.length));
|
||||||
}
|
setState(() {
|
||||||
if (_scrollController.offset >= _scrollController.position.maxScrollExtent &&
|
filteredData = filteredData;
|
||||||
!_scrollController.position.outOfRange) {
|
});
|
||||||
setState(() {
|
}
|
||||||
//you can do anything here
|
if (_scrollController.offset >= _scrollController.position.maxScrollExtent &&
|
||||||
});
|
!_scrollController.position.outOfRange) {
|
||||||
}
|
setState(() {
|
||||||
if (_scrollController.offset <= _scrollController.position.minScrollExtent &&
|
//you can do anything here
|
||||||
!_scrollController.position.outOfRange) {
|
});
|
||||||
setState(() {
|
}
|
||||||
Timer(Duration(milliseconds: 1), () => _scrollController.jumpTo(0));
|
if (_scrollController.offset <= _scrollController.position.minScrollExtent &&
|
||||||
});
|
!_scrollController.position.outOfRange) {
|
||||||
}
|
setState(() {
|
||||||
}
|
Timer(Duration(milliseconds: 1), () => _scrollController.jumpTo(0));
|
||||||
|
});
|
||||||
List<Music> filteredData = [];
|
}
|
||||||
|
}
|
||||||
void playMusic(int index) {
|
|
||||||
if (playingIndex == index) {
|
List<Music> filteredData = [];
|
||||||
setState(() {
|
|
||||||
playingIndex = null;
|
void playMusic(int index) {
|
||||||
});
|
if (playingIndex == index) {
|
||||||
} else {
|
setState(() {
|
||||||
setState(() {
|
playingIndex = null;
|
||||||
playingIndex = index;
|
});
|
||||||
});
|
} else {
|
||||||
}
|
setState(() {
|
||||||
}
|
playingIndex = index;
|
||||||
|
});
|
||||||
@override
|
}
|
||||||
void dispose() {
|
}
|
||||||
MyApp.audioPlayer.pause();
|
|
||||||
super.dispose();
|
_changePage(int index) {
|
||||||
}
|
/*if (isCollectionSelected) {
|
||||||
|
setState(() {
|
||||||
@override
|
isCollectionSelected = !isCollectionSelected;
|
||||||
Widget build(BuildContext context) {
|
controller.animateTo(1, duration: Duration(milliseconds: 200), curve: Curves.easeOut);
|
||||||
double screenHeight = MediaQuery.of(context).size.height;
|
});
|
||||||
return GestureDetector(
|
} else {
|
||||||
onTap: () {
|
setState(() {
|
||||||
FocusScopeNode currentFocus = FocusScope.of(context);
|
isCollectionSelected = !isCollectionSelected;
|
||||||
if (!currentFocus.hasPrimaryFocus) {
|
controller.animateTo(0, duration: Duration(milliseconds: 200), curve: Curves.easeOut);
|
||||||
currentFocus.unfocus();
|
});
|
||||||
resetFullScreen();
|
}*/
|
||||||
}
|
}
|
||||||
},
|
|
||||||
child: BackdropFilter(
|
Future<List<Music>> _fetchSavedSong() async {
|
||||||
filter: ImageFilter.blur(
|
return await MyApp.musicViewModel.getFavoriteMusicsByUserId(MyApp.userViewModel.userCurrent.id);
|
||||||
sigmaX: 60.0,
|
}
|
||||||
sigmaY: 60.0,
|
|
||||||
),
|
@override
|
||||||
child: Container(
|
void dispose() {
|
||||||
color: bgAppBar.withOpacity(0.5),
|
MyApp.audioPlayer.pause();
|
||||||
height: screenHeight - 50,
|
super.dispose();
|
||||||
padding: const EdgeInsets.only(top: 10),
|
}
|
||||||
child: Column(
|
|
||||||
children: [
|
@override
|
||||||
Align(
|
Widget build(BuildContext context) {
|
||||||
child: Container(
|
double screenHeight = MediaQuery.of(context).size.height;
|
||||||
width: 60,
|
return GestureDetector(
|
||||||
height: 5,
|
onTap: () {
|
||||||
decoration: BoxDecoration(
|
FocusScopeNode currentFocus = FocusScope.of(context);
|
||||||
color: Color(0xFF3A3A3A).withOpacity(0.6), borderRadius: BorderRadius.circular(20))),
|
if (!currentFocus.hasPrimaryFocus) {
|
||||||
),
|
currentFocus.unfocus();
|
||||||
const SizedBox(
|
resetFullScreen();
|
||||||
height: 10,
|
}
|
||||||
),
|
},
|
||||||
Padding(
|
child: BackdropFilter(
|
||||||
padding: const EdgeInsets.only(bottom: 10, left: 20, right: 20),
|
filter: ImageFilter.blur(
|
||||||
child: SizedBox(
|
sigmaX: 60.0,
|
||||||
height: 40,
|
sigmaY: 60.0,
|
||||||
child: TextField(
|
),
|
||||||
autofocus: true,
|
child: Container(
|
||||||
controller: _textEditingController,
|
color: bgAppBar.withOpacity(0.5),
|
||||||
keyboardAppearance: Brightness.dark,
|
height: screenHeight - 50,
|
||||||
onEditingComplete: resetFullScreen,
|
padding: const EdgeInsets.only(top: 10),
|
||||||
onSubmitted: (value) async {
|
child: Column(
|
||||||
if (_textEditingController.text.isEmpty) {
|
children: [
|
||||||
fetchTrendingMusic();
|
Align(
|
||||||
} else {
|
child: Container(
|
||||||
filteredData = await MyApp.musicViewModel.getMusicsWithNameOrArtistName(value);
|
width: 60,
|
||||||
setState(() {
|
height: 5,
|
||||||
filteredData = filteredData;
|
decoration: BoxDecoration(
|
||||||
});
|
color: Color(0xFF3A3A3A).withOpacity(0.6), borderRadius: BorderRadius.circular(20))),
|
||||||
}
|
),
|
||||||
},
|
const SizedBox(
|
||||||
cursorColor: Colors.white,
|
height: 10,
|
||||||
keyboardType: TextInputType.text,
|
),
|
||||||
style: GoogleFonts.plusJakartaSans(color: grayText),
|
Padding(
|
||||||
decoration: InputDecoration(
|
padding: const EdgeInsets.only(bottom: 10, left: 20, right: 20),
|
||||||
prefixIcon: const Icon(
|
child: SizedBox(
|
||||||
Icons.search,
|
height: 40,
|
||||||
color: grayColor,
|
child: TextField(
|
||||||
),
|
controller: _textEditingController,
|
||||||
focusedBorder: const OutlineInputBorder(
|
keyboardAppearance: Brightness.dark,
|
||||||
borderSide: BorderSide(width: 1, color: grayColor),
|
onEditingComplete: resetFullScreen,
|
||||||
borderRadius: BorderRadius.all(Radius.circular(10))),
|
onSubmitted: (value) async {
|
||||||
contentPadding:
|
if (_textEditingController.text.isEmpty) {
|
||||||
const EdgeInsets.only(top: 0, bottom: 0, left: defaultPadding, right: defaultPadding),
|
fetchTrendingMusic();
|
||||||
fillColor: searchBarColor,
|
} else {
|
||||||
filled: true,
|
setState(() {
|
||||||
focusColor: grayText,
|
filteredData = [];
|
||||||
enabledBorder: const OutlineInputBorder(
|
});
|
||||||
borderSide: BorderSide(width: 1, color: grayColor),
|
filteredData = await MyApp.musicViewModel.getMusicsWithNameOrArtistName(value);
|
||||||
borderRadius: BorderRadius.all(Radius.circular(10))),
|
setState(() {
|
||||||
hintText: 'Chercher un son',
|
filteredData = filteredData;
|
||||||
hintStyle: GoogleFonts.plusJakartaSans(color: grayHint)),
|
});
|
||||||
),
|
}
|
||||||
),
|
controller.animateTo(0, duration: Duration(milliseconds: 200), curve: Curves.easeIn);
|
||||||
),
|
},
|
||||||
Flexible(
|
cursorColor: Colors.white,
|
||||||
child: ScrollConfiguration(
|
keyboardType: TextInputType.text,
|
||||||
behavior: ScrollBehavior().copyWith(scrollbars: true),
|
style: GoogleFonts.plusJakartaSans(color: grayText),
|
||||||
child: ListView.builder(
|
decoration: InputDecoration(
|
||||||
physics: const BouncingScrollPhysics(decelerationRate: ScrollDecelerationRate.fast),
|
prefixIcon: const Icon(
|
||||||
controller: _scrollController,
|
Icons.search,
|
||||||
itemCount: filteredData.length,
|
color: grayColor,
|
||||||
itemBuilder: (context, index) {
|
),
|
||||||
if (playingIndex == index) {
|
focusedBorder: const OutlineInputBorder(
|
||||||
return InkWell(
|
borderSide: BorderSide(width: 1, color: grayColor),
|
||||||
onTap: () {
|
borderRadius: BorderRadius.all(Radius.circular(10))),
|
||||||
widget.callback(filteredData[index]);
|
contentPadding:
|
||||||
},
|
const EdgeInsets.only(top: 0, bottom: 0, left: defaultPadding, right: defaultPadding),
|
||||||
child: Padding(
|
fillColor: searchBarColor,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 20),
|
filled: true,
|
||||||
child: MusicListComponent(
|
focusColor: grayText,
|
||||||
music: filteredData[index],
|
enabledBorder: const OutlineInputBorder(
|
||||||
playing: true,
|
borderSide: BorderSide(width: 1, color: grayColor),
|
||||||
callback: playMusic,
|
borderRadius: BorderRadius.all(Radius.circular(10))),
|
||||||
index: index,
|
hintText: 'Chercher un son',
|
||||||
),
|
hintStyle: GoogleFonts.plusJakartaSans(color: grayHint)),
|
||||||
));
|
),
|
||||||
}
|
),
|
||||||
return InkWell(
|
),
|
||||||
onTap: () {
|
Padding(
|
||||||
widget.callback(filteredData[index]);
|
padding: const EdgeInsets.only(top: 10, bottom: 20),
|
||||||
},
|
child: Row(
|
||||||
child: Padding(
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 20),
|
children: [
|
||||||
child: MusicListComponent(
|
GestureDetector(
|
||||||
music: filteredData[index],
|
behavior: HitTestBehavior.opaque,
|
||||||
playing: false,
|
onTap: _changePage(0),
|
||||||
callback: playMusic,
|
child: Text(
|
||||||
index: index,
|
"Recherche",
|
||||||
),
|
style: GoogleFonts.plusJakartaSans(
|
||||||
));
|
color: isCollectionSelected ? Color(0xFF9A9A9A) : Colors.white,
|
||||||
}),
|
fontWeight: isCollectionSelected ? FontWeight.w500 : FontWeight.w700),
|
||||||
))
|
),
|
||||||
],
|
),
|
||||||
),
|
GestureDetector(
|
||||||
),
|
behavior: HitTestBehavior.opaque,
|
||||||
));
|
onTap: _changePage(1),
|
||||||
}
|
child: Text("Collection",
|
||||||
}
|
style: GoogleFonts.plusJakartaSans(
|
||||||
|
color: isCollectionSelected ? Colors.white : Color(0xFF9A9A9A),
|
||||||
|
fontWeight: isCollectionSelected ? FontWeight.w700 : FontWeight.w500)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Flexible(
|
||||||
|
child: PageView(
|
||||||
|
controller: controller,
|
||||||
|
physics: BouncingScrollPhysics(),
|
||||||
|
onPageChanged: (index) {
|
||||||
|
setState(() {
|
||||||
|
if (index == 1) {
|
||||||
|
isCollectionSelected = true;
|
||||||
|
} else {
|
||||||
|
isCollectionSelected = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
ScrollConfiguration(
|
||||||
|
behavior: ScrollBehavior().copyWith(scrollbars: true),
|
||||||
|
child: ListView.builder(
|
||||||
|
physics: const BouncingScrollPhysics(decelerationRate: ScrollDecelerationRate.fast),
|
||||||
|
controller: _scrollController,
|
||||||
|
itemCount: filteredData.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
if (playingIndex == index) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
widget.callback(filteredData[index]);
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: MusicListComponent(
|
||||||
|
music: filteredData[index],
|
||||||
|
playing: true,
|
||||||
|
callback: playMusic,
|
||||||
|
index: index,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
widget.callback(filteredData[index]);
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: MusicListComponent(
|
||||||
|
music: filteredData[index],
|
||||||
|
playing: false,
|
||||||
|
callback: playMusic,
|
||||||
|
index: index,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
ScrollConfiguration(
|
||||||
|
behavior: ScrollBehavior().copyWith(scrollbars: true),
|
||||||
|
child: FutureBuilder(
|
||||||
|
future: _fetchSavedSong(),
|
||||||
|
builder: (BuildContext context, AsyncSnapshot<List<Music>> snapshot) {
|
||||||
|
if (snapshot.hasData) {
|
||||||
|
if (snapshot.data?.length == 0) {
|
||||||
|
return Container(
|
||||||
|
width: double.infinity,
|
||||||
|
height: double.infinity,
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(
|
||||||
|
"Votre collection est vide.",
|
||||||
|
style: GoogleFonts.plusJakartaSans(
|
||||||
|
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 18),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
"assets/images/empty_collection.png",
|
||||||
|
width: 300,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return ListView.builder(
|
||||||
|
physics: const BouncingScrollPhysics(decelerationRate: ScrollDecelerationRate.fast),
|
||||||
|
controller: _scrollController,
|
||||||
|
itemCount: snapshot.data?.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
if (playingIndex == index) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
widget.callback((snapshot.data?[index])!);
|
||||||
|
},
|
||||||
|
onLongPress: () {
|
||||||
|
showCupertinoModalPopup<void>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) => CupertinoAlertDialog(
|
||||||
|
title: const Text('Supprimer la musique'),
|
||||||
|
content: Text(
|
||||||
|
'Etes-vous sur de vouloir supprimer ${(snapshot.data?[index])!.title} de votre collection?'),
|
||||||
|
actions: <CupertinoDialogAction>[
|
||||||
|
CupertinoDialogAction(
|
||||||
|
/// This parameter indicates this action is the default,
|
||||||
|
/// and turns the action's text to bold text.
|
||||||
|
isDefaultAction: true,
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: const Text('Annuler'),
|
||||||
|
),
|
||||||
|
CupertinoDialogAction(
|
||||||
|
/// This parameter indicates the action would perform
|
||||||
|
/// a destructive action such as deletion, and turns
|
||||||
|
/// the action's text color to red.
|
||||||
|
isDestructiveAction: true,
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.pop(context);
|
||||||
|
await MyApp.musicViewModel
|
||||||
|
.addOrDeleteFavoriteMusic((snapshot.data?[index])!.id);
|
||||||
|
MyApp.userViewModel.userCurrent.musicsLikes
|
||||||
|
.remove((snapshot.data?[index])!.id);
|
||||||
|
|
||||||
|
MyApp.audioPlayer.release();
|
||||||
|
setState(() {
|
||||||
|
playingIndex = null;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: const Text('Supprimer'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: MusicListComponent(
|
||||||
|
music: (snapshot.data?[index])!,
|
||||||
|
playing: true,
|
||||||
|
callback: playMusic,
|
||||||
|
index: index,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
widget.callback((snapshot.data?[index])!);
|
||||||
|
},
|
||||||
|
onLongPress: () {
|
||||||
|
showCupertinoModalPopup<void>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) => CupertinoAlertDialog(
|
||||||
|
title: const Text('Supprimer la musique'),
|
||||||
|
content: Text(
|
||||||
|
'Etes-vous sur de vouloir supprimer ${(snapshot.data?[index])!.title} de votre collection?'),
|
||||||
|
actions: <CupertinoDialogAction>[
|
||||||
|
CupertinoDialogAction(
|
||||||
|
/// This parameter indicates this action is the default,
|
||||||
|
/// and turns the action's text to bold text.
|
||||||
|
isDefaultAction: true,
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: const Text('Annuler'),
|
||||||
|
),
|
||||||
|
CupertinoDialogAction(
|
||||||
|
/// This parameter indicates the action would perform
|
||||||
|
/// a destructive action such as deletion, and turns
|
||||||
|
/// the action's text color to red.
|
||||||
|
isDestructiveAction: true,
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.pop(context);
|
||||||
|
await MyApp.musicViewModel
|
||||||
|
.addOrDeleteFavoriteMusic((snapshot.data?[index])!.id);
|
||||||
|
MyApp.userViewModel.userCurrent.musicsLikes
|
||||||
|
.remove((snapshot.data?[index])!.id);
|
||||||
|
setState(() {});
|
||||||
|
},
|
||||||
|
child: const Text('Supprimer'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 20),
|
||||||
|
child: MusicListComponent(
|
||||||
|
music: (snapshot.data?[index])!,
|
||||||
|
playing: false,
|
||||||
|
callback: playMusic,
|
||||||
|
index: index,
|
||||||
|
),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return CupertinoActivityIndicator();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,98 +1,98 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:google_fonts/google_fonts.dart';
|
import 'package:google_fonts/google_fonts.dart';
|
||||||
import 'package:justmusic/values/constants.dart';
|
import 'package:justmusic/values/constants.dart';
|
||||||
|
|
||||||
import '../components/join_button.dart';
|
import '../components/join_button.dart';
|
||||||
|
|
||||||
class WellcomeScreen extends StatelessWidget {
|
class WellcomeScreen extends StatelessWidget {
|
||||||
const WellcomeScreen({Key? key}) : super(key: key);
|
const WellcomeScreen({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
body: Container(
|
body: Container(
|
||||||
padding: EdgeInsets.all(defaultPadding),
|
padding: EdgeInsets.all(defaultPadding),
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: double.infinity,
|
height: double.infinity,
|
||||||
decoration: const BoxDecoration(
|
decoration: const BoxDecoration(
|
||||||
image: DecorationImage(
|
image: DecorationImage(
|
||||||
image: AssetImage("assets/images/wellcome_background.png"),
|
image: AssetImage("assets/images/wellcome_background.png"),
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
child: Align(
|
child: Align(
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
flex: 10,
|
flex: 10,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.only(bottom: 100),
|
padding: EdgeInsets.only(bottom: 100),
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
"Bienvenue sur,",
|
"Bienvenue sur,",
|
||||||
style: GoogleFonts.plusJakartaSans(
|
style: GoogleFonts.plusJakartaSans(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 34),
|
fontSize: 34),
|
||||||
),
|
),
|
||||||
Image(
|
Image(
|
||||||
image: AssetImage("assets/images/logo.png"),
|
image: AssetImage("assets/images/logo.png"),
|
||||||
width: 230,
|
width: 230,
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 25,
|
height: 25,
|
||||||
),
|
),
|
||||||
ConstrainedBox(
|
ConstrainedBox(
|
||||||
constraints: BoxConstraints(maxWidth: 520),
|
constraints: BoxConstraints(maxWidth: 520),
|
||||||
child: Text(
|
child: Text(
|
||||||
"Explore les nouvelles découvertes musicales de tes amis, et partage leur ton mood.",
|
"Explore les nouvelles découvertes musicales de tes amis, et partage leur ton mood.",
|
||||||
style: GoogleFonts.plusJakartaSans(
|
style: GoogleFonts.plusJakartaSans(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontWeight: FontWeight.w200,
|
fontWeight: FontWeight.w200,
|
||||||
fontSize: 15),
|
fontSize: 15),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
flex: 3,
|
flex: 3,
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
JoinButton(),
|
JoinButton(),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: defaultPadding,
|
height: defaultPadding,
|
||||||
),
|
),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.pushNamed(context, '/login');
|
Navigator.pushNamed(context, '/login');
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(3.0),
|
padding: const EdgeInsets.all(3.0),
|
||||||
child: Text(
|
child: Text(
|
||||||
"Tu as déja un compte? Connexion",
|
"Tu as déja un compte ? Connexion",
|
||||||
style: GoogleFonts.plusJakartaSans(
|
style: GoogleFonts.plusJakartaSans(
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
fontWeight: FontWeight.w400,
|
fontWeight: FontWeight.w400,
|
||||||
fontSize: 15),
|
fontSize: 15),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
) /* add child content here */,
|
) /* add child content here */,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
|
|
||||||
|
class CapsuleService {
|
||||||
|
Future<List<bool>> recapSevenDays(String id) async {
|
||||||
|
List<bool> recapList = [];
|
||||||
|
|
||||||
|
DateTime sevenDaysAgo = DateTime.now().subtract(Duration(days: 6));
|
||||||
|
|
||||||
|
QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore
|
||||||
|
.instance
|
||||||
|
.collection("capsules")
|
||||||
|
.where("user_id", isEqualTo: id)
|
||||||
|
.get();
|
||||||
|
|
||||||
|
List<Map<String, dynamic>?> capsuleList = response.docs
|
||||||
|
.map((DocumentSnapshot<Map<String, dynamic>> doc) => doc.data())
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
for (int i = 0; i < 7; i++) {
|
||||||
|
DateTime date = sevenDaysAgo.add(Duration(days: i));
|
||||||
|
bool capsuleExists = capsuleList.any((post) =>
|
||||||
|
post?["date"] != null &&
|
||||||
|
post?["date"].toDate().year == date.year &&
|
||||||
|
post?["date"].toDate().month == date.month &&
|
||||||
|
post?["date"].toDate().day == date.day);
|
||||||
|
|
||||||
|
recapList.add(capsuleExists);
|
||||||
|
}
|
||||||
|
|
||||||
|
return recapList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,49 +1,53 @@
|
|||||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
|
|
||||||
class MusicService {
|
class MusicService {
|
||||||
Future<dynamic> getFavoriteMusicsByUserId(String id) async {
|
Future<dynamic> getFavoriteMusicsByUserId(String id) async {
|
||||||
var response =
|
var response = await FirebaseFirestore.instance.collection("users").doc(id).get();
|
||||||
await FirebaseFirestore.instance.collection("users").doc(id).get();
|
|
||||||
if (response.exists) {
|
if (response.exists) {
|
||||||
var musicFavorite = response.get("musics_likes");
|
var musicFavorite = response.get("saved_musics");
|
||||||
return List.from(musicFavorite);
|
return List.from(musicFavorite);
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteFavoriteMusic(String id) async {
|
|
||||||
var userRef = await FirebaseFirestore.instance
|
|
||||||
.collection("users")
|
|
||||||
.doc(MyApp.userViewModel.userCurrent.id);
|
|
||||||
var response = await userRef.get();
|
|
||||||
|
|
||||||
List<dynamic> musicFavorite = List.from(response.get("musics_likes"));
|
|
||||||
if (!musicFavorite.contains(id)) {
|
|
||||||
musicFavorite.remove(id);
|
|
||||||
await userRef.update({"musics_likes": musicFavorite});
|
|
||||||
} else {
|
|
||||||
print("Delete error: The music is not in the user's favorite music list");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<bool> addOrDeleteFavoriteMusic(String id) async {
|
Future<bool> addOrDeleteFavoriteMusic(String id) async {
|
||||||
var userRef = await FirebaseFirestore.instance
|
var userRef = await FirebaseFirestore.instance.collection("users").doc(MyApp.userViewModel.userCurrent.id);
|
||||||
.collection("users")
|
|
||||||
.doc(MyApp.userViewModel.userCurrent.id);
|
|
||||||
var response = await userRef.get();
|
var response = await userRef.get();
|
||||||
|
|
||||||
List<dynamic> musicFavorite = List.from(response.get("musics_likes"));
|
List<String> musicFavorite = List.from(response.get("musics_likes"));
|
||||||
|
|
||||||
if (!musicFavorite.contains(id)) {
|
if (!musicFavorite.contains(id)) {
|
||||||
musicFavorite.add(id);
|
musicFavorite.add(id);
|
||||||
await userRef.update({"musics_likes": musicFavorite});
|
await userRef.update({"musics_likes": musicFavorite});
|
||||||
|
MyApp.userViewModel.userCurrent.musicsLikes.add(id);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
musicFavorite.remove(id);
|
musicFavorite.remove(id);
|
||||||
await userRef.update({"musics_likes": musicFavorite});
|
await userRef.update({"musics_likes": musicFavorite});
|
||||||
|
MyApp.userViewModel.userCurrent.musicsLikes.remove(id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<List<Tuple2<int, String>>> getHistoryCapsulesMonthWhitIdUser(String idUser, int month, int year) async {
|
||||||
|
List<Tuple2<int, String>> capsules = [];
|
||||||
|
|
||||||
|
var querySnapshot = await FirebaseFirestore.instance
|
||||||
|
.collection('capsules')
|
||||||
|
.where('user_id', isEqualTo: idUser)
|
||||||
|
.where('date', isGreaterThanOrEqualTo: DateTime(year, month))
|
||||||
|
.where('date', isLessThan: DateTime(year, month + 1))
|
||||||
|
.orderBy('date')
|
||||||
|
.get();
|
||||||
|
|
||||||
|
for (var document in querySnapshot.docs) {
|
||||||
|
capsules.add(Tuple2(document.data()['date'].toDate().day, document.data()['song_id']));
|
||||||
|
}
|
||||||
|
|
||||||
|
return capsules;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
const geoKey = "85a2724ad38b3994c2b7ebe1d239bbff";
|
const geoKey = "85a2724ad38b3994c2b7ebe1d239bbff";
|
||||||
const clientId = "d9b82921bbdf43efa15d0c34c28c6f93";
|
const clientId = "d9b82921bbdf43efa15d0c34c28c6f93";
|
||||||
const clientSecret = "ba01687f59ea4ab7ad00c769e89e44d8";
|
const clientSecret = "ba01687f59ea4ab7ad00c769e89e44d8";
|
||||||
const keyApiFirebase =
|
const keyApiFirebase =
|
||||||
"AAAA56TmIPg:APA91bFeKMr_i6CbUuuUdFI1XkdaNE2A7OVHzxrPIsOSlDfhR6qzZwof7JNGxthWUKj1dRHQMheWNYaLbf3AtXUp9o4DX_gB2073yR4urqUEh9CjvnxVws_9g1cWMgmFS3EpaQEA3icC";
|
"AAAA56TmIPg:APA91bFeKMr_i6CbUuuUdFI1XkdaNE2A7OVHzxrPIsOSlDfhR6qzZwof7JNGxthWUKj1dRHQMheWNYaLbf3AtXUp9o4DX_gB2073yR4urqUEh9CjvnxVws_9g1cWMgmFS3EpaQEA3icC";
|