master #81
@ -1,16 +1,6 @@
 | 
				
			|||||||
# example_router
 | 
					# example_router
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A new Flutter project.
 | 
					```sh
 | 
				
			||||||
 | 
					firebase emulators:start --only auth
 | 
				
			||||||
## Getting Started
 | 
					flutter run --target lib/main_development.dart --dart-define="dev_mode=emulator"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
This project is a starting point for a Flutter application.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
A few resources to get you started if this is your first Flutter project:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
 | 
					 | 
				
			||||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
For help getting started with Flutter development, view the
 | 
					 | 
				
			||||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
 | 
					 | 
				
			||||||
samples, guidance on mobile development, and a full API reference.
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -10,11 +10,11 @@ PODS:
 | 
				
			|||||||
    - FirebaseAuth (~> 10.3.0)
 | 
					    - FirebaseAuth (~> 10.3.0)
 | 
				
			||||||
  - Firebase/CoreOnly (10.3.0):
 | 
					  - Firebase/CoreOnly (10.3.0):
 | 
				
			||||||
    - FirebaseCore (= 10.3.0)
 | 
					    - FirebaseCore (= 10.3.0)
 | 
				
			||||||
  - firebase_auth (4.2.0):
 | 
					  - firebase_auth (4.2.9):
 | 
				
			||||||
    - Firebase/Auth (= 10.3.0)
 | 
					    - Firebase/Auth (= 10.3.0)
 | 
				
			||||||
    - firebase_core
 | 
					    - firebase_core
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - firebase_core (2.4.0):
 | 
					  - firebase_core (2.7.0):
 | 
				
			||||||
    - Firebase/CoreOnly (= 10.3.0)
 | 
					    - Firebase/CoreOnly (= 10.3.0)
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - FirebaseAuth (10.3.0):
 | 
					  - FirebaseAuth (10.3.0):
 | 
				
			||||||
@ -29,6 +29,8 @@ PODS:
 | 
				
			|||||||
  - FirebaseCoreInternal (10.3.0):
 | 
					  - FirebaseCoreInternal (10.3.0):
 | 
				
			||||||
    - "GoogleUtilities/NSData+zlib (~> 7.8)"
 | 
					    - "GoogleUtilities/NSData+zlib (~> 7.8)"
 | 
				
			||||||
  - Flutter (1.0.0)
 | 
					  - Flutter (1.0.0)
 | 
				
			||||||
 | 
					  - flutter_secure_storage (6.0.0):
 | 
				
			||||||
 | 
					    - Flutter
 | 
				
			||||||
  - google_sign_in_ios (0.0.1):
 | 
					  - google_sign_in_ios (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - GoogleSignIn (~> 6.2)
 | 
					    - GoogleSignIn (~> 6.2)
 | 
				
			||||||
@ -61,6 +63,7 @@ DEPENDENCIES:
 | 
				
			|||||||
  - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
 | 
					  - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`)
 | 
				
			||||||
  - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
 | 
					  - firebase_core (from `.symlinks/plugins/firebase_core/ios`)
 | 
				
			||||||
  - Flutter (from `Flutter`)
 | 
					  - Flutter (from `Flutter`)
 | 
				
			||||||
 | 
					  - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
 | 
				
			||||||
  - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
 | 
					  - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SPEC REPOS:
 | 
					SPEC REPOS:
 | 
				
			||||||
@ -83,19 +86,22 @@ EXTERNAL SOURCES:
 | 
				
			|||||||
    :path: ".symlinks/plugins/firebase_core/ios"
 | 
					    :path: ".symlinks/plugins/firebase_core/ios"
 | 
				
			||||||
  Flutter:
 | 
					  Flutter:
 | 
				
			||||||
    :path: Flutter
 | 
					    :path: Flutter
 | 
				
			||||||
 | 
					  flutter_secure_storage:
 | 
				
			||||||
 | 
					    :path: ".symlinks/plugins/flutter_secure_storage/ios"
 | 
				
			||||||
  google_sign_in_ios:
 | 
					  google_sign_in_ios:
 | 
				
			||||||
    :path: ".symlinks/plugins/google_sign_in_ios/ios"
 | 
					    :path: ".symlinks/plugins/google_sign_in_ios/ios"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SPEC CHECKSUMS:
 | 
					SPEC CHECKSUMS:
 | 
				
			||||||
  AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add
 | 
					  AppAuth: 8fca6b5563a5baef2c04bee27538025e4ceb2add
 | 
				
			||||||
  Firebase: f92fc551ead69c94168d36c2b26188263860acd9
 | 
					  Firebase: f92fc551ead69c94168d36c2b26188263860acd9
 | 
				
			||||||
  firebase_auth: 579a0dc15451491cc83fccaa5102296635f24938
 | 
					  firebase_auth: 4e8c693e848ed13b263de2d702d55fa82ed04a79
 | 
				
			||||||
  firebase_core: 6f2f753e316765799d88568232ed59e300ff53db
 | 
					  firebase_core: 128d8c43c3a453a4a67463314fc3761bedff860b
 | 
				
			||||||
  FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6
 | 
					  FirebaseAuth: 0e415d29d846c1dce2fb641e46f35e9888d9bec6
 | 
				
			||||||
  FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
 | 
					  FirebaseCore: 988754646ab3bd4bdcb740f1bfe26b9f6c0d5f2a
 | 
				
			||||||
  FirebaseCoreInternal: 29b76f784d607df8b2a1259d73c3f04f1210137b
 | 
					  FirebaseCoreInternal: 29b76f784d607df8b2a1259d73c3f04f1210137b
 | 
				
			||||||
  Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
 | 
					  Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
 | 
				
			||||||
  google_sign_in_ios: 4f85eb9f937450765c8573bb85fd8cd6a5af675c
 | 
					  flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
 | 
				
			||||||
 | 
					  google_sign_in_ios: 1256ff9d941db546373826966720b0c24804bcdd
 | 
				
			||||||
  GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
 | 
					  GoogleSignIn: 5651ce3a61e56ca864160e79b484cd9ed3f49b7a
 | 
				
			||||||
  GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
 | 
					  GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
 | 
				
			||||||
  GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
 | 
					  GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,7 @@
 | 
				
			|||||||
/* Begin PBXBuildFile section */
 | 
					/* Begin PBXBuildFile section */
 | 
				
			||||||
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 | 
							1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 | 
				
			||||||
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 | 
							3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 | 
				
			||||||
 | 
							44F5B6790A35D9BA26574F6B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = F6E17622FCECE9BFC2543397 /* GoogleService-Info.plist */; };
 | 
				
			||||||
		69F3BBCD5DEB05A456F6B74F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0A061B2E527F311149C3581 /* Pods_Runner.framework */; };
 | 
							69F3BBCD5DEB05A456F6B74F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0A061B2E527F311149C3581 /* Pods_Runner.framework */; };
 | 
				
			||||||
		74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
 | 
							74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
 | 
				
			||||||
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
 | 
							97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
 | 
				
			||||||
@ -46,6 +47,7 @@
 | 
				
			|||||||
		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 | 
							97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 | 
				
			||||||
		B0A061B2E527F311149C3581 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
							B0A061B2E527F311149C3581 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
		F0D7945BAE0BEA457137ED73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
 | 
							F0D7945BAE0BEA457137ED73 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							F6E17622FCECE9BFC2543397 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = "<group>"; };
 | 
				
			||||||
		F9340E3A859C31E59380BD0F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
 | 
							F9340E3A859C31E59380BD0F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
 | 
				
			||||||
/* End PBXFileReference section */
 | 
					/* End PBXFileReference section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -91,6 +93,7 @@
 | 
				
			|||||||
				97C146EF1CF9000F007C117D /* Products */,
 | 
									97C146EF1CF9000F007C117D /* Products */,
 | 
				
			||||||
				66B357379C2757D2844F12BB /* Pods */,
 | 
									66B357379C2757D2844F12BB /* Pods */,
 | 
				
			||||||
				BC1E25CE0DADDF7B7201CCF8 /* Frameworks */,
 | 
									BC1E25CE0DADDF7B7201CCF8 /* Frameworks */,
 | 
				
			||||||
 | 
									F6E17622FCECE9BFC2543397 /* GoogleService-Info.plist */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			sourceTree = "<group>";
 | 
								sourceTree = "<group>";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
@ -192,6 +195,7 @@
 | 
				
			|||||||
				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
 | 
									3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
 | 
				
			||||||
				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
 | 
									97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
 | 
				
			||||||
				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
 | 
									97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
 | 
				
			||||||
 | 
									44F5B6790A35D9BA26574F6B /* GoogleService-Info.plist in Resources */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					<?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>136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9.apps.googleusercontent.com</string>
 | 
				
			||||||
 | 
						<key>REVERSED_CLIENT_ID</key>
 | 
				
			||||||
 | 
						<string>com.googleusercontent.apps.136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9</string>
 | 
				
			||||||
 | 
						<key>ANDROID_CLIENT_ID</key>
 | 
				
			||||||
 | 
						<string>136771801992-n2pq8oqutvrqj58e05hbavvc7n1jdfjb.apps.googleusercontent.com</string>
 | 
				
			||||||
 | 
						<key>API_KEY</key>
 | 
				
			||||||
 | 
						<string>AIzaSyCDbbhjbFrQwLXuIANdJzjkDk8uOETnn7w</string>
 | 
				
			||||||
 | 
						<key>GCM_SENDER_ID</key>
 | 
				
			||||||
 | 
						<string>136771801992</string>
 | 
				
			||||||
 | 
						<key>PLIST_VERSION</key>
 | 
				
			||||||
 | 
						<string>1</string>
 | 
				
			||||||
 | 
						<key>BUNDLE_ID</key>
 | 
				
			||||||
 | 
						<string>com.example.exampleRouter</string>
 | 
				
			||||||
 | 
						<key>PROJECT_ID</key>
 | 
				
			||||||
 | 
						<string>tchat-beta</string>
 | 
				
			||||||
 | 
						<key>STORAGE_BUCKET</key>
 | 
				
			||||||
 | 
						<string>tchat-beta.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:136771801992:ios:bcdca68d2b7d227097203d</string>
 | 
				
			||||||
 | 
						<key>DATABASE_URL</key>
 | 
				
			||||||
 | 
						<string>https://tchat-beta.firebaseio.com</string>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
@ -18,11 +18,8 @@ import 'dart:async';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import 'package:example_router/core/dependency_injection/get_it.dart';
 | 
					import 'package:example_router/core/dependency_injection/get_it.dart';
 | 
				
			||||||
import 'package:example_router/core/utils/app_bloc_observer.dart';
 | 
					import 'package:example_router/core/utils/app_bloc_observer.dart';
 | 
				
			||||||
import 'package:example_router/firebase_options.dart';
 | 
					 | 
				
			||||||
import 'package:firebase_core/firebase_core.dart';
 | 
					 | 
				
			||||||
import 'package:flutter/widgets.dart';
 | 
					import 'package:flutter/widgets.dart';
 | 
				
			||||||
import 'package:flutter_bloc/flutter_bloc.dart';
 | 
					import 'package:flutter_bloc/flutter_bloc.dart';
 | 
				
			||||||
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MockSettings {
 | 
					class MockSettings {
 | 
				
			||||||
  static MockSettings? _instance;
 | 
					  static MockSettings? _instance;
 | 
				
			||||||
@ -70,12 +67,6 @@ Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
 | 
				
			|||||||
        debugPrint(details.toString());
 | 
					        debugPrint(details.toString());
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (MockSettings.isDisable()) {
 | 
					 | 
				
			||||||
        await Firebase.initializeApp(
 | 
					 | 
				
			||||||
          options: DefaultFirebaseOptions.currentPlatform,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
        await FirebaseAuth.instance.useAuthEmulator('localhost', 9099);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      await GetItInitializer.init();
 | 
					      await GetItInitializer.init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      runApp(await builder());
 | 
					      runApp(await builder());
 | 
				
			||||||
 | 
				
			|||||||
@ -14,20 +14,81 @@
 | 
				
			|||||||
// You should have received a copy of the GNU General Public License
 | 
					// You should have received a copy of the GNU General Public License
 | 
				
			||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
					// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import 'dart:async';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import 'package:example_router/core/enums/dev_mode.dart';
 | 
				
			||||||
 | 
					import 'package:example_router/core/flavors/flavor.dart';
 | 
				
			||||||
import 'package:example_router/firebase_options.dart';
 | 
					import 'package:example_router/firebase_options.dart';
 | 
				
			||||||
 | 
					import 'package:firebase_core/firebase_core.dart';
 | 
				
			||||||
import 'package:get_it/get_it.dart';
 | 
					import 'package:get_it/get_it.dart';
 | 
				
			||||||
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
 | 
					import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
final getIt = GetIt.I;
 | 
					final getIt = GetIt.I;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Service and Data Source locator
 | 
				
			||||||
abstract class GetItInitializer {
 | 
					abstract class GetItInitializer {
 | 
				
			||||||
  static Future<void> init() async {
 | 
					  static FutureOr<void> _initCommon() async {
 | 
				
			||||||
    getIt.registerLazySingleton<AuthenticationRemoteDataSource<int>>(
 | 
					    // Initialize common sources/services
 | 
				
			||||||
 | 
					    getIt.registerLazySingleton<AuthenticationSessionDataSource<int>>(
 | 
				
			||||||
 | 
					      () => AuthenticationSessionDataSourceImpl<int>(),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static FutureOr<void> _initEmulator() async {
 | 
				
			||||||
 | 
					    // Initialize emulator sources/services
 | 
				
			||||||
 | 
					    final firebaseAuth = FirebaseAuth.instance;
 | 
				
			||||||
 | 
					    await firebaseAuth.useAuthEmulator('localhost', 9099);
 | 
				
			||||||
 | 
					    getIt
 | 
				
			||||||
 | 
					      ..registerLazySingleton<AuthenticationRemoteDataSource<int>>(
 | 
				
			||||||
 | 
					        () => AuthenticationFirebaseDataSourceImpl<int>(
 | 
				
			||||||
 | 
					            firebaseAuth: firebaseAuth,
 | 
				
			||||||
 | 
					            googleSignIn:
 | 
				
			||||||
 | 
					                GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)),
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					      ..registerLazySingleton<AuthenticationCacheDataSource<int>>(
 | 
				
			||||||
 | 
					        () => AuthenticationFirebaseCacheDataSourceImpl<int>(
 | 
				
			||||||
 | 
					          firebaseAuth: firebaseAuth,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static FutureOr<void> _initFirebase() async {
 | 
				
			||||||
 | 
					    // Initialize firebase sources/services.
 | 
				
			||||||
 | 
					    getIt
 | 
				
			||||||
 | 
					      ..registerLazySingleton<AuthenticationRemoteDataSource<int>>(
 | 
				
			||||||
        () => AuthenticationFirebaseDataSourceImpl<int>(
 | 
					        () => AuthenticationFirebaseDataSourceImpl<int>(
 | 
				
			||||||
            firebaseAuth: FirebaseAuth.instance,
 | 
					            firebaseAuth: FirebaseAuth.instance,
 | 
				
			||||||
            googleSignIn:
 | 
					            googleSignIn:
 | 
				
			||||||
                GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)),
 | 
					                GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)),
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					      ..registerLazySingleton<AuthenticationCacheDataSource<int>>(
 | 
				
			||||||
 | 
					        () => AuthenticationFirebaseCacheDataSourceImpl<int>(
 | 
				
			||||||
 | 
					          firebaseAuth: FirebaseAuth.instance,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static FutureOr<void> _initRest() async {
 | 
				
			||||||
 | 
					    // Initialize rest api sources/services
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static FutureOr<void> init() async {
 | 
				
			||||||
 | 
					    await _initCommon();
 | 
				
			||||||
 | 
					    final flavor = Flavor.get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (flavor.devMode == DevMode.rest) {
 | 
				
			||||||
 | 
					      await _initRest();
 | 
				
			||||||
 | 
					    } else if (flavor.devMode == DevMode.emulator) {
 | 
				
			||||||
 | 
					      await Firebase.initializeApp(
 | 
				
			||||||
 | 
					        options: DefaultFirebaseOptions.currentPlatform,
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      await _initEmulator();
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      await Firebase.initializeApp(
 | 
				
			||||||
 | 
					        options: DefaultFirebaseOptions.currentPlatform,
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      await _initFirebase();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await getIt.allReady();
 | 
					    await getIt.allReady();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					// Copyright (C) 2023 WYATT GROUP
 | 
				
			||||||
 | 
					// Please see the AUTHORS file for details.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					// it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					// the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					// any later version.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					// but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					// GNU General Public License for more details.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum DevMode {
 | 
				
			||||||
 | 
					  /// Mocked values
 | 
				
			||||||
 | 
					  mock,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Real values from REST API
 | 
				
			||||||
 | 
					  rest,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Emulated values with Firebase Emulator
 | 
				
			||||||
 | 
					  emulator,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Real values from Firebase
 | 
				
			||||||
 | 
					  real;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  String toString() => name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Tries to parse String and returns mode. Fallback is returned if there
 | 
				
			||||||
 | 
					  /// is an error during parsing.
 | 
				
			||||||
 | 
					  static DevMode fromString(String? mode, {DevMode fallback = DevMode.mock}) {
 | 
				
			||||||
 | 
					    for (final m in values) {
 | 
				
			||||||
 | 
					      if (m.name == mode) {
 | 
				
			||||||
 | 
					        return m;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return fallback;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					// Copyright (C) 2023 WYATT GROUP
 | 
				
			||||||
 | 
					// Please see the AUTHORS file for details.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					// it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					// the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					// any later version.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					// but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					// GNU General Public License for more details.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import 'package:example_router/core/enums/dev_mode.dart';
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abstract class Flavor {
 | 
				
			||||||
 | 
					  Flavor._({
 | 
				
			||||||
 | 
					    this.banner,
 | 
				
			||||||
 | 
					    this.bannerColor = Colors.red,
 | 
				
			||||||
 | 
					    this.devMode,
 | 
				
			||||||
 | 
					  }) {
 | 
				
			||||||
 | 
					    _instance = this;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static Flavor? _instance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final String? banner;
 | 
				
			||||||
 | 
					  final Color bannerColor;
 | 
				
			||||||
 | 
					  final DevMode? devMode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Returns [Flavor] instance.
 | 
				
			||||||
 | 
					  static Flavor get() {
 | 
				
			||||||
 | 
					    if (_instance == null) {
 | 
				
			||||||
 | 
					      throw Exception('Flavor not initialized!');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return _instance!;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  String toString() => runtimeType.toString().replaceAll('Flavor', '');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DevelopmentFlavor extends Flavor {
 | 
				
			||||||
 | 
					  factory DevelopmentFlavor() {
 | 
				
			||||||
 | 
					    const modeString = String.fromEnvironment('dev_mode', defaultValue: 'mock');
 | 
				
			||||||
 | 
					    final mode = DevMode.fromString(modeString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return DevelopmentFlavor._(devMode: mode);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  DevelopmentFlavor._({
 | 
				
			||||||
 | 
					    required super.devMode,
 | 
				
			||||||
 | 
					  }) : super._(
 | 
				
			||||||
 | 
					          banner: 'Dev',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class StagingFlavor extends Flavor {
 | 
				
			||||||
 | 
					  StagingFlavor()
 | 
				
			||||||
 | 
					      : super._(
 | 
				
			||||||
 | 
					          banner: 'Staging',
 | 
				
			||||||
 | 
					          bannerColor: Colors.green,
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ProductionFlavor extends Flavor {
 | 
				
			||||||
 | 
					  ProductionFlavor() : super._();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -65,8 +65,10 @@ class DefaultFirebaseOptions {
 | 
				
			|||||||
    projectId: 'tchat-beta',
 | 
					    projectId: 'tchat-beta',
 | 
				
			||||||
    databaseURL: 'https://tchat-beta.firebaseio.com',
 | 
					    databaseURL: 'https://tchat-beta.firebaseio.com',
 | 
				
			||||||
    storageBucket: 'tchat-beta.appspot.com',
 | 
					    storageBucket: 'tchat-beta.appspot.com',
 | 
				
			||||||
    androidClientId: '136771801992-n2pq8oqutvrqj58e05hbavvc7n1jdfjb.apps.googleusercontent.com',
 | 
					    androidClientId:
 | 
				
			||||||
    iosClientId: '136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9.apps.googleusercontent.com',
 | 
					        '136771801992-n2pq8oqutvrqj58e05hbavvc7n1jdfjb.apps.googleusercontent.com',
 | 
				
			||||||
 | 
					    iosClientId:
 | 
				
			||||||
 | 
					        '136771801992-p629tpo9bk3hcm2955s5ahivdla57ln9.apps.googleusercontent.com',
 | 
				
			||||||
    iosBundleId: 'com.example.exampleRouter',
 | 
					    iosBundleId: 'com.example.exampleRouter',
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -15,9 +15,13 @@
 | 
				
			|||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
					// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:example_router/bootstrap.dart';
 | 
					import 'package:example_router/bootstrap.dart';
 | 
				
			||||||
 | 
					import 'package:example_router/core/flavors/flavor.dart';
 | 
				
			||||||
import 'package:example_router/presentation/features/app/app.dart';
 | 
					import 'package:example_router/presentation/features/app/app.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() {
 | 
					void main(List<String> args) {
 | 
				
			||||||
  MockSettings.enable();
 | 
					  // Define environment
 | 
				
			||||||
 | 
					  ProductionFlavor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Initialize environment and variables
 | 
				
			||||||
  bootstrap(App.new);
 | 
					  bootstrap(App.new);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -15,9 +15,13 @@
 | 
				
			|||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
					// along with this program. If not, see <https://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:example_router/bootstrap.dart';
 | 
					import 'package:example_router/bootstrap.dart';
 | 
				
			||||||
 | 
					import 'package:example_router/core/flavors/flavor.dart';
 | 
				
			||||||
import 'package:example_router/presentation/features/app/app.dart';
 | 
					import 'package:example_router/presentation/features/app/app.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void main() {
 | 
					void main(List<String> args) {
 | 
				
			||||||
  MockSettings.disable();
 | 
					  // Define environment
 | 
				
			||||||
 | 
					  DevelopmentFlavor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Initialize environment and variables
 | 
				
			||||||
  bootstrap(App.new);
 | 
					  bootstrap(App.new);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -34,6 +34,9 @@ class App extends StatelessWidget {
 | 
				
			|||||||
      AuthenticationRepositoryImpl(
 | 
					      AuthenticationRepositoryImpl(
 | 
				
			||||||
    authenticationRemoteDataSource:
 | 
					    authenticationRemoteDataSource:
 | 
				
			||||||
        getIt<AuthenticationRemoteDataSource<int>>(),
 | 
					        getIt<AuthenticationRemoteDataSource<int>>(),
 | 
				
			||||||
 | 
					    authenticationSessionDataSource:
 | 
				
			||||||
 | 
					        getIt<AuthenticationSessionDataSource<int>>(),
 | 
				
			||||||
 | 
					    authenticationCacheDataSource: getIt<AuthenticationCacheDataSource<int>>(),
 | 
				
			||||||
    customPasswordValidator: const CustomPassword.pure(),
 | 
					    customPasswordValidator: const CustomPassword.pure(),
 | 
				
			||||||
    extraSignUpInputs: [
 | 
					    extraSignUpInputs: [
 | 
				
			||||||
      FormInput(
 | 
					      FormInput(
 | 
				
			||||||
 | 
				
			|||||||
@ -45,7 +45,8 @@ class SubPage extends StatelessWidget {
 | 
				
			|||||||
          children: [
 | 
					          children: [
 | 
				
			||||||
            const Text('Another page'),
 | 
					            const Text('Another page'),
 | 
				
			||||||
            ElevatedButton(
 | 
					            ElevatedButton(
 | 
				
			||||||
              onPressed: () => context.read<AuthenticationCubit<int>>().delete(),
 | 
					              onPressed: () =>
 | 
				
			||||||
 | 
					                  context.read<AuthenticationCubit<int>>().delete(),
 | 
				
			||||||
              child: const Text('Delete account'),
 | 
					              child: const Text('Delete account'),
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user