Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
333 changes: 219 additions & 114 deletions .gitignore

Large diffs are not rendered by default.

13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,21 @@ A new Flutter application about "resumes".
For help getting started with Flutter, view our online
[documentation](https://flutter.io/).

## Directory structure

- Date:
Contains data layer shared classes that are not framework dependent (e.g. Flutter, AngularDart) or interfaces that must be used by client application
- Domain:
Contains domain layer company rules
- Bloc:
Contains shared business logic components
- Presentation:
Contains commons classes

## Installation

### Config
Use secret template `./secrets.json.dist` to add secret file `./secrets.json`
Use secret template `./config.json.dist` to add secret file `./config.json`

### Generate models
[documentation](https://flutter.io/json/)
Expand Down
93 changes: 93 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
analyzer:
strong-mode:
implicit-casts: false

linter:
rules:
- always_declare_return_types
- always_require_non_null_named_parameters
- annotate_overrides
- avoid_double_and_int_checks
- avoid_empty_else
- avoid_field_initializers_in_const_classes
- avoid_init_to_null
- avoid_null_checks_in_equality_operators
- avoid_positional_boolean_parameters
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_single_cascade_in_expression_statements
- avoid_slow_async_io
- avoid_types_as_parameter_names
- avoid_unused_constructor_parameters
- await_only_futures
- camel_case_types
- cancel_subscriptions
- close_sinks
- constant_identifier_names
- control_flow_in_finally
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- hash_and_equals
- implementation_imports
- invariant_booleans
- iterable_contains_unrelated_type
- join_return_with_assignment
- library_names
- library_prefixes
- list_remove_unrelated_type
- literal_only_boolean_expressions
- no_duplicate_case_values
- non_constant_identifier_names
- null_closures
- package_api_docs
- package_names
- package_prefixed_library_names
- parameter_assignments
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_constructors_over_static_methods
- prefer_contains
- prefer_equal_for_default_values
- prefer_final_fields
- prefer_final_locals
- prefer_foreach
- prefer_generic_function_type_aliases
- prefer_interpolation_to_compose_strings
- prefer_is_not_empty
- prefer_iterable_whereType
- prefer_single_quotes
- prefer_typing_uninitialized_variables
- recursive_getters
- slash_for_doc_comments
- sort_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally
- type_annotate_public_apis
- type_init_formals
- unawaited_futures
- unnecessary_const
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_in_if_null_operators
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_statements
- unnecessary_this
- unrelated_type_equality_checks
- use_rethrow_when_possible
- use_string_buffers
- use_to_and_as_if_applicable
- valid_regexps
- void_checks
7 changes: 7 additions & 0 deletions android/app/src/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.lebot.axel.social_cv_client_flutter">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
29 changes: 21 additions & 8 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.lebot.axel.cv">

<!-- The INTERNET permission is required for development. Specifically,
flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
Expand All @@ -13,7 +12,6 @@
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="cv"
android:icon="@mipmap/ic_launcher">
<activity
Expand All @@ -23,17 +21,32 @@
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
14 changes: 0 additions & 14 deletions android/app/src/main/java/me/lebot/axel/cv/MainActivity.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package me.lebot.axel.social_cv_client_flutter

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}
18 changes: 18 additions & 0 deletions android/app/src/main/res/values-night/styles.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.

This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
10 changes: 10 additions & 0 deletions android/app/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.

This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@android:color/white</item>
</style>
</resources>
7 changes: 7 additions & 0 deletions android/app/src/profile/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.lebot.axel.social_cv_client_flutter">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
Binary file added assets/images/login_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions config.json.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"apiServerUrl": "<API_SERVER_URL>",
"clientId": "<CLIENT_ID>",
"clientSecret": "<CLIENT_SECRET>"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
13 changes: 13 additions & 0 deletions ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
1 change: 1 addition & 0 deletions ios/Runner/Runner-Bridging-Header.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#import "GeneratedPluginRegistrant.h"
24 changes: 24 additions & 0 deletions lib/bloc.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/// Blocs + Events + States
export 'package:social_cv_client_flutter/src/bloc/blocs/application/application.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/authentication/authentication.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/configuration/configuration.dart';

/// Element Blocs + Event + States
export 'package:social_cv_client_flutter/src/bloc/blocs/element/element.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/element_list/element_list.dart';

/// Element List Blocs + Events + States
export 'package:social_cv_client_flutter/src/bloc/blocs/entry/entry.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/entry_list/entry_list.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/group/group.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/group_list/group_list.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/identity/identity.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/login/login.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/part/part.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/part_list/part_list.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/profile/profile.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/profile_list/profile_list.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/register/register.dart';
export 'package:social_cv_client_flutter/src/bloc/blocs/user/user.dart';

//export 'package:social_cv_client_flutter/src/bloc/blocs/user_list/user_list.dart';
82 changes: 82 additions & 0 deletions lib/data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
export 'package:social_cv_client_flutter/src/data/cache_model.dart';

/// ----------------------------------------------------------------------------
/// Exceptions
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/exceptions/api_exceptions.dart';

/// ----------------------------------------------------------------------------
/// Managers
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/managers/api_interceptor.dart';
export 'package:social_cv_client_flutter/src/data/managers/cv_api_manager.dart';

/// ----------------------------------------------------------------------------
/// Models
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/models/element_model.dart';
export 'package:social_cv_client_flutter/src/data/models/entry_model.dart';
export 'package:social_cv_client_flutter/src/data/models/envelop_models.dart';
export 'package:social_cv_client_flutter/src/data/models/group_model.dart';
export 'package:social_cv_client_flutter/src/data/models/part_model.dart';
export 'package:social_cv_client_flutter/src/data/models/profile_model.dart';
export 'package:social_cv_client_flutter/src/data/models/user_model.dart';

/// ----------------------------------------------------------------------------
/// Repositories
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/repositories/app_prefs_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/auth_info_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/entry_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/group_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/identity_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/part_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/profile_repository.dart';
export 'package:social_cv_client_flutter/src/data/repositories/user_repository.dart';
export 'package:social_cv_client_flutter/src/data/stores/app_prefs_data_store/app_prefs_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/app_prefs_data_store/app_prefs_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/auth_info_data_store/auth_info_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/auth_info_data_store/auth_info_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/entry_data_store/entry_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/entry_data_store/entry_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/entry_data_store/entry_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/entry_data_store/memory_entry_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/group_date_store/group_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/group_date_store/group_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/group_date_store/memory_group_data_store.dart';

/// ----------------------------------------------------------------------------
/// Data Stores
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/stores/identity_data_store/identity_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/identity_data_store/identity_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/identity_data_store/memory_identity_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/part_date_store/memory_part_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/part_date_store/part_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/part_date_store/part_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/profile_date_store/memory_profile_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/profile_date_store/profile_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/profile_date_store/profile_data_store_factory.dart';
export 'package:social_cv_client_flutter/src/data/stores/user_data_store/memory_user_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/user_data_store/user_data_store.dart';
export 'package:social_cv_client_flutter/src/data/stores/user_data_store/user_data_store_factory.dart';

/// ----------------------------------------------------------------------------
/// Data Stores
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/utils/utils.dart';


/// ----------------------------------------------------------------------------
/// Managers
/// ----------------------------------------------------------------------------

export 'package:social_cv_client_flutter/src/data/managers/app_shared_preferences_manager.dart';
export 'package:social_cv_client_flutter/src/data/managers/auth_shared_preferences_manager.dart';
export 'package:social_cv_client_flutter/src/data/managers/config_assets_manager.dart';
Loading