Compare commits
No commits in common. 'master' and 'NOTIFICATION_EKA' have entirely different histories.
master
...
NOTIFICATI
Before Width: | Height: | Size: 162 KiB |
Before Width: | Height: | Size: 844 KiB |
@ -1,5 +0,0 @@
|
||||
{
|
||||
"projects": {
|
||||
"default": "justmusic-435d5"
|
||||
}
|
||||
}
|
@ -1,45 +1,30 @@
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: "db7ef5bf9f59442b0e200a90587e8fa5e0c6336a"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
|
||||
# Tracks metadata for the flutter migrate command
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
- platform: android
|
||||
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
- platform: ios
|
||||
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
- platform: linux
|
||||
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
- platform: macos
|
||||
create_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
base_revision: db7ef5bf9f59442b0e200a90587e8fa5e0c6336a
|
||||
- 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'
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled.
|
||||
|
||||
version:
|
||||
revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
||||
channel: stable
|
||||
|
||||
project_type: app
|
||||
|
||||
# Tracks metadata for the flutter migrate command
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
||||
base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
||||
- platform: android
|
||||
create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
||||
base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8
|
||||
|
||||
# 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.justdev.justmusic
|
||||
package com.example.justmusic
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 544 B |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 442 B |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 721 B |
Before Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 52 KiB |
@ -1,6 +1,9 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.justmusic">
|
||||
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
</manifest>
|
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 983 B |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 9.2 KiB |
@ -1,17 +0,0 @@
|
||||
{
|
||||
"hosting": {
|
||||
"site": "justmusic-435d5",
|
||||
"public": "build/web",
|
||||
"ignore": [
|
||||
"firebase.json",
|
||||
"**/.*",
|
||||
"**/node_modules/**"
|
||||
],
|
||||
"rewrites": [
|
||||
{
|
||||
"source": "**",
|
||||
"destination": "/index.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -1,2 +1 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||
#include "Generated.xcconfig"
|
||||
|
@ -1,2 +1 @@
|
||||
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||
#include "Generated.xcconfig"
|
||||
|
@ -1,44 +0,0 @@
|
||||
# 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
|
@ -1,958 +0,0 @@
|
||||
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: 60 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 729 B After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 3.5 KiB |
@ -1,36 +1,34 @@
|
||||
<?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">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CLIENT_ID</key>
|
||||
<string>994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com</string>
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
|
||||
<key>ANDROID_CLIENT_ID</key>
|
||||
<string>994903990520-073l30b0afj0uq7apsvc8p8ukantpu6q.apps.googleusercontent.com</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyBbYqsR6t7JTi8_XFNEHd43IRuKlYGeI3U</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>994903990520</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>com.example.justmusic</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>justmusic-435d5</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>justmusic-435d5.appspot.com</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_APPINVITE_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_GCM_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:994903990520:ios:93188f32e320babe0a9b0d</string>
|
||||
</dict>
|
||||
<?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">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CLIENT_ID</key>
|
||||
<string>994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf.apps.googleusercontent.com</string>
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.994903990520-n6jd98ena56kb1tvtrd67tvb5et3nfbf</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyBbYqsR6t7JTi8_XFNEHd43IRuKlYGeI3U</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>994903990520</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>com.example.justmusic</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>justmusic-435d5</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>justmusic-435d5.appspot.com</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_APPINVITE_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_GCM_ENABLED</key>
|
||||
<true></true>
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:994903990520:ios:93188f32e320babe0a9b0d</string>
|
||||
</dict>
|
||||
</plist>
|
@ -1,12 +0,0 @@
|
||||
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.
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"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,105 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:justmusic/main.dart';
|
||||
import 'package:justmusic/values/constants.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
|
||||
import '../model/Music.dart';
|
||||
|
||||
class HistoricComponent extends StatefulWidget {
|
||||
final int month;
|
||||
final int year;
|
||||
const HistoricComponent({super.key, required this.month, required this.year});
|
||||
|
||||
@override
|
||||
State<HistoricComponent> createState() => _HistoricComponentState();
|
||||
}
|
||||
|
||||
class _HistoricComponentState extends State<HistoricComponent> {
|
||||
int getNumberOfDaysInMonth(int year, int month) {
|
||||
if (month < 1 || month > 12) {
|
||||
throw ArgumentError("Le numéro de mois doit être compris entre 1 et 12.");
|
||||
}
|
||||
|
||||
return DateTime(year, month + 1, 0).day;
|
||||
}
|
||||
|
||||
getHistoric() {}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FutureBuilder(
|
||||
future: MyApp.musicViewModel
|
||||
.getHistoryCapsulesMonthWhitIdUser(MyApp.userViewModel.userCurrent.id, widget.month, widget.year),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return Container(
|
||||
constraints: const BoxConstraints( maxWidth: 600),
|
||||
child: Wrap(
|
||||
spacing: 14,
|
||||
runSpacing: 14,
|
||||
children: List.generate(getNumberOfDaysInMonth(widget.year, widget.month), (index) {
|
||||
Tuple2<int, Music>? checkCapsule;
|
||||
if (snapshot.data != null) {
|
||||
for (var element in snapshot.data!) {
|
||||
if (element.item1 == index + 1) {
|
||||
checkCapsule = element;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((widget.year > DateTime.now().year || widget.month > DateTime.now().month) ||
|
||||
(widget.year == DateTime.now().year &&
|
||||
widget.month == DateTime.now().month &&
|
||||
index > DateTime.now().day)) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(colors: [
|
||||
Color(0xFF1E1E1E).withOpacity(0.7),
|
||||
Color(0xFF1E1E1E).withOpacity(0),
|
||||
], begin: Alignment.topCenter, end: Alignment.bottomCenter),
|
||||
borderRadius: BorderRadius.circular(5)),
|
||||
height: 60,
|
||||
width: 60,
|
||||
);
|
||||
}
|
||||
if (checkCapsule != null) {
|
||||
return Tooltip(
|
||||
message: "${checkCapsule.item2.artists.first.name} - ${checkCapsule.item2.title}".length < 30? "${checkCapsule.item2.artists.first.name} - ${checkCapsule.item2.title}": "${checkCapsule.item2.artists.first.name} - ${checkCapsule.item2.title}".substring(0,30)+"...",
|
||||
decoration: const BoxDecoration(
|
||||
border: Border.fromBorderSide(BorderSide(color: Color(0xFF3A3A3A), width: 1)),
|
||||
color: tooltipBackground, borderRadius: BorderRadius.all(Radius.circular(20))
|
||||
),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(image: NetworkImage((checkCapsule.item2.cover)!)),
|
||||
borderRadius: BorderRadius.circular(5)),
|
||||
height: 60,
|
||||
width: 60,
|
||||
));
|
||||
} else {
|
||||
return Container(
|
||||
color: bgColor,
|
||||
height: 60,
|
||||
width: 60,
|
||||
child: Center(
|
||||
child: Text(
|
||||
(index + 1).toString(),
|
||||
style:
|
||||
GoogleFonts.plusJakartaSans(color: Colors.white, fontSize: 22, fontWeight: FontWeight.w800),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Generate widgets
|
||||
}),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return CupertinoActivityIndicator();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
import '../values/constants.dart';
|
||||
|
||||
class LittleCapsule extends StatelessWidget {
|
||||
final bool isEmpty;
|
||||
final DateTime date;
|
||||
const LittleCapsule({super.key, required this.isEmpty, required this.date});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (isEmpty) {
|
||||
return Flexible(
|
||||
child: Container(
|
||||
constraints: BoxConstraints(maxWidth: 45, maxHeight: 45),
|
||||
decoration: BoxDecoration(
|
||||
color: searchBarColor,
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
border: Border.all(color: Color(0xFF282828), width: 1),
|
||||
),
|
||||
child: const Center(
|
||||
child: Icon(
|
||||
Icons.rocket_launch,
|
||||
color: Color(0xFF464646),
|
||||
size: 18,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return Flexible(
|
||||
child: Container(
|
||||
constraints: BoxConstraints(maxWidth: 45, maxHeight: 45),
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
colors: [bgModal, bgModal.withOpacity(0)],
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
stops: [0, 1]),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Center(
|
||||
child: Text(
|
||||
date.day.toString(),
|
||||
style: GoogleFonts.plusJakartaSans(color: Color(0xFF464646), fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../config/routes.dart';
|
||||
import '../model/User.dart';
|
||||
|
||||
class ProfilPictureComponent extends StatelessWidget {
|
||||
final User user;
|
||||
const ProfilPictureComponent({super.key, required this.user});
|
||||
|
||||
void _openDetail(BuildContext context) {
|
||||
print("cc");
|
||||
Navigator.of(context).push(routeUser(user));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
_openDetail(context);
|
||||
},
|
||||
child: ClipOval(
|
||||
child: SizedBox(
|
||||
height: 40,
|
||||
width: 40,
|
||||
// Image radius
|
||||
child: FadeInImage.assetNetwork(
|
||||
image: user.pp,
|
||||
fit: BoxFit.cover,
|
||||
fadeInDuration: const Duration(milliseconds: 100),
|
||||
placeholder: "assets/images/loadingPlaceholder.gif",
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,124 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import '../main.dart';
|
||||
import '../model/User.dart' as justMusic;
|
||||
import '../values/constants.dart';
|
||||
import 'little_post_recap_component.dart';
|
||||
|
||||
class RecapComponent extends StatelessWidget {
|
||||
final justMusic.User user;
|
||||
const RecapComponent({super.key, required this.user});
|
||||
|
||||
Future<List<bool>>? _fetchdata() async {
|
||||
return await MyApp.postViewModel.recapSevenDays(user.id);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<String> weekDays = ['L', 'M', 'M', 'J', 'V', 'S', 'D'];
|
||||
DateTime currentDate = DateTime.now();
|
||||
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: profileBttnColor,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
border: Border.all(color: grayColor, width: 1)),
|
||||
height: 120,
|
||||
clipBehavior: Clip.hardEdge,
|
||||
child: Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
decoration: BoxDecoration(
|
||||
color: postbutton,
|
||||
borderRadius: BorderRadius.only(topRight: Radius.circular(10), topLeft: Radius.circular(10)),
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 6)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 5)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 4)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 3)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 2)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 1)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: Text(
|
||||
weekDays[currentDate.subtract(Duration(days: 0)).weekday - 1].substring(0, 1),
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w800, fontSize: 17),
|
||||
),
|
||||
)),
|
||||
],
|
||||
),
|
||||
)),
|
||||
FutureBuilder<List<bool>>(
|
||||
future: _fetchdata(), // a previously-obtained Future<String> or null
|
||||
builder: (BuildContext context, AsyncSnapshot<List<bool>> snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.all(12),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
LittleCapsule(
|
||||
isEmpty: snapshot.data![0],
|
||||
date: currentDate.subtract(const Duration(days: 6)),
|
||||
),
|
||||
LittleCapsule(isEmpty: snapshot.data![1], date: currentDate.subtract(const Duration(days: 5))),
|
||||
LittleCapsule(isEmpty: snapshot.data![2], date: currentDate.subtract(const Duration(days: 4))),
|
||||
LittleCapsule(isEmpty: snapshot.data![3], date: currentDate.subtract(const Duration(days: 3))),
|
||||
LittleCapsule(isEmpty: snapshot.data![4], date: currentDate.subtract(const Duration(days: 2))),
|
||||
LittleCapsule(isEmpty: snapshot.data![5], date: currentDate.subtract(const Duration(days: 1))),
|
||||
LittleCapsule(isEmpty: snapshot.data![6], date: currentDate.subtract(const Duration(days: 0))),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Container();
|
||||
}
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
class UserException implements Exception {
|
||||
String code;
|
||||
String description;
|
||||
|
||||
UserException(this.code,this.description);
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
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,151 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
import '../components/historic_component.dart';
|
||||
import '../values/constants.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
class CapsuleHistoricScreen extends StatefulWidget {
|
||||
const CapsuleHistoricScreen({super.key});
|
||||
|
||||
@override
|
||||
State<CapsuleHistoricScreen> createState() => _CapsuleHistoricScreenState();
|
||||
}
|
||||
|
||||
class _CapsuleHistoricScreenState extends State<CapsuleHistoricScreen> {
|
||||
DateTime date = DateTime.now();
|
||||
|
||||
_reduceMonth() {
|
||||
setState(() {
|
||||
date = DateTime(date.year, date.month - 1, date.day);
|
||||
});
|
||||
}
|
||||
|
||||
_addMonth() {
|
||||
setState(() {
|
||||
date = DateTime(date.year, date.month + 1, date.day);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: Size(double.infinity, 58),
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
color: bgAppBar,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: defaultPadding),
|
||||
child: Stack(
|
||||
alignment: Alignment.centerLeft,
|
||||
children: [
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.translucent,
|
||||
onTap: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
height: 30,
|
||||
width: 30,
|
||||
child: Image(
|
||||
image: AssetImage("assets/images/return_icon.png"),
|
||||
height: 8,
|
||||
),
|
||||
)),
|
||||
Align(
|
||||
child: Text(
|
||||
"Historique des capsules",
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
color: bgColor,
|
||||
child: SingleChildScrollView(
|
||||
physics: const BouncingScrollPhysics(decelerationRate: ScrollDecelerationRate.fast),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: settingPadding),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.only(top: 80, left: 30, right: 30),
|
||||
constraints: const BoxConstraints( maxWidth: 700),
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
GestureDetector(
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
height: 30,
|
||||
width: 30,
|
||||
child: Image(
|
||||
image: AssetImage("assets/images/return_icon.png"),
|
||||
height: 8,
|
||||
),
|
||||
),
|
||||
onTap: _reduceMonth,
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 30),
|
||||
child: Text(
|
||||
'${DateFormat.MMMM('fr_FR').format(date)[0].toUpperCase()}${DateFormat.MMMM('fr_FR').format(date).substring(1)} ${date.year}',
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w600, fontSize: 16),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: _addMonth,
|
||||
child: Transform(
|
||||
alignment: Alignment.center,
|
||||
transform: Matrix4.rotationY(3.14159265),
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
height: 30,
|
||||
width: 30,
|
||||
child: Image(
|
||||
image: AssetImage("assets/images/return_icon.png"),
|
||||
height: 8,
|
||||
),
|
||||
)),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 30, bottom: 40),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Container(
|
||||
child: Column(
|
||||
children: [
|
||||
HistoricComponent(
|
||||
month: date.month,
|
||||
year: date.year,
|
||||
),
|
||||
],
|
||||
),
|
||||
)),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,311 +0,0 @@
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:justmusic/main.dart';
|
||||
|
||||
import '../values/constants.dart';
|
||||
|
||||
class ChangePasswordScreen extends StatefulWidget {
|
||||
const ChangePasswordScreen({super.key});
|
||||
|
||||
@override
|
||||
State<ChangePasswordScreen> createState() => _ChangePasswordScreenState();
|
||||
}
|
||||
|
||||
class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
|
||||
final _currentPasswordTextField = TextEditingController();
|
||||
final _newPasswordTextField = TextEditingController();
|
||||
final _confirmPasswordTextField = TextEditingController();
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
Future<void> resetFullScreen() async {
|
||||
await SystemChannels.platform.invokeMethod<void>(
|
||||
'SystemChrome.restoreSystemUIOverlays',
|
||||
);
|
||||
}
|
||||
|
||||
handleChange() async {
|
||||
print("test");
|
||||
if (_formKey.currentState!.validate()) {
|
||||
var error;
|
||||
try {
|
||||
await FirebaseAuth.instance.signInWithEmailAndPassword(
|
||||
email: MyApp.userViewModel.userCurrent.mail,
|
||||
password: _currentPasswordTextField.text,
|
||||
);
|
||||
if (_newPasswordTextField.text == _confirmPasswordTextField.text) {
|
||||
await FirebaseAuth.instance.currentUser?.updatePassword(_confirmPasswordTextField.text);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
"Mot de passe mis à jour",
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.h),
|
||||
),
|
||||
backgroundColor: primaryColor,
|
||||
closeIconColor: Colors.white,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
throw FirebaseAuthException(code: "not-same", message: "Les mots de passe ne correspondent pas");
|
||||
}
|
||||
} on FirebaseAuthException catch (e) {
|
||||
if (e.code == "wrong-password") {
|
||||
error = "Mot de passe incorrect";
|
||||
} else if (e.code == "too-many-requests") {
|
||||
error = "Trop de tentatives infructueuses. Veuillez réessayer plus tard";
|
||||
} else if (e.code == "channel-error") {
|
||||
error = "Impossible de vérifier le mot de passe";
|
||||
} else if (e.code == "weak-password") {
|
||||
error = "Le mot de passe doit contenir 6 caractères minimum";
|
||||
}
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
error ?? e.message,
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15.h),
|
||||
),
|
||||
backgroundColor: Colors.red,
|
||||
closeIconColor: Colors.white,
|
||||
),
|
||||
);
|
||||
}
|
||||
setState(() {
|
||||
_currentPasswordTextField.clear();
|
||||
_newPasswordTextField.clear();
|
||||
_confirmPasswordTextField.clear();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
FocusScopeNode currentFocus = FocusScope.of(context);
|
||||
if (!currentFocus.hasPrimaryFocus) {
|
||||
currentFocus.unfocus();
|
||||
resetFullScreen();
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: PreferredSize(
|
||||
preferredSize: Size(double.infinity, 58),
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
color: bgAppBar,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: defaultPadding),
|
||||
child: Stack(
|
||||
alignment: Alignment.centerLeft,
|
||||
children: [
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.translucent,
|
||||
onTap: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
height: 30,
|
||||
width: 30,
|
||||
child: Image(
|
||||
image: AssetImage("assets/images/return_icon.png"),
|
||||
height: 8,
|
||||
),
|
||||
)),
|
||||
Align(
|
||||
child: Text(
|
||||
"Mettre le mot de passe à jour",
|
||||
style:
|
||||
GoogleFonts.plusJakartaSans(color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
color: bgColor,
|
||||
child: SingleChildScrollView(
|
||||
physics: const BouncingScrollPhysics(decelerationRate: ScrollDecelerationRate.fast),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: settingPadding),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 30, bottom: 40),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
child: Stack(
|
||||
alignment: Alignment.center,
|
||||
children: [
|
||||
Container(
|
||||
constraints: BoxConstraints(maxWidth: 600),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(right: 10),
|
||||
child: Text(
|
||||
"Mot de passe actuel",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16),
|
||||
),
|
||||
)),
|
||||
Expanded(
|
||||
child: TextFormField(
|
||||
controller: _currentPasswordTextField,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when you click the TextField
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when the TextField is disabled
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
filled: true,
|
||||
hintText: '6 caractères minimum',
|
||||
hintStyle: GoogleFonts.plusJakartaSans(color: strokeTextField)),
|
||||
maxLines: 1,
|
||||
obscureText: true,
|
||||
cursorColor: primaryColor,
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: grayText, fontWeight: FontWeight.w400, fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(right: 10),
|
||||
child: Text(
|
||||
"Nouveau mot de passe",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16),
|
||||
),
|
||||
)),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
controller: _newPasswordTextField,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when you click the TextField
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when the TextField is disabled
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
filled: true,
|
||||
hintText: '6 caractères minimum',
|
||||
hintStyle: GoogleFonts.plusJakartaSans(color: strokeTextField)),
|
||||
maxLines: 1,
|
||||
obscureText: true,
|
||||
cursorColor: primaryColor,
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: grayText, fontWeight: FontWeight.w400, fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(right: 10),
|
||||
child: Text(
|
||||
"Confirmer",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontWeight: FontWeight.w800, fontSize: 16),
|
||||
),
|
||||
)),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
obscureText: true,
|
||||
controller: _confirmPasswordTextField,
|
||||
decoration: InputDecoration(
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when you click the TextField
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
// Hides the border when the TextField is disabled
|
||||
disabledBorder: OutlineInputBorder(
|
||||
borderSide: const BorderSide(color: Colors.transparent),
|
||||
),
|
||||
filled: true,
|
||||
hintText: '6 caractères minimum',
|
||||
hintStyle: GoogleFonts.plusJakartaSans(color: strokeTextField)),
|
||||
maxLines: 1,
|
||||
cursorColor: primaryColor,
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: grayText, fontWeight: FontWeight.w400, fontSize: 16),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: handleChange,
|
||||
child: Align(
|
||||
child: Container(
|
||||
height: 35,
|
||||
width: 160,
|
||||
decoration:
|
||||
BoxDecoration(color: primaryColor, borderRadius: BorderRadius.all(Radius.circular(10))),
|
||||
child: Center(
|
||||
child: Text(
|
||||
"Mettre à jour",
|
||||
style: GoogleFonts.plusJakartaSans(color: Colors.white),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -1,307 +1,273 @@
|
||||
import 'dart:async';
|
||||
import 'package:circular_reveal_animation/circular_reveal_animation.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:justmusic/main.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
import '../components/post_component.dart';
|
||||
import '../components/top_nav_bar_component.dart';
|
||||
import '../model/Post.dart';
|
||||
import '../values/constants.dart';
|
||||
import 'detail_post_screen.dart';
|
||||
|
||||
class FeedScreen extends StatefulWidget {
|
||||
const FeedScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<FeedScreen> createState() => _FeedScreenState();
|
||||
}
|
||||
|
||||
class _FeedScreenState extends State<FeedScreen> with SingleTickerProviderStateMixin {
|
||||
late AnimationController animationController;
|
||||
late Animation<double> animation;
|
||||
late List<Post> friendFeed;
|
||||
Timer? timer;
|
||||
var pageFriend = 0;
|
||||
late List<Post> discoveryFeed;
|
||||
late Tuple2<List<Post>, List<Post>> displayFeed;
|
||||
bool isDismissed = true;
|
||||
bool choiceFeed = true;
|
||||
PageController controller = PageController();
|
||||
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
friendFeed = MyApp.postViewModel.postsFriends;
|
||||
discoveryFeed = MyApp.postViewModel.bestPosts;
|
||||
|
||||
animationController = AnimationController(
|
||||
vsync: this,
|
||||
duration: Duration(milliseconds: 400),
|
||||
);
|
||||
animation = CurvedAnimation(
|
||||
parent: animationController,
|
||||
curve: Curves.easeInOutSine,
|
||||
);
|
||||
animationController.forward();
|
||||
_fetchData().then((tuple) {
|
||||
friendFeed = tuple.item2;
|
||||
discoveryFeed = tuple.item1;
|
||||
setState(() {});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
controller.dispose();
|
||||
animationController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> _refresh() async {
|
||||
Tuple2<List<Post>, List<Post>> tuple = await _fetchData();
|
||||
displayFeed = Tuple2(tuple.item1, tuple.item2);
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
void changeFeed(bool choice) {
|
||||
setState(() {
|
||||
if (choice) {
|
||||
controller.nextPage(duration: Duration(milliseconds: 300), curve: Curves.linear);
|
||||
} else {
|
||||
controller.previousPage(duration: Duration(milliseconds: 300), curve: Curves.linear);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void openDetailPost(Post post) {
|
||||
showModalBottomSheet(
|
||||
backgroundColor: bgModal,
|
||||
elevation: 1,
|
||||
constraints: const BoxConstraints(
|
||||
maxWidth: 600,
|
||||
),
|
||||
isScrollControlled: true,
|
||||
context: context,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20))),
|
||||
builder: ((BuildContext context) {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)),
|
||||
child: SizedBox(
|
||||
height: 760.h,
|
||||
child: Scaffold(
|
||||
primary: false,
|
||||
extendBody: false,
|
||||
backgroundColor: Colors.transparent,
|
||||
body: DetailPostScreen(post: post)),
|
||||
));
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
_fetchData() async {
|
||||
friendFeed = await MyApp.postViewModel.getPostsFriends();
|
||||
discoveryFeed = await MyApp.postViewModel.getBestPosts();
|
||||
return Tuple2(friendFeed, discoveryFeed);
|
||||
}
|
||||
|
||||
switchTopBar(int index) {
|
||||
if (index == 0) {
|
||||
setState(() {
|
||||
choiceFeed = true;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
choiceFeed = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
displayFeed =
|
||||
Tuple2(MyApp.postViewModel.postsFriends.toList(), MyApp.postViewModel.bestPosts.toList());
|
||||
bool empty =
|
||||
(choiceFeed == true && displayFeed.item1.isEmpty) || (choiceFeed == false && displayFeed.item2.isEmpty);
|
||||
ScrollController _scrollController = ScrollController();
|
||||
_scrollController.addListener(() {
|
||||
if (_scrollController.position.maxScrollExtent ==
|
||||
_scrollController.position.pixels) {
|
||||
print("fin");
|
||||
if (choiceFeed) {
|
||||
setState(() {
|
||||
MyApp.postViewModel.getMorePostsFriends();
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
MyApp.postViewModel.getMoreBestPosts();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
backgroundColor: bgColor,
|
||||
extendBodyBehindAppBar: true,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
AnimatedOpacity(
|
||||
opacity: empty ? 1 : 0,
|
||||
duration: const Duration(milliseconds: 300),
|
||||
curve: Curves.easeIn,
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
image:
|
||||
DecorationImage(image: AssetImage("assets/images/empty_bg.png"), fit: BoxFit.cover, opacity: 0.3),
|
||||
),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 140.h, left: defaultPadding),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text("Suis tes amis pour voir leurs capsules",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white, fontSize: 23, fontWeight: FontWeight.w800))
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
PageView(
|
||||
onPageChanged: (value) {
|
||||
switchTopBar(value);
|
||||
},
|
||||
controller: controller,
|
||||
scrollBehavior: const ScrollBehavior().copyWith(overscroll: false),
|
||||
physics: AlwaysScrollableScrollPhysics(),
|
||||
scrollDirection: Axis.horizontal,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: CircularRevealAnimation(
|
||||
animation: animation,
|
||||
centerOffset: Offset(30.w, -100),
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
constraints: BoxConstraints(maxWidth: 600),
|
||||
padding: EdgeInsets.fromLTRB(defaultPadding, 100.h, defaultPadding, 0),
|
||||
child: RefreshIndicator(
|
||||
displacement: 20,
|
||||
triggerMode: RefreshIndicatorTriggerMode.onEdge,
|
||||
onRefresh: _refresh,
|
||||
child: ListView.builder(
|
||||
physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
|
||||
clipBehavior: Clip.none,
|
||||
shrinkWrap: false,
|
||||
controller: _scrollController,
|
||||
itemCount: displayFeed.item1.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 40),
|
||||
child:
|
||||
PostComponent(callback: openDetailPost, post: displayFeed.item1[index], index: index),
|
||||
);
|
||||
},
|
||||
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: CircularRevealAnimation(
|
||||
animation: animation,
|
||||
centerOffset: Offset(30.w, -100),
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
constraints: BoxConstraints(maxWidth: 600),
|
||||
padding: EdgeInsets.fromLTRB(defaultPadding, 100.h, defaultPadding, 0),
|
||||
child: RefreshIndicator(
|
||||
displacement: 20,
|
||||
triggerMode: RefreshIndicatorTriggerMode.onEdge,
|
||||
onRefresh: _refresh,
|
||||
child: ListView.builder(
|
||||
controller: _scrollController,
|
||||
physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()),
|
||||
clipBehavior: Clip.none,
|
||||
shrinkWrap: false,
|
||||
itemCount: displayFeed.item2.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.only(bottom: 40),
|
||||
child:
|
||||
PostComponent(callback: openDetailPost, post: displayFeed.item2[index], index: index),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: IgnorePointer(
|
||||
child: Container(
|
||||
height: 240.h,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topRight,
|
||||
stops: [0.3, 1],
|
||||
colors: [bgColor.withOpacity(0.9), bgColor.withOpacity(0)])),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(maxWidth: 800),
|
||||
child: TopNavBarComponent(callback: changeFeed, choice: choiceFeed),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class NoEdgeEffectScrollPhysics extends ScrollPhysics {
|
||||
const NoEdgeEffectScrollPhysics({ScrollPhysics? parent}) : super(parent: parent);
|
||||
|
||||
@override
|
||||
NoEdgeEffectScrollPhysics applyTo(ScrollPhysics? ancestor) {
|
||||
return NoEdgeEffectScrollPhysics(parent: buildParent(ancestor));
|
||||
}
|
||||
|
||||
@override
|
||||
double applyBoundaryConditions(ScrollMetrics position, double value) {
|
||||
// Supprimez l'effet de bord (effet de vague)
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@override
|
||||
double applyPhysicsToUserOffset(ScrollMetrics position, double offset) {
|
||||
// Supprimez la rétroaction haptique
|
||||
return offset;
|
||||
}
|
||||
|
||||
@override
|
||||
Simulation? createBallisticSimulation(ScrollMetrics position, double velocity) {
|
||||
// Désactivez l'overscroll
|
||||
return super.createBallisticSimulation(position, 0.0);
|
||||
}
|
||||
}
|
||||
import 'dart:async';
|
||||
import 'package:circular_reveal_animation/circular_reveal_animation.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:justmusic/main.dart';
|
||||
import 'package:justmusic/main.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
import '../components/post_component.dart';
|
||||
import '../components/top_nav_bar_component.dart';
|
||||
import '../model/Post.dart';
|
||||
import '../values/constants.dart';
|
||||
import 'detail_post_screen.dart';
|
||||
|
||||
class FeedScreen extends StatefulWidget {
|
||||
const FeedScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<FeedScreen> createState() => _FeedScreenState();
|
||||
}
|
||||
|
||||
class _FeedScreenState extends State<FeedScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
late AnimationController animationController;
|
||||
late Animation<double> animation;
|
||||
late List<Post> friendFeed;
|
||||
Timer? timer;
|
||||
|
||||
late List<Post> discoveryFeed;
|
||||
late List<Post> displayFeed;
|
||||
bool isDismissed = true;
|
||||
bool choiceFeed = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
friendFeed = MyApp.postViewModel.postsFriends;
|
||||
discoveryFeed = MyApp.postViewModel.bestPosts;
|
||||
animationController = AnimationController(
|
||||
vsync: this,
|
||||
duration: Duration(milliseconds: 400),
|
||||
);
|
||||
animation = CurvedAnimation(
|
||||
parent: animationController,
|
||||
curve: Curves.easeInOutSine,
|
||||
);
|
||||
animationController.forward();
|
||||
}
|
||||
|
||||
Future _refresh() async {
|
||||
if (choiceFeed) {
|
||||
await MyApp.postViewModel.getBestPosts();
|
||||
setState(() {});
|
||||
} else {
|
||||
await MyApp.postViewModel.getPostsFriends();
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
|
||||
void changeFeed(bool choice) {
|
||||
// Mettez ici le code pour l'action que vous souhaitez effectuer avec le paramètre
|
||||
if (choice) {
|
||||
setState(() {
|
||||
animationController.reset();
|
||||
displayFeed = MyApp.postViewModel.postsFriends.reversed.toList();
|
||||
animationController.forward();
|
||||
choiceFeed = false;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
animationController.reset();
|
||||
displayFeed = MyApp.postViewModel.bestPosts.reversed.toList();
|
||||
animationController.forward();
|
||||
choiceFeed = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void openDetailPost(int index) {
|
||||
showModalBottomSheet(
|
||||
backgroundColor: bgModal,
|
||||
elevation: 1,
|
||||
constraints: const BoxConstraints(
|
||||
maxWidth: 600,
|
||||
),
|
||||
isScrollControlled: true,
|
||||
context: context,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(20), topRight: Radius.circular(20))),
|
||||
builder: ((BuildContext context) {
|
||||
return ClipRRect(
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(20), topRight: Radius.circular(20)),
|
||||
child: DetailPostScreen(post: displayFeed[index]));
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
_fetchData() async {
|
||||
friendFeed = await MyApp.postViewModel.getPostsFriends();
|
||||
discoveryFeed = await MyApp.postViewModel.getBestPosts();
|
||||
return Tuple2(friendFeed, displayFeed);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (choiceFeed) {
|
||||
displayFeed = MyApp.postViewModel.postsFriends.reversed.toList();
|
||||
} else {
|
||||
displayFeed = MyApp.postViewModel.bestPosts.reversed.toList();
|
||||
}
|
||||
_fetchData();
|
||||
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: true,
|
||||
backgroundColor: bgColor,
|
||||
extendBodyBehindAppBar: true,
|
||||
body: displayFeed.isEmpty
|
||||
? Container(
|
||||
width: double.infinity,
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
Container(
|
||||
decoration: const BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage("assets/images/empty_bg.png"),
|
||||
fit: BoxFit.cover,
|
||||
opacity: 0.3),
|
||||
),
|
||||
child: Padding(
|
||||
padding:
|
||||
EdgeInsets.only(top: 140.h, left: defaultPadding),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text("Suis tes amis pour voir leurs capsules",
|
||||
style: GoogleFonts.plusJakartaSans(
|
||||
color: Colors.white,
|
||||
fontSize: 23,
|
||||
fontWeight: FontWeight.w800))
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: IgnorePointer(
|
||||
child: Container(
|
||||
height: 240.h,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topRight,
|
||||
stops: [
|
||||
0.3,
|
||||
1
|
||||
],
|
||||
colors: [
|
||||
bgColor.withOpacity(0.9),
|
||||
bgColor.withOpacity(0)
|
||||
])),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(maxWidth: 800),
|
||||
child: TopNavBarComponent(callback: changeFeed),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
child: Stack(
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: CircularRevealAnimation(
|
||||
animation: animation,
|
||||
centerOffset: Offset(30.w, -100),
|
||||
child: Expanded(
|
||||
child: Container(
|
||||
height: double.infinity,
|
||||
constraints: BoxConstraints(maxWidth: 600),
|
||||
padding: EdgeInsets.fromLTRB(
|
||||
defaultPadding, 100.h, defaultPadding, 0),
|
||||
child: Expanded(
|
||||
child: FutureBuilder(
|
||||
future: _fetchData(),
|
||||
builder: (BuildContext context,
|
||||
AsyncSnapshot<dynamic> snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return RefreshIndicator(
|
||||
displacement: 20,
|
||||
triggerMode:
|
||||
RefreshIndicatorTriggerMode
|
||||
.onEdge,
|
||||
onRefresh: _refresh,
|
||||
child: Expanded(
|
||||
child: ListView.builder(
|
||||
physics:
|
||||
const AlwaysScrollableScrollPhysics(),
|
||||
clipBehavior: Clip.none,
|
||||
shrinkWrap: true,
|
||||
itemCount: displayFeed.length,
|
||||
itemBuilder:
|
||||
(BuildContext context,
|
||||
int index) {
|
||||
return Padding(
|
||||
padding:
|
||||
const EdgeInsets.only(
|
||||
bottom: 40),
|
||||
child: PostComponent(
|
||||
callback: openDetailPost,
|
||||
post: displayFeed[index],
|
||||
index: index),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Center(
|
||||
child: CupertinoActivityIndicator(),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
)),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: IgnorePointer(
|
||||
child: Container(
|
||||
height: 240.h,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topRight,
|
||||
stops: [
|
||||
0.3,
|
||||
1
|
||||
],
|
||||
colors: [
|
||||
bgColor.withOpacity(0.9),
|
||||
bgColor.withOpacity(0)
|
||||
])),
|
||||
),
|
||||
),
|
||||
),
|
||||
Align(
|
||||
alignment: Alignment.topCenter,
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(maxWidth: 800),
|
||||
child: TopNavBarComponent(callback: changeFeed),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
||||
|