Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b
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
literal 0
HcmV?d00001
diff --git a/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8
GIT binary patch
literal 1418
zcmV;51$Fv~P)q
zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+
zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq
z^={4hPQv)y=I|4n+?>7Fim=dxt1
z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT
zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf`
zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_>
z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3
zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF
z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a
z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE
z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62(
zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;?
zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-<
z{s<&cCV_1`^TD^ia9!*mQDq&
zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw
zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv
zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF
z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC
YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H
literal 0
HcmV?d00001
diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000..0bedcf2
--- /dev/null
+++ b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838
GIT binary patch
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
literal 0
HcmV?d00001
diff --git a/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000..89c2725
--- /dev/null
+++ b/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..f2e259c
--- /dev/null
+++ b/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/ios/Runner/Base.lproj/Main.storyboard b/example/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/example/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/ios/Runner/Info.plist b/example/ios/Runner/Info.plist
new file mode 100644
index 0000000..c1c8f38
--- /dev/null
+++ b/example/ios/Runner/Info.plist
@@ -0,0 +1,51 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Spinify App
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ spinifyapp
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/example/ios/Runner/Runner-Bridging-Header.h b/example/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..308a2a5
--- /dev/null
+++ b/example/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/example/ios/RunnerTests/RunnerTests.swift b/example/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 0000000..86a7c3b
--- /dev/null
+++ b/example/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/example/lib/main.dart b/example/lib/main.dart
new file mode 100644
index 0000000..f532f7c
--- /dev/null
+++ b/example/lib/main.dart
@@ -0,0 +1,33 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:l/l.dart';
+import 'package:spinifyapp/src/common/util/logger_util.dart';
+import 'package:spinifyapp/src/common/widget/app.dart';
+import 'package:spinifyapp/src/feature/dependencies/initialization/initialization.dart';
+import 'package:spinifyapp/src/feature/dependencies/widget/dependencies_scope.dart';
+import 'package:spinifyapp/src/feature/dependencies/widget/initialization_splash_screen.dart';
+
+void main() => l.capture(
+ () => runZonedGuarded(
+ () {
+ final initialization = InitializationExecutor();
+ runApp(
+ DependenciesScope(
+ initialization: initialization(),
+ splashScreen: InitializationSplashScreen(
+ progress: initialization,
+ ),
+ child: const App(),
+ ),
+ );
+ },
+ l.e,
+ ),
+ const LogOptions(
+ handlePrint: true,
+ messageFormatting: LoggerUtil.messageFormatting,
+ outputInRelease: false,
+ printColors: true,
+ ),
+ );
diff --git a/example/lib/src/common/constant/config.dart b/example/lib/src/common/constant/config.dart
new file mode 100644
index 0000000..772fef8
--- /dev/null
+++ b/example/lib/src/common/constant/config.dart
@@ -0,0 +1,81 @@
+/// Config for app.
+abstract final class Config {
+ /// Environment flavor.
+ /// e.g. development, staging, production
+ static final EnvironmentFlavor environment = EnvironmentFlavor.from(
+ const String.fromEnvironment('ENVIRONMENT', defaultValue: 'development'));
+
+ // --- Centrifuge --- //
+
+ /// Centrifuge url.
+ /// e.g. https://domain.tld
+ static const String centrifugeBaseUrl = String.fromEnvironment(
+ 'CENTRIFUGE_BASE_URL',
+ defaultValue: 'http://127.0.0.1:8000');
+
+ /// Centrifuge timeout in milliseconds.
+ /// e.g. 15000 ms
+ static const Duration centrifugeTimeout = Duration(
+ milliseconds:
+ int.fromEnvironment('CENTRIFUGE_TIMEOUT', defaultValue: 15000));
+
+ /// Secret for HMAC token.
+ static const String centrifugeToken =
+ String.fromEnvironment('CENTRIFUGE_TOKEN_HMAC_SECRET');
+
+ /// Channel by default.
+ static const String centrifugeChannel =
+ String.fromEnvironment('CENTRIFUGE_CHANNEL');
+
+ /// Username by default.
+ static const String centrifugeUsername =
+ String.fromEnvironment('CENTRIFUGE_USERNAME');
+ // --- Layout --- //
+
+ /// Maximum screen layout width for screen with list view.
+ static const int maxScreenLayoutWidth =
+ int.fromEnvironment('MAX_LAYOUT_WIDTH', defaultValue: 768);
+}
+
+/// Environment flavor.
+/// e.g. development, staging, production
+enum EnvironmentFlavor {
+ /// Local
+ local('local'),
+
+ /// Development
+ development('development'),
+
+ /// Staging
+ staging('staging'),
+
+ /// Production
+ production('production');
+
+ /// {@nodoc}
+ const EnvironmentFlavor(this.value);
+
+ /// {@nodoc}
+ factory EnvironmentFlavor.from(String? value) =>
+ switch (value?.trim().toLowerCase()) {
+ 'local' || 'loc' || 'lcl' || 'l' => development,
+ 'development' || 'debug' || 'develop' || 'dev' || 'd' => development,
+ 'staging' || 'profile' || 'stage' || 'stg' || 's' => staging,
+ 'production' || 'release' || 'prod' || 'prd' || 'p' => production,
+ _ => const bool.fromEnvironment('dart.vm.product')
+ ? production
+ : development,
+ };
+
+ /// development, staging, production
+ final String value;
+
+ /// Whether the environment is development.
+ bool get isDevelopment => this == development;
+
+ /// Whether the environment is staging.
+ bool get isStaging => this == staging;
+
+ /// Whether the environment is production.
+ bool get isProduction => this == production;
+}
diff --git a/example/lib/src/common/constant/pubspec.yaml.g.dart b/example/lib/src/common/constant/pubspec.yaml.g.dart
new file mode 100644
index 0000000..8b1243b
--- /dev/null
+++ b/example/lib/src/common/constant/pubspec.yaml.g.dart
@@ -0,0 +1,527 @@
+// ignore_for_file: lines_longer_than_80_chars, unnecessary_raw_strings
+// ignore_for_file: use_raw_strings, avoid_classes_with_only_static_members
+// ignore_for_file: avoid_escaping_inner_quotes, prefer_single_quotes
+
+/// GENERATED CODE - DO NOT MODIFY BY HAND
+
+library pubspec;
+
+// *****************************************************************************
+// * pubspec_generator *
+// *****************************************************************************
+
+/*
+
+ MIT License
+
+ Copyright (c) 2023 Plague Fox
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+ */
+
+/// Given a version number MAJOR.MINOR.PATCH, increment the:
+///
+/// 1. MAJOR version when you make incompatible API changes
+/// 2. MINOR version when you add functionality in a backward compatible manner
+/// 3. PATCH version when you make backward compatible bug fixes
+///
+/// Additional labels for pre-release and build metadata are available
+/// as extensions to the MAJOR.MINOR.PATCH format.
+typedef PubspecVersion = ({
+ String representation,
+ String canonical,
+ int major,
+ int minor,
+ int patch,
+ List preRelease,
+ List build
+});
+
+/// # The pubspec file
+///
+/// Code generated pubspec.yaml.g.dart from pubspec.yaml
+/// This class is generated from pubspec.yaml, do not edit directly.
+///
+/// Every pub package needs some metadata so it can specify its dependencies.
+/// Pub packages that are shared with others also need to provide some other
+/// information so users can discover them. All of this metadata goes
+/// in the package’s pubspec:
+/// a file named pubspec.yaml that’s written in the YAML language.
+///
+/// Read more:
+/// - https://pub.dev/packages/pubspec_generator
+/// - https://dart.dev/tools/pub/pubspec
+sealed class Pubspec {
+ /// Version
+ ///
+ /// Current app [version]
+ ///
+ /// Every package has a version.
+ /// A version number is required to host your package on the pub.dev site,
+ /// but can be omitted for local-only packages.
+ /// If you omit it, your package is implicitly versioned 0.0.0.
+ ///
+ /// Versioning is necessary for reusing code while letting it evolve quickly.
+ /// A version number is three numbers separated by dots, like 0.2.43.
+ /// It can also optionally have a build ( +1, +2, +hotfix.oopsie)
+ /// or prerelease (-dev.4, -alpha.12, -beta.7, -rc.5) suffix.
+ ///
+ /// Each time you publish your package, you publish it at a specific version.
+ /// Once that’s been done, consider it hermetically sealed:
+ /// you can’t touch it anymore. To make more changes,
+ /// you’ll need a new version.
+ ///
+ /// When you select a version,
+ /// follow [semantic versioning](https://semver.org/).
+ static const PubspecVersion version = (
+ /// Non-canonical string representation of the version as provided
+ /// in the pubspec.yaml file.
+ representation: r'1.0.0+1',
+
+ /// Returns a 'canonicalized' representation
+ /// of the application version.
+ /// This represents the version string in accordance with
+ /// Semantic Versioning (SemVer) standards.
+ canonical: r'1.0.0+1',
+
+ /// MAJOR version when you make incompatible API changes.
+ /// The major version number: 1 in "1.2.3".
+ major: 1,
+
+ /// MINOR version when you add functionality
+ /// in a backward compatible manner.
+ /// The minor version number: 2 in "1.2.3".
+ minor: 0,
+
+ /// PATCH version when you make backward compatible bug fixes.
+ /// The patch version number: 3 in "1.2.3".
+ patch: 0,
+
+ /// The pre-release identifier: "foo" in "1.2.3-foo".
+ preRelease: [],
+
+ /// The build identifier: "foo" in "1.2.3+foo".
+ build: [r'1'],
+ );
+
+ /// Build date and time (UTC)
+ static final DateTime timestamp = DateTime.utc(
+ 2023,
+ 8,
+ 4,
+ 9,
+ 6,
+ 50,
+ 841,
+ 552,
+ );
+
+ /// Name
+ ///
+ /// Current app [name]
+ ///
+ /// Every package needs a name.
+ /// It’s how other packages refer to yours, and how it appears to the world,
+ /// should you publish it.
+ ///
+ /// The name should be all lowercase, with underscores to separate words,
+ /// just_like_this. Use only basic Latin letters and Arabic digits:
+ /// [a-z0-9_]. Also, make sure the name is a valid Dart identifier—that
+ /// it doesn’t start with digits
+ /// and isn’t a [reserved word](https://dart.dev/language/keywords).
+ ///
+ /// Try to pick a name that is clear, terse, and not already in use.
+ /// A quick search of packages on the [pub.dev site](https://pub.dev/packages)
+ /// to make sure that nothing else is using your name is recommended.
+ static const String name = r'spinifyapp';
+
+ /// Description
+ ///
+ /// Current app [description]
+ ///
+ /// This is optional for your own personal packages,
+ /// but if you intend to publish your package you must provide a description,
+ /// which should be in English.
+ /// The description should be relatively short, from 60 to 180 characters
+ /// and tell a casual reader what they might want to know about your package.
+ ///
+ /// Think of the description as the sales pitch for your package.
+ /// Users see it when they [browse for packages](https://pub.dev/packages).
+ /// The description is plain text: no markdown or HTML.
+ static const String description = r'Spinify App Example';
+
+ /// Homepage
+ ///
+ /// Current app [homepage]
+ ///
+ /// This should be a URL pointing to the website for your package.
+ /// For [hosted packages](https://dart.dev/tools/pub/dependencies#hosted-packages),
+ /// this URL is linked from the package’s page.
+ /// While providing a homepage is optional,
+ /// please provide it or repository (or both).
+ /// It helps users understand where your package is coming from.
+ static const String homepage = r'https://centrifugal.dev';
+
+ /// Repository
+ ///
+ /// Current app [repository]
+ ///
+ /// Repository
+ /// The optional repository field should contain the URL for your package’s
+ /// source code repository—for example,
+ /// https://github.com//.
+ /// If you publish your package to the pub.dev site,
+ /// then your package’s page displays the repository URL.
+ /// While providing a repository is optional,
+ /// please provide it or homepage (or both).
+ /// It helps users understand where your package is coming from.
+ static const String repository = r'https://github.com/PlugFox/spinify';
+
+ /// Issue tracker
+ ///
+ /// Current app [issueTracker]
+ ///
+ /// The optional issue_tracker field should contain a URL for the package’s
+ /// issue tracker, where existing bugs can be viewed and new bugs can be filed.
+ /// The pub.dev site attempts to display a link
+ /// to each package’s issue tracker, using the value of this field.
+ /// If issue_tracker is missing but repository is present and points to GitHub,
+ /// then the pub.dev site uses the default issue tracker
+ /// (https://github.com///issues).
+ static const String issueTracker =
+ r'https://github.com/PlugFox/spinify/issues';
+
+ /// Documentation
+ ///
+ /// Current app [documentation]
+ ///
+ /// Some packages have a site that hosts documentation,
+ /// separate from the main homepage and from the Pub-generated API reference.
+ /// If your package has additional documentation, add a documentation:
+ /// field with that URL; pub shows a link to this documentation
+ /// on your package’s page.
+ static const String documentation = r'';
+
+ /// Publish_to
+ ///
+ /// Current app [publishTo]
+ ///
+ /// The default uses the [pub.dev](https://pub.dev/) site.
+ /// Specify none to prevent a package from being published.
+ /// This setting can be used to specify a custom pub package server to publish.
+ ///
+ /// ```yaml
+ /// publish_to: none
+ /// ```
+ static const String publishTo = r'none';
+
+ /// Funding
+ ///
+ /// Current app [funding]
+ ///
+ /// Package authors can use the funding property to specify
+ /// a list of URLs that provide information on how users
+ /// can help fund the development of the package. For example:
+ ///
+ /// ```yaml
+ /// funding:
+ /// - https://www.buymeacoffee.com/example_user
+ /// - https://www.patreon.com/some-account
+ /// ```
+ ///
+ /// If published to [pub.dev](https://pub.dev/) the links are displayed on the package page.
+ /// This aims to help users fund the development of their dependencies.
+ static const List