-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
246 changed files
with
8,022 additions
and
7,796 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Uncomment this line to define a global platform for your project | ||
platform :ios, '11.0' | ||
|
||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency. | ||
ENV['COCOAPODS_DISABLE_STATS'] = 'true' | ||
|
||
project 'Runner', { | ||
'Debug' => :debug, | ||
'Profile' => :release, | ||
'Release' => :release, | ||
} | ||
|
||
def flutter_root | ||
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) | ||
unless File.exist?(generated_xcode_build_settings_path) | ||
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" | ||
end | ||
|
||
File.foreach(generated_xcode_build_settings_path) do |line| | ||
matches = line.match(/FLUTTER_ROOT\=(.*)/) | ||
return matches[1].strip if matches | ||
end | ||
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" | ||
end | ||
|
||
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) | ||
|
||
flutter_ios_podfile_setup | ||
|
||
target 'Runner' do | ||
use_frameworks! | ||
use_modular_headers! | ||
|
||
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) | ||
# target 'RunnerTests' do | ||
# inherit! :search_paths | ||
# end | ||
end | ||
|
||
post_install do |installer| | ||
installer.pods_project.targets.each do |target| | ||
flutter_additional_ios_build_settings(target) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter/services.dart'; | ||
import 'package:flutter/foundation.dart'; | ||
import 'package:sentry_flutter/sentry_flutter.dart'; | ||
import 'package:get_it/get_it.dart'; | ||
|
||
import 'package:guardian_keyper/ui/theme/theme.dart'; | ||
import 'package:guardian_keyper/ui/screens/splash_screen.dart'; | ||
import 'package:guardian_keyper/feature/home/ui/home_screen.dart'; | ||
|
||
import 'package:guardian_keyper/data/network_manager.dart'; | ||
import 'package:guardian_keyper/feature/vault/domain/use_case/vault_interactor.dart'; | ||
import 'package:guardian_keyper/feature/message/domain/use_case/message_interactor.dart'; | ||
|
||
import 'di.dart'; | ||
import 'theme.dart'; | ||
import 'routes.dart'; | ||
|
||
class App extends StatefulWidget { | ||
static Future<void> init() async { | ||
WidgetsFlutterBinding.ensureInitialized(); | ||
SystemChrome.setSystemUIOverlayStyle(systemStyleDark); | ||
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); | ||
} | ||
|
||
const App({ | ||
super.key, | ||
this.di = const DI(), | ||
}); | ||
|
||
final DI di; | ||
|
||
@override | ||
State<App> createState() => _AppState(); | ||
} | ||
|
||
class _AppState extends State<App> with WidgetsBindingObserver { | ||
late final _networkManager = GetIt.I<NetworkManager>(); | ||
late final _vaultInteractor = GetIt.I<VaultInteractor>(); | ||
late final _messagesInteractor = GetIt.I<MessageInteractor>(); | ||
|
||
@override | ||
void initState() { | ||
super.initState(); | ||
WidgetsBinding.instance.addObserver(this); | ||
widget.di.init().then((_) => setState(() {})); | ||
} | ||
|
||
@override | ||
void didChangeAppLifecycleState(state) { | ||
super.didChangeAppLifecycleState(state); | ||
if (kDebugMode) print(state); | ||
if (widget.di.isNotInited) return; | ||
|
||
switch (state) { | ||
case AppLifecycleState.resumed: | ||
_networkManager.start(); | ||
break; | ||
case AppLifecycleState.paused: | ||
_messagesInteractor.flush(); | ||
_vaultInteractor.flush(); | ||
_networkManager.stop(); | ||
break; | ||
default: | ||
} | ||
} | ||
|
||
@override | ||
Widget build(BuildContext context) => MaterialApp( | ||
title: 'Guardian Keyper', | ||
color: clIndigo900, | ||
theme: themeLight, | ||
darkTheme: themeDark, | ||
themeMode: ThemeMode.dark, | ||
onGenerateRoute: onGenerateRoute, | ||
navigatorObservers: [SentryNavigatorObserver()], | ||
home: widget.di.isInited ? const HomeScreen() : const SplashScreen(), | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import 'dart:typed_data'; | ||
import 'package:get_it/get_it.dart'; | ||
import 'package:hive_flutter/hive_flutter.dart'; | ||
|
||
import 'package:guardian_keyper/feature/auth/domain/auth_interactor.dart'; | ||
|
||
import 'package:guardian_keyper/feature/vault/data/vault_repository.dart'; | ||
import 'package:guardian_keyper/feature/vault/domain/use_case/vault_interactor.dart'; | ||
|
||
import 'package:guardian_keyper/feature/message/data/message_repository.dart'; | ||
import 'package:guardian_keyper/feature/message/domain/use_case/message_interactor.dart'; | ||
|
||
import 'package:guardian_keyper/feature/settings/data/settings_manager.dart'; | ||
import 'package:guardian_keyper/feature/settings/domain/settings_interactor.dart'; | ||
|
||
import '../data/network_manager.dart'; | ||
import '../data/services/platform_service.dart'; | ||
import '../data/services/analytics_service.dart'; | ||
import '../data/services/preferences_service.dart'; | ||
|
||
class DI { | ||
static bool _isInited = false; | ||
|
||
const DI(); | ||
|
||
bool get isInited => _isInited; | ||
|
||
bool get isNotInited => !_isInited; | ||
|
||
Future<void> init() async { | ||
if (_isInited) return; | ||
|
||
// Services | ||
GetIt.I.registerSingleton<PlatformService>(PlatformService()); | ||
final preferencesService = await PreferencesService.init(); | ||
GetIt.I.registerSingleton<PreferencesService>(preferencesService); | ||
GetIt.I.registerSingleton<AnalyticsService>(await AnalyticsService.init()); | ||
|
||
// Managers | ||
GetIt.I.registerSingleton<NetworkManager>( | ||
await NetworkManager().init(), | ||
); | ||
GetIt.I.registerSingleton<SettingsManager>( | ||
await SettingsManager().init(), | ||
); | ||
|
||
// Repositories | ||
await Hive.initFlutter('data_v1'); | ||
final seed = await preferencesService.get<Uint8List>(keySeed); | ||
final cipher = HiveAesCipher(seed!); | ||
GetIt.I.registerSingleton<MessageRepository>( | ||
await getMessageRepository(cipher), | ||
); | ||
GetIt.I.registerSingleton<VaultRepository>( | ||
await getVaultRepository(cipher), | ||
); | ||
|
||
// Interactors | ||
GetIt.I.registerSingleton<SettingsInteractor>(SettingsInteractor()); | ||
GetIt.I.registerSingleton<MessageInteractor>(MessageInteractor()); | ||
GetIt.I.registerSingleton<VaultInteractor>(VaultInteractor()); | ||
GetIt.I.registerSingleton<AuthInteractor>(AuthInteractor()); | ||
|
||
_isInited = true; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
import 'package:guardian_keyper/consts.dart'; | ||
import 'package:guardian_keyper/ui/screens/qr_code_show_screen.dart'; | ||
import 'package:guardian_keyper/ui/screens/qr_code_scan_screen.dart'; | ||
import 'package:guardian_keyper/feature/intro/ui/intro_screen.dart'; | ||
import 'package:guardian_keyper/feature/settings/ui/settings_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_vault_show/vault_show_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_shard_show/shard_show_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_vault_create/vault_create_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_secret_add/vault_secret_add_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_vault_restore/vault_restore_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_guardian_add/vault_guardian_add_screen.dart'; | ||
import 'package:guardian_keyper/feature/vault/ui/_secret_recovery/vault_secret_recovery_screen.dart'; | ||
|
||
Route? onGenerateRoute(RouteSettings settings) => MaterialPageRoute( | ||
settings: settings, | ||
fullscreenDialog: true, | ||
builder: (_) => switch (settings.name) { | ||
routeIntro => const IntroScreen(), | ||
routeSettings => const SettingsScreen(), | ||
// QRCode | ||
routeQrCodeShow => const QRCodeShowScreen(), | ||
routeQrCodeScan => const QRCodeScanScreen(), | ||
// Shard | ||
routeShardShow => const ShardShowScreen(), | ||
// Vault | ||
routeVaultShow => const VaultShowScreen(), | ||
routeVaultCreate => const VaultCreateScreen(), | ||
routeVaultRestore => const VaultRestoreScreen(), | ||
routeVaultGuardianAdd => const VaultGuardianAddScreen(), | ||
// Secret | ||
routeVaultSecretAdd => const VaultSecretAddScreen(), | ||
routeVaultSecretRecovery => const VaultSecretRecoveryScreen(), | ||
// null | ||
_ => throw Exception('Route not found!'), | ||
}, | ||
); |
Oops, something went wrong.