From 30c3d331ee36f76191980af0dbe2ae7d032fe181 Mon Sep 17 00:00:00 2001 From: Veli Bacik Date: Tue, 1 Nov 2022 03:23:41 +0300 Subject: [PATCH 1/2] updated at all code --- .vscode/settings.json | 6 + analysis_options.yaml | 18 +- lib/core/base/model/base_error.dart | 4 +- lib/core/base/model/base_view_model.dart | 12 +- lib/core/base/view/base_widget.dart | 4 +- lib/core/constants/image/image_constatns.dart | 4 +- lib/core/extension/context_extension.dart | 4 +- lib/core/extension/network_exntension.dart | 2 +- lib/core/extension/string_extension.dart | 2 +- .../init/analytics/analytics_manager.dart | 4 +- lib/core/init/cache/locale_manager.dart | 11 +- lib/core/init/lang/language_manager.dart | 8 +- lib/core/init/lang/locale_keys.g.dart | 3 +- .../init/navigation/navigation_route.dart | 26 +- .../init/navigation/navigation_service.dart | 6 +- lib/core/init/network/ICoreDio.dart | 62 +++-- lib/core/init/network/IResponseModel.dart | 4 +- lib/core/init/network/core_dio.dart | 39 +-- .../network/network_core/core_operations.dart | 4 +- lib/core/init/network/network_manager.dart | 22 +- lib/core/init/network/vexana_manager.dart | 4 +- lib/core/init/notifier/provider_list.dart | 9 +- lib/core/init/notifier/theme_notifer.dart | 3 +- .../init/theme/light/color_scheme_light.dart | 22 +- .../theme/light/light_theme_interface.dart | 6 +- lib/core/init/theme/light/padding_insets.dart | 2 +- .../init/theme/light/text_theme_light.dart | 43 ++- lib/core/init/theme/panache/red_theme.dart | 196 ++++--------- lib/main.dart | 19 +- .../exception/navigate_model_not_found.dart | 2 +- lib/product/model/user.dart | 10 +- lib/product/widget/button/header_button.dart | 40 +-- lib/product/widget/card/burger_card.dart | 15 +- lib/product/widget/card/game_card.dart | 8 +- lib/product/widget/grid/game_grid_view.dart | 13 +- lib/product/widget/pageview/game_slider.dart | 5 +- .../_product/_constants/image_path_svg.dart | 6 +- .../_product/_model/query/friend_query.dart | 4 +- .../_product/_utilty/decoration_helper.dart | 7 +- lib/view/_product/_utilty/service_helper.dart | 15 +- .../_product/_utilty/thorottle_helper.dart | 8 +- .../animation/social_card_animation.dart | 6 +- .../_widgets/avatar/on_board_circle.dart | 4 +- .../_widgets/button/face_book_button.dart | 11 +- .../_widgets/button/login_button.dart | 7 +- .../_widgets/card/build_user_card.dart | 9 +- .../_widgets/list-tile/friend_card.dart | 24 +- .../_widgets/listview/on_board_indicator.dart | 8 +- .../authenticate/login/model/login_model.dart | 4 +- .../login/model/login_model.g.dart | 10 +- .../login/model/login_response_model.dart | 2 +- .../login/model/login_response_model.g.dart | 9 +- .../login/service/ILoginService.dart | 7 +- .../login/service/login_service.dart | 11 +- .../authenticate/login/view/login_view.dart | 136 +++++---- .../login/view/login_view_two.dart | 73 +++-- .../login/viewmodel/login_view_model.dart | 50 ++-- .../login/viewmodel/login_view_model.g.dart | 20 +- .../onboard/model/on_board_model.dart | 4 +- .../onboard/view/on_board_view.dart | 37 ++- .../viewModel/on_board_view_model.dart | 39 ++- .../viewModel/on_board_view_model.g.dart | 12 +- .../splash/model/force_update_model.dart | 6 +- .../splash/model/force_update_model.g.dart | 13 +- .../splash/service/splash_service.dart | 9 +- .../authenticate/splash/view/splash_view.dart | 26 +- .../splash/viewmodel/device_and_cahe.dart | 3 +- .../splash/viewmodel/splash_view_model.dart | 37 +-- .../splash/viewmodel/splash_view_model.g.dart | 9 +- .../authenticate/test/model/test_model.dart | 32 ++- .../authenticate/test/model/test_model.g.dart | 14 +- .../authenticate/test/view/test_view.dart | 20 +- .../test/viewmodel/test_view_model.dart | 15 +- .../test/viewmodel/test_view_model.g.dart | 16 +- .../home/build/feed/model/house_model.dart | 20 +- .../home/build/feed/model/house_model.g.dart | 40 ++- .../build/feed/service/IBuildFeedService.dart | 8 +- .../feed/service/build_feed_service.dart | 10 +- .../home/build/feed/view/build_feed_view.dart | 31 +-- .../feed/viewmodel/build_feed_view_model.dart | 15 +- .../viewmodel/build_feed_view_model.g.dart | 19 +- .../home/burger/model/burger_model.g.dart | 18 +- .../home/burger/service/burger_serivce.dart | 15 +- lib/view/home/burger/view/burgers_view.dart | 67 +++-- .../burger/viewmodel/burger_view_model.dart | 23 +- .../burger/viewmodel/burger_view_model.g.dart | 32 ++- lib/view/home/game/model/game_model.dart | 12 +- lib/view/home/game/model/game_model.g.dart | 16 +- lib/view/home/game/model/slider_model.dart | 4 +- lib/view/home/game/model/slider_model.g.dart | 12 +- lib/view/home/game/service/IGameService.dart | 11 +- lib/view/home/game/service/game_service.dart | 17 +- lib/view/home/game/view/game_view.dart | 39 ++- .../game/view/subview/game_view_cards.dart | 16 +- .../home/game/viewmodel/game_view_model.dart | 17 +- .../game/viewmodel/game_view_model.g.dart | 13 +- .../home/social/model/social_user_model.dart | 10 +- .../social/model/social_user_model.g.dart | 12 +- .../home/social/service/ISocialService.dart | 10 +- .../home/social/service/socail_service.dart | 18 +- lib/view/home/social/view/social_view.dart | 43 +-- .../home/social/view/social_view_detial.dart | 25 +- .../social/viewmodel/social_view_model.dart | 16 +- .../social/viewmodel/social_view_model.g.dart | 25 +- lib/view/settings/model/settings_dynamic.dart | 6 +- lib/view/settings/view/settings_view.dart | 67 +++-- .../view/subview/settings_dynamic_view.dart | 7 +- .../viewmodel/settings_view_model.dart | 21 +- .../viewmodel/settings_view_model.g.dart | 9 +- module/all_of_template/.vscode/settings.json | 5 + module/all_of_template/analysis_options.yaml | 17 ++ .../lib/features/buy_view.dart | 6 +- module/all_of_template/pubspec.lock | 58 ++-- module/all_of_template/pubspec.yaml | 4 +- .../analysis_options.yaml | 17 ++ .../lib/src/button/icon_button.dart | 9 +- .../lib/src/button/normal_button.dart | 5 +- .../lib/src/button/title_text_button.dart | 9 +- .../src/card/not_found_navigation_widget.dart | 4 +- .../lib/src/column/form_column.dart | 7 +- .../src/container/random_color_container.dart | 4 +- .../lib/src/decoration/circle_decoration.dart | 18 +- .../src/list-view/indicator_list_view.dart | 15 +- .../lib/src/slider/range_price_slider.dart | 3 +- .../lib/src/text/auto_locale_text.dart | 5 +- module/architecture_widgets/pubspec.lock | 198 ++++++++++--- module/architecture_widgets/pubspec.yaml | 6 +- .../test/architecture_widgets_test.dart | 1 - pubspec.lock | 262 +++++++++++++----- pubspec.yaml | 20 +- 130 files changed, 1537 insertions(+), 1225 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 module/all_of_template/.vscode/settings.json create mode 100644 module/all_of_template/analysis_options.yaml create mode 100644 module/architecture_widgets/analysis_options.yaml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e93415e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "cSpell.words": [ + "fluttermvvmtemplate", + "vexana" + ] +} \ No newline at end of file diff --git a/analysis_options.yaml b/analysis_options.yaml index 486705d..df989ed 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -1 +1,17 @@ -include: package:pedantic/analysis_options.1.9.0.yaml +include: package:very_good_analysis/analysis_options.yaml + + +analyzer: + exclude: + - "**/*.g.dart" + - "**/*.freezed.dart" + - "test/.test_coverage.dart" + - "bin/cache/**" + - "lib/generated_plugin_registrant.dart" + - test + - assets/translations + +linter: + rules: + public_member_api_docs: false + library_private_types_in_public_api: false \ No newline at end of file diff --git a/lib/core/base/model/base_error.dart b/lib/core/base/model/base_error.dart index 4ba0682..04e488e 100644 --- a/lib/core/base/model/base_error.dart +++ b/lib/core/base/model/base_error.dart @@ -1,7 +1,7 @@ -import '../../init/network/IResponseModel.dart'; +import 'package:fluttermvvmtemplate/core/init/network/IResponseModel.dart'; class BaseError extends IErrorModel { - final String message; BaseError(this.message); + final String message; } diff --git a/lib/core/base/model/base_view_model.dart b/lib/core/base/model/base_view_model.dart index 873b2aa..64c97a9 100644 --- a/lib/core/base/model/base_view_model.dart +++ b/lib/core/base/model/base_view_model.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; -import '../../init/cache/locale_manager.dart'; -import '../../init/navigation/navigation_service.dart'; -import '../../init/network/ICoreDio.dart'; -import '../../init/network/network_manager.dart'; -import '../../init/network/vexana_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/cache/locale_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/navigation/navigation_service.dart'; +import 'package:fluttermvvmtemplate/core/init/network/ICoreDio.dart'; +import 'package:fluttermvvmtemplate/core/init/network/network_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/network/vexana_manager.dart'; abstract class BaseViewModel { - BuildContext? context; + late BuildContext viewModelContext; ICoreDioNullSafety? coreDio = NetworkManager.instance!.coreDio; VexanaManager? vexanaManager = VexanaManager.instance; diff --git a/lib/core/base/view/base_widget.dart b/lib/core/base/view/base_widget.dart index 6156fc5..322bc64 100644 --- a/lib/core/base/view/base_widget.dart +++ b/lib/core/base/view/base_widget.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:mobx/mobx.dart'; class BaseView extends StatefulWidget { + + const BaseView({Key? key, required this.viewModel, required this.onPageBuilder, required this.onModelReady, this.onDispose}) : super(key: key); final Widget Function(BuildContext context, T value) onPageBuilder; final T viewModel; final Function(T model) onModelReady; final VoidCallback? onDispose; - const BaseView({Key? key, required this.viewModel, required this.onPageBuilder, required this.onModelReady, this.onDispose}) : super(key: key); - @override _BaseViewState createState() => _BaseViewState(); } diff --git a/lib/core/constants/image/image_constatns.dart b/lib/core/constants/image/image_constatns.dart index 6f942d3..479ef75 100644 --- a/lib/core/constants/image/image_constatns.dart +++ b/lib/core/constants/image/image_constatns.dart @@ -1,10 +1,10 @@ class ImageConstants { + + ImageConstants._init(); static ImageConstants? _instace; static ImageConstants get instance => _instace ??= ImageConstants._init(); - ImageConstants._init(); - String get logo => toPng('veli'); String get hotDog => toPng('hotdogs'); diff --git a/lib/core/extension/context_extension.dart b/lib/core/extension/context_extension.dart index b6eb43e..4abfa83 100644 --- a/lib/core/extension/context_extension.dart +++ b/lib/core/extension/context_extension.dart @@ -53,6 +53,6 @@ extension PageExtension on BuildContext { } extension DurationExtension on BuildContext { - Duration get lowDuration => Duration(milliseconds: 500); - Duration get normalDuration => Duration(seconds: 1); + Duration get lowDuration => const Duration(milliseconds: 500); + Duration get normalDuration => const Duration(seconds: 1); } diff --git a/lib/core/extension/network_exntension.dart b/lib/core/extension/network_exntension.dart index e7b97aa..29a78a1 100644 --- a/lib/core/extension/network_exntension.dart +++ b/lib/core/extension/network_exntension.dart @@ -1,4 +1,4 @@ -import '../constants/enums/http_request_enum.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/http_request_enum.dart'; extension NetworkTypeExtension on HttpTypes? { String get rawValue { diff --git a/lib/core/extension/string_extension.dart b/lib/core/extension/string_extension.dart index 6fe1596..d1a5670 100644 --- a/lib/core/extension/string_extension.dart +++ b/lib/core/extension/string_extension.dart @@ -1,6 +1,6 @@ import 'package:easy_localization/easy_localization.dart'; -import '../constants/app/app_constants.dart'; +import 'package:fluttermvvmtemplate/core/constants/app/app_constants.dart'; extension StringLocalization on String { String get locale => this.tr(); diff --git a/lib/core/init/analytics/analytics_manager.dart b/lib/core/init/analytics/analytics_manager.dart index 10d7fcb..2395116 100644 --- a/lib/core/init/analytics/analytics_manager.dart +++ b/lib/core/init/analytics/analytics_manager.dart @@ -3,11 +3,11 @@ import 'package:flutter/material.dart'; import 'package:fluttermvvmtemplate/core/constants/app/app_constants.dart'; class AnalytcisManager { - static final AnalytcisManager _instance = AnalytcisManager._init(); - static AnalytcisManager get instance => _instance; AnalytcisManager._init() { init(); } + static final AnalytcisManager _instance = AnalytcisManager._init(); + static AnalytcisManager get instance => _instance; static final _analytics = FirebaseAnalytics.instance; diff --git a/lib/core/init/cache/locale_manager.dart b/lib/core/init/cache/locale_manager.dart index 6c1ea96..13f8b55 100644 --- a/lib/core/init/cache/locale_manager.dart +++ b/lib/core/init/cache/locale_manager.dart @@ -1,18 +1,17 @@ +import 'package:fluttermvvmtemplate/core/constants/enums/locale_keys_enum.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import '../../constants/enums/locale_keys_enum.dart'; - class LocaleManager { - static final LocaleManager _instance = LocaleManager._init(); - - SharedPreferences? _preferences; - static LocaleManager get instance => _instance; LocaleManager._init() { SharedPreferences.getInstance().then((value) { _preferences = value; }); } + static final LocaleManager _instance = LocaleManager._init(); + + SharedPreferences? _preferences; + static LocaleManager get instance => _instance; static Future prefrencesInit() async { instance._preferences ??= await SharedPreferences.getInstance(); } diff --git a/lib/core/init/lang/language_manager.dart b/lib/core/init/lang/language_manager.dart index a946053..474a16d 100644 --- a/lib/core/init/lang/language_manager.dart +++ b/lib/core/init/lang/language_manager.dart @@ -1,16 +1,16 @@ import 'package:flutter/material.dart'; class LanguageManager { + + LanguageManager._init(); static LanguageManager? _instance; static LanguageManager get instance { _instance ??= LanguageManager._init(); return _instance!; } - LanguageManager._init(); - - final enLocale = Locale('en', 'US'); - final trLocale = Locale('tr', 'TR'); + final enLocale = const Locale('en', 'US'); + final trLocale = const Locale('tr', 'TR'); List get supportedLocales => [enLocale, trLocale]; } diff --git a/lib/core/init/lang/locale_keys.g.dart b/lib/core/init/lang/locale_keys.g.dart index 7ea0b4b..3c43d2b 100644 --- a/lib/core/init/lang/locale_keys.g.dart +++ b/lib/core/init/lang/locale_keys.g.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const welcome = 'welcome'; static const onBoard_page1_title = 'onBoard.page1.title'; static const onBoard_page1_desc = 'onBoard.page1.desc'; @@ -64,5 +64,4 @@ abstract class LocaleKeys { static const home_setting_applicationTour = 'home.setting.applicationTour'; static const home_setting = 'home.setting'; static const home = 'home'; - } diff --git a/lib/core/init/navigation/navigation_route.dart b/lib/core/init/navigation/navigation_route.dart index b74b539..cdbfc74 100644 --- a/lib/core/init/navigation/navigation_route.dart +++ b/lib/core/init/navigation/navigation_route.dart @@ -1,32 +1,30 @@ import 'package:all_of_template/features/buy_view.dart'; +import 'package:architecture_widgets/src/card/not_found_navigation_widget.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; +import 'package:fluttermvvmtemplate/core/constants/navigation/navigation_constants.dart'; +import 'package:fluttermvvmtemplate/product/exception/navigate_model_not_found.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/onboard/view/on_board_view.dart'; import 'package:fluttermvvmtemplate/view/authenticate/splash/view/splash_view.dart'; - -import '../../../product/exception/navigate_model_not_found.dart'; -import '../../../view/authenticate/onboard/view/on_board_view.dart'; -import '../../../view/authenticate/test/view/test_view.dart'; -import '../../../view/settings/model/settings_dynamic.dart'; -import '../../../view/settings/view/subview/settings_dynamic_view.dart'; -import 'package:architecture_widgets/src/card/not_found_navigation_widget.dart'; -import '../../constants/navigation/navigation_constants.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/test/view/test_view.dart'; +import 'package:fluttermvvmtemplate/view/settings/model/settings_dynamic.dart'; +import 'package:fluttermvvmtemplate/view/settings/view/subview/settings_dynamic_view.dart'; class NavigationRoute { - static final NavigationRoute _instance = NavigationRoute._init(); - static NavigationRoute get instance => _instance; NavigationRoute._init(); + static final NavigationRoute _instance = NavigationRoute._init(); + static NavigationRoute get instance => _instance; Route generateRoute(RouteSettings args) { switch (args.name) { case NavigationConstants.DEFAULT: - return normalNavigate(SplashView(), NavigationConstants.DEFAULT); + return normalNavigate(const SplashView(), NavigationConstants.DEFAULT); case NavigationConstants.TEST_VIEW: return normalNavigate(TestsView(), NavigationConstants.TEST_VIEW); case NavigationConstants.BUY_VIEW: - return normalNavigate(BuyView(), NavigationConstants.BUY_VIEW); + return normalNavigate(const BuyView(), NavigationConstants.BUY_VIEW); case NavigationConstants.ON_BOARD: return normalNavigate(OnBoardView(), NavigationConstants.ON_BOARD); @@ -51,6 +49,6 @@ class NavigationRoute { return MaterialPageRoute( builder: (context) => widget, //analytciste görülecek olan sayfa ismi için pageName veriyoruz - settings: RouteSettings(name: pageName)); + settings: RouteSettings(name: pageName),); } } diff --git a/lib/core/init/navigation/navigation_service.dart b/lib/core/init/navigation/navigation_service.dart index 0d14b53..85cc5c3 100644 --- a/lib/core/init/navigation/navigation_service.dart +++ b/lib/core/init/navigation/navigation_service.dart @@ -1,12 +1,12 @@ import 'package:flutter/cupertino.dart'; -import 'INavigationService.dart'; +import 'package:fluttermvvmtemplate/core/init/navigation/INavigationService.dart'; class NavigationService implements INavigationService { - static final NavigationService _instance = NavigationService._init(); - static NavigationService get instance => _instance; NavigationService._init(); + static final NavigationService _instance = NavigationService._init(); + static NavigationService get instance => _instance; GlobalKey navigatorKey = GlobalKey(); final removeAllOldRoutes = (Route route) => false; diff --git a/lib/core/init/network/ICoreDio.dart b/lib/core/init/network/ICoreDio.dart index dd349cd..10cde4f 100644 --- a/lib/core/init/network/ICoreDio.dart +++ b/lib/core/init/network/ICoreDio.dart @@ -1,41 +1,49 @@ -import '../../base/model/base_model.dart'; -import '../../constants/enums/http_request_enum.dart'; -import 'IResponseModel.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_model.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/http_request_enum.dart'; +import 'package:fluttermvvmtemplate/core/init/network/IResponseModel.dart'; abstract class ICoreDio { - Future> fetch(String path, - {required HttpTypes type, - required T parseModel, - dynamic data, - Map? queryParameters, - void Function(int, int)? onReceiveProgress}); + Future> fetch( + String path, { + required HttpTypes type, + required T parseModel, + dynamic data, + Map? queryParameters, + void Function(int, int)? onReceiveProgress, + }); } // MARK: Null SAfety abstract class ICoreDioNullSafety { - Future> send(String path, - {required HttpTypes type, - required T parseModel, - dynamic data, - Map? queryParameters, - void Function(int, int)? onReceiveProgress}); + Future> send( + String path, { + required HttpTypes type, + required BaseModel parseModel, + dynamic data, + Map? queryParameters, + void Function(int, int)? onReceiveProgress, + }); } abstract class ICoreDioFull extends ICoreDio { - Future> fetchNoNetwork(String path, - {required HttpTypes type, - required T parseModel, - dynamic data, - Map? queryParameters, - void Function(int, int)? onReceiveProgress}); + Future> fetchNoNetwork( + String path, { + required HttpTypes type, + required T parseModel, + dynamic data, + Map? queryParameters, + void Function(int, int)? onReceiveProgress, + }); } // MARK: Nul SAfety abstract class ICoreDioFullNulSafetyFull extends ICoreDioNullSafety { - Future> fetchNoNetwork(String path, - {required HttpTypes type, - required T parseModel, - dynamic data, - Map? queryParameters, - void Function(int, int)? onReceiveProgress}); + Future> fetchNoNetwork( + String path, { + required HttpTypes type, + required T parseModel, + dynamic data, + Map? queryParameters, + void Function(int, int)? onReceiveProgress, + }); } diff --git a/lib/core/init/network/IResponseModel.dart b/lib/core/init/network/IResponseModel.dart index 18cbc71..1a8e63d 100644 --- a/lib/core/init/network/IResponseModel.dart +++ b/lib/core/init/network/IResponseModel.dart @@ -8,10 +8,10 @@ abstract class IErrorModel { } class ResponseModel extends IResponseModel { + + ResponseModel({this.data, this.error}); @override final T? data; @override final IErrorModel? error; - - ResponseModel({this.data, this.error}); } diff --git a/lib/core/init/network/core_dio.dart b/lib/core/init/network/core_dio.dart index 41937fb..34cf89e 100644 --- a/lib/core/init/network/core_dio.dart +++ b/lib/core/init/network/core_dio.dart @@ -3,33 +3,40 @@ import 'dart:io'; import 'package:dio/adapter.dart'; import 'package:dio/dio.dart'; -import '../../base/model/base_error.dart'; -import '../../base/model/base_model.dart'; -import '../../constants/enums/http_request_enum.dart'; -import '../../extension/network_exntension.dart'; -import 'ICoreDio.dart'; -import 'IResponseModel.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_error.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_model.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/http_request_enum.dart'; +import 'package:fluttermvvmtemplate/core/extension/network_exntension.dart'; +import 'package:fluttermvvmtemplate/core/init/network/ICoreDio.dart'; +import 'package:fluttermvvmtemplate/core/init/network/IResponseModel.dart'; part './network_core/core_operations.dart'; class CoreDio with DioMixin implements Dio, ICoreDioNullSafety { - @override - final BaseOptions options; - CoreDio(this.options) { options = options; interceptors.add(InterceptorsWrapper()); httpClientAdapter = DefaultHttpClientAdapter(); } + @override + final BaseOptions options; @override - Future> send(String path, - {required HttpTypes type, - required T parseModel, - dynamic data, - Map? queryParameters, - void Function(int, int)? onReceiveProgress}) async { - final response = await request(path, data: data, options: Options(method: type.rawValue)); + Future> send( + String path, { + required HttpTypes type, + required BaseModel parseModel, + dynamic data, + Map? queryParameters, + void Function(int, int)? onReceiveProgress, + }) async { + final response = await request( + path, + data: data, + options: Options( + method: type.rawValue, + ), + ); switch (response.statusCode) { case HttpStatus.ok: case HttpStatus.accepted: diff --git a/lib/core/init/network/network_core/core_operations.dart b/lib/core/init/network/network_core/core_operations.dart index 4715f0e..188f44d 100644 --- a/lib/core/init/network/network_core/core_operations.dart +++ b/lib/core/init/network/network_core/core_operations.dart @@ -1,8 +1,8 @@ part of '../core_dio.dart'; extension _CoreDioOperations on CoreDio { - R? _responseParser(BaseModel model, dynamic data) { - if (data is List) { + R? _responseParser(BaseModel model, dynamic data) { + if (data is List>) { return data.map((e) => model.fromJson(e)).toList().cast() as R; } else if (data is Map) { return model.fromJson(data as Map) as R; diff --git a/lib/core/init/network/network_manager.dart b/lib/core/init/network/network_manager.dart index 5b367d2..98b8329 100644 --- a/lib/core/init/network/network_manager.dart +++ b/lib/core/init/network/network_manager.dart @@ -1,18 +1,11 @@ import 'package:dio/dio.dart'; -import '../../constants/enums/locale_keys_enum.dart'; -import '../cache/locale_manager.dart'; -import 'ICoreDio.dart'; -import 'core_dio.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/locale_keys_enum.dart'; +import 'package:fluttermvvmtemplate/core/init/cache/locale_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/network/ICoreDio.dart'; +import 'package:fluttermvvmtemplate/core/init/network/core_dio.dart'; class NetworkManager { - static NetworkManager? _instance; - static NetworkManager? get instance { - _instance ??= NetworkManager._init(); - return _instance; - } - - ICoreDioNullSafety? coreDio; NetworkManager._init() { final baseOptions = @@ -30,4 +23,11 @@ class NetworkManager { // }, // )); } + static NetworkManager? _instance; + static NetworkManager? get instance { + _instance ??= NetworkManager._init(); + return _instance; + } + + ICoreDioNullSafety? coreDio; } diff --git a/lib/core/init/network/vexana_manager.dart b/lib/core/init/network/vexana_manager.dart index 4a3843f..98a6e22 100644 --- a/lib/core/init/network/vexana_manager.dart +++ b/lib/core/init/network/vexana_manager.dart @@ -3,6 +3,8 @@ import 'dart:io'; import 'package:vexana/vexana.dart'; class VexanaManager { + + VexanaManager._init(); static VexanaManager? _instace; static VexanaManager get instance { if (_instace != null) return _instace!; @@ -13,8 +15,6 @@ class VexanaManager { static const String _iosBaseUrl = 'http://localhost:3000/'; static const String _androidBaseUrl = 'http://10.0.2.2:3000/'; - VexanaManager._init(); - INetworkManager networkManager = NetworkManager(isEnableLogger: true, options: BaseOptions(baseUrl: Platform.isAndroid ? _androidBaseUrl : _iosBaseUrl)); } diff --git a/lib/core/init/notifier/provider_list.dart b/lib/core/init/notifier/provider_list.dart index 074a413..0d2e54a 100644 --- a/lib/core/init/notifier/provider_list.dart +++ b/lib/core/init/notifier/provider_list.dart @@ -1,18 +1,17 @@ +import 'package:fluttermvvmtemplate/core/init/navigation/navigation_service.dart'; +import 'package:fluttermvvmtemplate/core/init/notifier/theme_notifer.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; -import '../navigation/navigation_service.dart'; -import 'theme_notifer.dart'; - class ApplicationProvider { + + ApplicationProvider._init(); static ApplicationProvider? _instance; static ApplicationProvider get instance { _instance ??= ApplicationProvider._init(); return _instance!; } - ApplicationProvider._init(); - List singleItems = []; List dependItems = [ ChangeNotifierProvider( diff --git a/lib/core/init/notifier/theme_notifer.dart b/lib/core/init/notifier/theme_notifer.dart index 815532f..8fa2c8e 100644 --- a/lib/core/init/notifier/theme_notifer.dart +++ b/lib/core/init/notifier/theme_notifer.dart @@ -1,7 +1,7 @@ import 'package:architecture_theme/theme/app_theme_light.dart'; import 'package:flutter/material.dart'; -import '../../constants/enums/app_theme_enum.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/app_theme_enum.dart'; class ThemeNotifier extends ChangeNotifier { ThemeData _currentTheme = AppThemeLight.instance.theme; @@ -30,7 +30,6 @@ class ThemeNotifier extends ChangeNotifier { _currenThemeEnum = AppThemes.DARK; } else { _currentTheme = AppThemeLight.instance.theme; - ; _currenThemeEnum = AppThemes.LIGHT; } notifyListeners(); diff --git a/lib/core/init/theme/light/color_scheme_light.dart b/lib/core/init/theme/light/color_scheme_light.dart index d2427a9..6a49550 100644 --- a/lib/core/init/theme/light/color_scheme_light.dart +++ b/lib/core/init/theme/light/color_scheme_light.dart @@ -1,21 +1,21 @@ import 'package:flutter/material.dart'; class ColorSchemeLight { + + ColorSchemeLight._init(); static ColorSchemeLight? _instace; static ColorSchemeLight? get instance { - if (_instace == null) _instace = ColorSchemeLight._init(); + _instace ??= ColorSchemeLight._init(); return _instace; } - ColorSchemeLight._init(); - - final Color brown = Color(0xffa87e6f); - final Color red = Color(0xffc10e0e); - final Color white = Color(0xffffffff); - final Color gray = Color(0xffa5a6ae); - final Color lightGray = Color(0xfff7f7f7); - final Color darkGray = Color(0xff676870); - final Color black = Color(0xff020306); + final Color brown = const Color(0xffa87e6f); + final Color red = const Color(0xffc10e0e); + final Color white = const Color(0xffffffff); + final Color gray = const Color(0xffa5a6ae); + final Color lightGray = const Color(0xfff7f7f7); + final Color darkGray = const Color(0xff676870); + final Color black = const Color(0xff020306); - final Color azure = Color(0xff27928d); + final Color azure = const Color(0xff27928d); } diff --git a/lib/core/init/theme/light/light_theme_interface.dart b/lib/core/init/theme/light/light_theme_interface.dart index 76f3d81..3c05e73 100644 --- a/lib/core/init/theme/light/light_theme_interface.dart +++ b/lib/core/init/theme/light/light_theme_interface.dart @@ -1,6 +1,6 @@ -import 'color_scheme_light.dart'; -import 'padding_insets.dart'; -import 'text_theme_light.dart'; +import 'package:fluttermvvmtemplate/core/init/theme/light/color_scheme_light.dart'; +import 'package:fluttermvvmtemplate/core/init/theme/light/padding_insets.dart'; +import 'package:fluttermvvmtemplate/core/init/theme/light/text_theme_light.dart'; abstract class ILightTheme { TextThemeLight? textThemeLight = TextThemeLight.instance; diff --git a/lib/core/init/theme/light/padding_insets.dart b/lib/core/init/theme/light/padding_insets.dart index a1b6f74..01affe7 100644 --- a/lib/core/init/theme/light/padding_insets.dart +++ b/lib/core/init/theme/light/padding_insets.dart @@ -1,5 +1,5 @@ import 'package:flutter/rendering.dart'; class PaddingInsets { - final lowPaddingAll = EdgeInsets.all(5); + final lowPaddingAll = const EdgeInsets.all(5); } diff --git a/lib/core/init/theme/light/text_theme_light.dart b/lib/core/init/theme/light/text_theme_light.dart index 40b87af..3c824f2 100644 --- a/lib/core/init/theme/light/text_theme_light.dart +++ b/lib/core/init/theme/light/text_theme_light.dart @@ -1,18 +1,39 @@ import 'package:flutter/material.dart'; class TextThemeLight { - static TextThemeLight? _instace; + TextThemeLight._init(); + static TextThemeLight? _instance; static TextThemeLight? get instance { - if (_instace == null) _instace = TextThemeLight._init(); - return _instace; + _instance ??= TextThemeLight._init(); + return _instance; } - TextThemeLight._init(); - - final TextStyle headline1 = TextStyle(fontSize: 96, fontWeight: FontWeight.w300, letterSpacing: -1.5); - final TextStyle headline2 = TextStyle(fontSize: 60, fontWeight: FontWeight.w300, letterSpacing: -0.5); - final TextStyle headline3 = TextStyle(fontSize: 48, fontWeight: FontWeight.w400); - final TextStyle headline4 = TextStyle(fontSize: 34, fontWeight: FontWeight.w400, letterSpacing: 0.25); - final TextStyle headline5 = TextStyle(fontSize: 24, fontWeight: FontWeight.w400); - final TextStyle overline = TextStyle(fontSize: 10, fontWeight: FontWeight.w400, letterSpacing: 1.5); + final TextStyle headline1 = const TextStyle( + fontSize: 96, + fontWeight: FontWeight.w300, + letterSpacing: -1.5, + ); + final TextStyle headline2 = const TextStyle( + fontSize: 60, + fontWeight: FontWeight.w300, + letterSpacing: -0.5, + ); + final TextStyle headline3 = const TextStyle( + fontSize: 48, + fontWeight: FontWeight.w400, + ); + final TextStyle headline4 = const TextStyle( + fontSize: 34, + fontWeight: FontWeight.w400, + letterSpacing: 0.25, + ); + final TextStyle headline5 = const TextStyle( + fontSize: 24, + fontWeight: FontWeight.w400, + ); + final TextStyle overline = const TextStyle( + fontSize: 10, + fontWeight: FontWeight.w400, + letterSpacing: 1.5, + ); } diff --git a/lib/core/init/theme/panache/red_theme.dart b/lib/core/init/theme/panache/red_theme.dart index 50f913e..083a514 100644 --- a/lib/core/init/theme/panache/red_theme.dart +++ b/lib/core/init/theme/panache/red_theme.dart @@ -1,58 +1,41 @@ import 'package:flutter/material.dart'; -const String FONT_FAMILY = "Poppins"; +const String FONT_FAMILY = 'Poppins'; final ThemeData redTheme = ThemeData( fontFamily: FONT_FAMILY, - primarySwatch: Colors.red, brightness: Brightness.light, - primaryColor: Color(0xffC20003), //xxx - primaryColorBrightness: Brightness.dark, - primaryColorLight: Color(0xffffcdd2), - primaryColorDark: Color(0xffd32f2f), - accentColor: Color(0xfff44336), - accentColorBrightness: Brightness.dark, - canvasColor: Color(0xfffafafa), //XX - scaffoldBackgroundColor: Color(0xfffafafa), //xx - bottomAppBarColor: Color(0xffffffff), - cardColor: Color(0xffffffff), + primaryColor: const Color(0xffC20003), + primaryColorLight: const Color(0xffffcdd2), + primaryColorDark: const Color(0xffd32f2f), + canvasColor: const Color(0xfffafafa), //XX + scaffoldBackgroundColor: const Color(0xfffafafa), //xx + bottomAppBarColor: const Color(0xffffffff), + cardColor: const Color(0xffffffff), - dividerColor: Color(0xffffffff), //XX - highlightColor: Color(0x66bcbcbc), - splashColor: Color(0xffE8E8E8), - selectedRowColor: Color(0xfff5f5f5), - unselectedWidgetColor: Color(0x8a000000), - disabledColor: Color(0x61000000), //xx - buttonColor: Color(0xffe0e0e0), - toggleableActiveColor: Color(0xffe53935), - secondaryHeaderColor: Color(0xffffebee), - textSelectionColor: Color(0xffef9a9a), - cursorColor: Color(0xff4285f4), - textSelectionHandleColor: Color(0xffe57373), - backgroundColor: Color(0xffef9a9a), - toggleButtonsTheme: ToggleButtonsThemeData( - fillColor: Color(0xffC20003), textStyle: TextStyle(color: Colors.white), selectedColor: Colors.white), - floatingActionButtonTheme: FloatingActionButtonThemeData(backgroundColor: Color(0xffC20003)), + dividerColor: const Color(0xffffffff), //XX + highlightColor: const Color(0x66bcbcbc), + splashColor: const Color(0xffE8E8E8), + selectedRowColor: const Color(0xfff5f5f5), + unselectedWidgetColor: const Color(0x8a000000), + disabledColor: const Color(0x61000000), + toggleableActiveColor: const Color(0xffe53935), + secondaryHeaderColor: const Color(0xffffebee), + backgroundColor: const Color(0xffef9a9a), + toggleButtonsTheme: const ToggleButtonsThemeData( + fillColor: Color(0xffC20003), textStyle: TextStyle(color: Colors.white), selectedColor: Colors.white,), + floatingActionButtonTheme: const FloatingActionButtonThemeData(backgroundColor: Color(0xffC20003)), - dialogBackgroundColor: Color(0xffffffff), + dialogBackgroundColor: const Color(0xffffffff), - indicatorColor: Color(0xffC20003), //XX - hintColor: Color(0x8a000000), //xx - errorColor: Color(0xffd32f2f), - buttonTheme: ButtonThemeData( - textTheme: ButtonTextTheme.normal, - minWidth: 88, - height: 36, - padding: EdgeInsets.only(top: 0, bottom: 0, left: 16, right: 16), + indicatorColor: const Color(0xffC20003), //XX + hintColor: const Color(0x8a000000), //xx + errorColor: const Color(0xffd32f2f), + buttonTheme: const ButtonThemeData( + padding: EdgeInsets.only(left: 16, right: 16), shape: RoundedRectangleBorder( - side: BorderSide( - color: Color(0xff000000), - width: 0, - style: BorderStyle.none, - ), - borderRadius: BorderRadius.all(Radius.circular(2.0)), - ), - alignedDropdown: false, + borderRadius: BorderRadius.all(Radius.circular(2)), + ), buttonColor: Color(0xffe0e0e0), disabledColor: Color(0x61000000), highlightColor: Color(0x29000000), @@ -61,9 +44,7 @@ final ThemeData redTheme = ThemeData( hoverColor: Color(0x0a000000), colorScheme: ColorScheme( primary: Color(0xfff44336), - primaryVariant: Color(0xffd32f2f), - secondary: Color(0xffC20003), //xx - secondaryVariant: Color(0xffd32f2f), + secondary: Color(0xffC20003), surface: Color(0xffffffff), background: Color(0xffef9a9a), error: Color(0xffd32f2f), @@ -76,7 +57,7 @@ final ThemeData redTheme = ThemeData( ), ), - textTheme: TextTheme( + textTheme: const TextTheme( //XX headline1: TextStyle( color: Color(0x8a000000), @@ -127,25 +108,21 @@ final ThemeData redTheme = ThemeData( ), bodyText1: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), bodyText2: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), caption: TextStyle( color: Color(0x8a000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), button: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), @@ -157,12 +134,11 @@ final ThemeData redTheme = ThemeData( ), overline: TextStyle( color: Color(0xff000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), ), - primaryTextTheme: TextTheme( + primaryTextTheme: const TextTheme( //XX headline1: TextStyle( color: Color(0xfffafafa), @@ -213,175 +189,112 @@ final ThemeData redTheme = ThemeData( ), bodyText1: TextStyle( color: Color(0xfffafafa), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), bodyText2: TextStyle( color: Color(0xffffffff), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), caption: TextStyle( color: Color(0xb3ffffff), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), button: TextStyle( color: Color(0xffffffff), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), subtitle2: TextStyle( color: Color(0xffffffff), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), overline: TextStyle( color: Color(0xffffffff), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), ), - inputDecorationTheme: InputDecorationTheme( + inputDecorationTheme: const InputDecorationTheme( labelStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), helperStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), hintStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), errorStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), - errorMaxLines: null, - isDense: false, - contentPadding: EdgeInsets.only(top: 12, bottom: 12, left: 0, right: 0), - isCollapsed: false, + contentPadding: EdgeInsets.only(top: 12, bottom: 12), prefixStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), suffixStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), counterStyle: TextStyle( color: Color(0xdd000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), - filled: false, fillColor: Color(0x00000000), errorBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Color(0xff000000), - width: 1, - style: BorderStyle.solid, - ), - borderRadius: BorderRadius.all(Radius.circular(4.0)), + borderRadius: BorderRadius.all(Radius.circular(4)), ), focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Color(0xff000000), - width: 1, - style: BorderStyle.solid, - ), - borderRadius: BorderRadius.all(Radius.circular(4.0)), + borderRadius: BorderRadius.all(Radius.circular(4)), ), focusedErrorBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Color(0xff000000), - width: 1, - style: BorderStyle.solid, - ), - borderRadius: BorderRadius.all(Radius.circular(4.0)), + borderRadius: BorderRadius.all(Radius.circular(4)), ), disabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Color(0xff000000), - width: 1, - style: BorderStyle.solid, - ), - borderRadius: BorderRadius.all(Radius.circular(4.0)), + borderRadius: BorderRadius.all(Radius.circular(4)), ), enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Color(0xff000000), - width: 1, - style: BorderStyle.solid, - ), - borderRadius: BorderRadius.all(Radius.circular(4.0)), + borderRadius: BorderRadius.all(Radius.circular(4)), ), border: UnderlineInputBorder( - borderSide: BorderSide( - color: Color(0xff000000), - width: 1, - style: BorderStyle.solid, - ), - borderRadius: BorderRadius.all(Radius.circular(4.0)), + borderRadius: BorderRadius.all(Radius.circular(4)), ), ), - iconTheme: IconThemeData( + iconTheme: const IconThemeData( color: Color(0xdd000000), opacity: 1, size: 24, ), - primaryIconTheme: IconThemeData( + primaryIconTheme: const IconThemeData( color: Color(0xffffffff), opacity: 1, size: 24, ), - sliderTheme: SliderThemeData( - activeTrackColor: null, - inactiveTrackColor: null, - disabledActiveTrackColor: null, - disabledInactiveTrackColor: null, - activeTickMarkColor: null, - inactiveTickMarkColor: null, - disabledActiveTickMarkColor: null, - disabledInactiveTickMarkColor: null, - thumbColor: null, - disabledThumbColor: null, - thumbShape: null, - overlayColor: null, - valueIndicatorColor: null, - valueIndicatorShape: null, - showValueIndicator: null, + sliderTheme: const SliderThemeData( valueIndicatorTextStyle: TextStyle( color: Color(0xffffffff), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), ), - tabBarTheme: TabBarTheme( + tabBarTheme: const TabBarTheme( //xx labelStyle: TextStyle(fontSize: 14, fontWeight: FontWeight.bold), unselectedLabelStyle: TextStyle(fontSize: 10), @@ -389,41 +302,30 @@ final ThemeData redTheme = ThemeData( labelColor: Color(0xffffffff), unselectedLabelColor: Color(0xb2ffffff), ), - chipTheme: ChipThemeData( + chipTheme: const ChipThemeData( backgroundColor: Color(0x1f000000), brightness: Brightness.light, deleteIconColor: Color(0xde000000), disabledColor: Color(0x0c000000), - labelPadding: EdgeInsets.only(top: 0, bottom: 0, left: 8, right: 8), + labelPadding: EdgeInsets.only(left: 8, right: 8), labelStyle: TextStyle( color: Color(0xde000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), padding: EdgeInsets.only(top: 4, bottom: 4, left: 4, right: 4), secondaryLabelStyle: TextStyle( color: Color(0x3d000000), - fontSize: null, fontWeight: FontWeight.w400, fontStyle: FontStyle.normal, ), secondarySelectedColor: Color(0x3df44336), selectedColor: Color(0x3d000000), shape: StadiumBorder( - side: BorderSide( - color: Color(0xff000000), - width: 0, - style: BorderStyle.none, - )), + ), ), - dialogTheme: DialogTheme( + dialogTheme: const DialogTheme( shape: RoundedRectangleBorder( - side: BorderSide( - color: Color(0xff000000), - width: 0, - style: BorderStyle.none, - ), - borderRadius: BorderRadius.all(Radius.circular(0.0)), - )), + + ),), textSelectionTheme: const TextSelectionThemeData(cursorColor: Color(0xff4285f4), selectionColor: Color(0xffef9a9a), selectionHandleColor: Color(0xffe57373),), colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.red).copyWith(secondary: const Color(0xfff44336)), ); diff --git a/lib/main.dart b/lib/main.dart index da9c0ab..3ca425d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,27 +1,26 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/constants/app/app_constants.dart'; +import 'package:fluttermvvmtemplate/core/init/analytics/analytics_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/language_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/navigation/navigation_route.dart'; +import 'package:fluttermvvmtemplate/core/init/navigation/navigation_service.dart'; +import 'package:fluttermvvmtemplate/core/init/notifier/provider_list.dart'; +import 'package:fluttermvvmtemplate/core/init/notifier/theme_notifer.dart'; import 'package:provider/provider.dart'; -import 'core/constants/app/app_constants.dart'; -import 'core/init/analytics/analytics_manager.dart'; -import 'core/init/lang/language_manager.dart'; -import 'core/init/navigation/navigation_route.dart'; -import 'core/init/navigation/navigation_service.dart'; -import 'core/init/notifier/provider_list.dart'; -import 'core/init/notifier/theme_notifer.dart'; - Future main() async { await _init(); runApp(MultiProvider( providers: [...ApplicationProvider.instance.dependItems], child: EasyLocalization( - child: MyApp(), supportedLocales: LanguageManager.instance.supportedLocales, path: ApplicationConstants.LANG_ASSET_PATH, startLocale: LanguageManager.instance.enLocale, + child: MyApp(), ), - )); + ),); } Future _init() async { diff --git a/lib/product/exception/navigate_model_not_found.dart b/lib/product/exception/navigate_model_not_found.dart index a197521..4478451 100644 --- a/lib/product/exception/navigate_model_not_found.dart +++ b/lib/product/exception/navigate_model_not_found.dart @@ -1,7 +1,7 @@ class NavigateException implements Exception { - final dynamic model; NavigateException(this.model); + final dynamic model; @override String toString() { diff --git a/lib/product/model/user.dart b/lib/product/model/user.dart index 8325c73..cba9b2b 100644 --- a/lib/product/model/user.dart +++ b/lib/product/model/user.dart @@ -1,12 +1,12 @@ class UserModel { - final String userName; - final String userSurname; UserModel(this.userName, this.userSurname); - - String get shortName => '${userName[0]}${userSurname[0]}'; - String get fullName => '${userName} ${userSurname}'; factory UserModel.fake() { return UserModel('Veli', 'Bacik'); } + final String userName; + final String userSurname; + + String get shortName => '${userName[0]}${userSurname[0]}'; + String get fullName => '$userName $userSurname'; } diff --git a/lib/product/widget/button/header_button.dart b/lib/product/widget/button/header_button.dart index 5a3f394..a0fb2aa 100644 --- a/lib/product/widget/button/header_button.dart +++ b/lib/product/widget/button/header_button.dart @@ -1,14 +1,12 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; import 'package:kartal/kartal.dart'; -import '../../../core/init/lang/locale_keys.g.dart'; - class HeaderButton extends StatelessWidget { + const HeaderButton({Key? key, this.titleText, this.onPressed}) : super(key: key); final String? titleText; final VoidCallback? onPressed; - - const HeaderButton({Key? key, this.titleText, this.onPressed}) : super(key: key); @override Widget build(BuildContext context) { return Padding( @@ -27,20 +25,24 @@ class HeaderButton extends StatelessWidget { ); } - FlatButton buildFlatButtonRight(BuildContext context) { - return FlatButton( - padding: EdgeInsets.zero, - onPressed: () { - if (onPressed != null) { - onPressed!(); - } - }, - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text(LocaleKeys.home_game_viewAll.tr(), style: context.textTheme.subtitle2!.copyWith(color: context.colorScheme.onError)), - Icon(Icons.arrow_right, color: context.colorScheme.onError) - ], - )); + Widget buildFlatButtonRight(BuildContext context) { + return TextButton( + style: TextButton.styleFrom(padding: EdgeInsets.zero), + onPressed: () { + if (onPressed != null) { + onPressed!(); + } + }, + child: Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Text( + LocaleKeys.home_game_viewAll.tr(), + style: context.textTheme.subtitle2!.copyWith(color: context.colorScheme.onError), + ), + Icon(Icons.arrow_right, color: context.colorScheme.onError) + ], + ), + ); } } diff --git a/lib/product/widget/card/burger_card.dart b/lib/product/widget/card/burger_card.dart index 35db641..2cb94cc 100644 --- a/lib/product/widget/card/burger_card.dart +++ b/lib/product/widget/card/burger_card.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; -import '../../../view/home/burger/model/burger_model.dart'; +import 'package:fluttermvvmtemplate/view/home/burger/model/burger_model.dart'; class BurgerCard extends StatelessWidget { - final BurgerModel? model; const BurgerCard({Key? key, this.model}) : super(key: key); + final BurgerModel? model; @override Widget build(BuildContext context) { return Card( @@ -17,23 +17,18 @@ class BurgerCard extends StatelessWidget { buildRatingBar(), Text('${model?.price} \$'), ], - )); + ),); } RatingBar buildRatingBar() { return RatingBar.builder( initialRating: (model?.rates ?? 0).toDouble(), minRating: 1, - direction: Axis.horizontal, allowHalfRating: true, - itemCount: 5, ignoreGestures: true, itemSize: 10, - itemPadding: EdgeInsets.zero, - itemBuilder: (context, _) => Icon(Icons.star, color: Colors.amber), - onRatingUpdate: (rating) { - print(rating); - }, + itemBuilder: (context, _) => const Icon(Icons.star, color: Colors.amber), + onRatingUpdate: print, ); } } diff --git a/lib/product/widget/card/game_card.dart b/lib/product/widget/card/game_card.dart index d2f8443..3700be9 100644 --- a/lib/product/widget/card/game_card.dart +++ b/lib/product/widget/card/game_card.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; -import '../../../core/extension/context_extension.dart'; -import '../../../view/home/game/model/game_model.dart'; +import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; class GameCard extends StatelessWidget { - final GameModel? model; - final VoidCallback? onPressed; const GameCard({Key? key, this.model, this.onPressed}) : super(key: key); + final GameModel? model; + final VoidCallback? onPressed; @override Widget build(BuildContext context) { return Card( diff --git a/lib/product/widget/grid/game_grid_view.dart b/lib/product/widget/grid/game_grid_view.dart index db979f1..878c511 100644 --- a/lib/product/widget/grid/game_grid_view.dart +++ b/lib/product/widget/grid/game_grid_view.dart @@ -1,23 +1,22 @@ import 'package:flutter/material.dart'; - -import '../../../view/home/game/model/game_model.dart'; -import '../card/game_card.dart'; +import 'package:fluttermvvmtemplate/product/widget/card/game_card.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; class GameGrid extends StatelessWidget { - final List? models; - final void Function(GameModel item, int indx)? onPressed; const GameGrid({Key? key, this.models, this.onPressed}) : super(key: key); + final List? models; + final void Function(GameModel item, int indx)? onPressed; @override Widget build(BuildContext context) { return GridView.builder( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, childAspectRatio: 0.8, ), itemCount: 3, shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) => GameCard( model: models![index], onPressed: () { diff --git a/lib/product/widget/pageview/game_slider.dart b/lib/product/widget/pageview/game_slider.dart index 00c6385..3857e7a 100644 --- a/lib/product/widget/pageview/game_slider.dart +++ b/lib/product/widget/pageview/game_slider.dart @@ -1,13 +1,12 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../view/home/game/model/slider_model.dart'; - class GameSlider extends StatefulWidget { - final List? sliderModel; const GameSlider({Key? key, this.sliderModel}) : super(key: key); + final List? sliderModel; @override _GameSliderState createState() => _GameSliderState(); diff --git a/lib/view/_product/_constants/image_path_svg.dart b/lib/view/_product/_constants/image_path_svg.dart index b85ea3e..7395528 100644 --- a/lib/view/_product/_constants/image_path_svg.dart +++ b/lib/view/_product/_constants/image_path_svg.dart @@ -1,13 +1,13 @@ -import '../../../core/extension/string_extension.dart'; +import 'package:fluttermvvmtemplate/core/extension/string_extension.dart'; class SVGImagePaths { + + SVGImagePaths._init(); static SVGImagePaths? _instace; static SVGImagePaths get instance { return _instace ??= SVGImagePaths._init(); } - SVGImagePaths._init(); - final relaxSVG = 'relax'.toSVG; final astronautSVG = 'astronaut'.toSVG; final chattingSVG = 'chat'.toSVG; diff --git a/lib/view/_product/_model/query/friend_query.dart b/lib/view/_product/_model/query/friend_query.dart index f3d926d..7f7f037 100644 --- a/lib/view/_product/_model/query/friend_query.dart +++ b/lib/view/_product/_model/query/friend_query.dart @@ -1,6 +1,6 @@ class FriendQuery { - final int? limit; - final String? q; FriendQuery({this.limit, this.q}); + final int? limit; + final String? q; } diff --git a/lib/view/_product/_utilty/decoration_helper.dart b/lib/view/_product/_utilty/decoration_helper.dart index cdf2375..b4d26e9 100644 --- a/lib/view/_product/_utilty/decoration_helper.dart +++ b/lib/view/_product/_utilty/decoration_helper.dart @@ -1,13 +1,12 @@ -import 'package:flutter/material.dart'; - import 'package:architecture_widgets/src/decoration/circle_decoration.dart'; -import '../../../core/extension/context_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; class DecorationHelper { - BuildContext? context; DecorationHelper({ this.context, }); + BuildContext? context; Decoration get circleDecoriaton => CircleDecoration(color: context!.colors.surface, radius: 3); diff --git a/lib/view/_product/_utilty/service_helper.dart b/lib/view/_product/_utilty/service_helper.dart index 11843d4..17660ec 100644 --- a/lib/view/_product/_utilty/service_helper.dart +++ b/lib/view/_product/_utilty/service_helper.dart @@ -1,10 +1,19 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:vexana/vexana.dart'; abstract class ServiceHelper { - void showMessage(GlobalKey? scaffoldKey, IErrorModel? errorModel) { + void showMessage( + GlobalKey? scaffoldKey, + IErrorModel? errorModel, + ) { if (scaffoldKey == null || errorModel == null) return; - scaffoldKey.currentState!.showSnackBar(SnackBar(content: Text(errorModel.description ?? errorModel.statusCode.toString()))); + + if (scaffoldKey.currentContext == null) return; + ScaffoldMessenger.of(scaffoldKey.currentContext!).showSnackBar( + SnackBar( + content: Text( + errorModel.description ?? errorModel.statusCode.toString(), + )), + ); } } diff --git a/lib/view/_product/_utilty/thorottle_helper.dart b/lib/view/_product/_utilty/thorottle_helper.dart index ef6899e..c95abf2 100644 --- a/lib/view/_product/_utilty/thorottle_helper.dart +++ b/lib/view/_product/_utilty/thorottle_helper.dart @@ -1,17 +1,17 @@ import 'dart:async'; class ThrottleStringHelper { + ThrottleStringHelper() { + _onSetMaxValue(); + } String? _pastText; final int _maxTimerValue = 5; int _timerValue = 0; - ThrottleStringHelper() { - _onSetMaxValue(); - } void onDelayTouch(String text, Function(String? text) onComplete) { _pastText = text; if (_timerValue == _maxTimerValue) { - Timer.periodic(Duration(milliseconds: 100), (timer) { + Timer.periodic(const Duration(milliseconds: 100), (timer) { _timerValue--; if (_timerValue == 0) { diff --git a/lib/view/_product/_widgets/animation/social_card_animation.dart b/lib/view/_product/_widgets/animation/social_card_animation.dart index ee3e217..9a15a2f 100644 --- a/lib/view/_product/_widgets/animation/social_card_animation.dart +++ b/lib/view/_product/_widgets/animation/social_card_animation.dart @@ -1,16 +1,16 @@ import 'package:animations/animations.dart'; import 'package:flutter/material.dart'; -import '../../../home/social/model/social_user_model.dart'; -import '../../../home/social/view/social_view_detial.dart'; +import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dart'; +import 'package:fluttermvvmtemplate/view/home/social/view/social_view_detial.dart'; class OpenContainerSocailWrapper extends StatelessWidget { - final ContainerTransitionType _transitionType = ContainerTransitionType.fade; const OpenContainerSocailWrapper({ this.closedBuilder, this.onClosed, this.socialUser, }); + final ContainerTransitionType _transitionType = ContainerTransitionType.fade; final OpenContainerBuilder? closedBuilder; final ClosedCallback? onClosed; diff --git a/lib/view/_product/_widgets/avatar/on_board_circle.dart b/lib/view/_product/_widgets/avatar/on_board_circle.dart index 602afd2..7591dce 100644 --- a/lib/view/_product/_widgets/avatar/on_board_circle.dart +++ b/lib/view/_product/_widgets/avatar/on_board_circle.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; -import '../../../../core/extension/context_extension.dart'; +import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; class OnBoardCircle extends StatelessWidget { - final bool isSelected; const OnBoardCircle({Key? key, required this.isSelected}) : super(key: key); + final bool isSelected; @override Widget build(BuildContext context) { return Padding( diff --git a/lib/view/_product/_widgets/button/face_book_button.dart b/lib/view/_product/_widgets/button/face_book_button.dart index 474988c..39e909b 100644 --- a/lib/view/_product/_widgets/button/face_book_button.dart +++ b/lib/view/_product/_widgets/button/face_book_button.dart @@ -1,18 +1,17 @@ -import 'package:flutter/material.dart'; - import 'package:architecture_widgets/src/button/title_text_button.dart'; +import 'package:flutter/material.dart'; class FaceBookButton extends StatelessWidget { - final Function(FaceBookModel? data, {String? errorMessage})? onComplete; const FaceBookButton({Key? key, this.onComplete}) : super(key: key); + final Function(FaceBookModel? data, {String? errorMessage})? onComplete; @override Widget build(BuildContext context) { return TitleTextButton( text: 'Facebbok login', onPressed: () { - final isLengthSixCharacter = 'asdasdasd'.length == 6; + const isLengthSixCharacter = 'asdasdasd'.length == 6; if (isLengthSixCharacter) { onComplete!(FaceBookModel('asdasd', 'ASdasd')); @@ -25,8 +24,8 @@ class FaceBookButton extends StatelessWidget { } class FaceBookModel { - final String token; - final String mail; FaceBookModel(this.token, this.mail); + final String token; + final String mail; } diff --git a/lib/view/_product/_widgets/button/login_button.dart b/lib/view/_product/_widgets/button/login_button.dart index 6a5ff94..2954dd4 100644 --- a/lib/view/_product/_widgets/button/login_button.dart +++ b/lib/view/_product/_widgets/button/login_button.dart @@ -1,17 +1,16 @@ -import 'package:flutter/material.dart'; - import 'package:architecture_widgets/src/button/icon_button.dart'; +import 'package:flutter/material.dart'; class MVVMLoginButton extends StatelessWidget { - final Function(String data)? onComplete; const MVVMLoginButton({Key? key, this.onComplete}) : super(key: key); + final Function(String data)? onComplete; @override Widget build(BuildContext context) { return IconNormalButton( icon: Icons.access_alarm, onPressed: () { - onComplete!("OKEY"); + onComplete!('OKEY'); // BUSINESS CALL }, ); diff --git a/lib/view/_product/_widgets/card/build_user_card.dart b/lib/view/_product/_widgets/card/build_user_card.dart index 1a7ac69..f58ab86 100644 --- a/lib/view/_product/_widgets/card/build_user_card.dart +++ b/lib/view/_product/_widgets/card/build_user_card.dart @@ -1,15 +1,14 @@ import 'package:auto_size_text/auto_size_text.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../home/build/feed/model/house_model.dart'; - class BuildUserCard extends StatelessWidget { + + const BuildUserCard({Key? key, required this.model, this.onPressedLikeId, this.isLiked = false}) : super(key: key); final HouseModel model; final bool isLiked; final Function(String? id)? onPressedLikeId; - - const BuildUserCard({Key? key, required this.model, this.onPressedLikeId, this.isLiked = false}) : super(key: key); @override Widget build(BuildContext context) { return Column( @@ -45,6 +44,6 @@ class BuildUserCard extends StatelessWidget { ), onPressed: () { onPressedLikeId!(model.id); - }); + },); } } diff --git a/lib/view/_product/_widgets/list-tile/friend_card.dart b/lib/view/_product/_widgets/list-tile/friend_card.dart index 36f181c..821445e 100644 --- a/lib/view/_product/_widgets/list-tile/friend_card.dart +++ b/lib/view/_product/_widgets/list-tile/friend_card.dart @@ -1,28 +1,32 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../../../home/social/model/social_user_model.dart'; - class FriendCard extends StatelessWidget { + const FriendCard({Key? key, this.user, this.onPressed}) : super(key: key); final SocialUser? user; final VoidCallback? onPressed; - - const FriendCard({Key? key, this.user, this.onPressed}) : super(key: key); @override Widget build(BuildContext context) { + if (user == null) { + // throw Exception('User object is null $this'); + return const SizedBox(); + } return ListTile( leading: CircleAvatar(backgroundImage: NetworkImage(user!.image!)), title: Text(user!.name!), onTap: onPressed, subtitle: Text(user!.company!), - trailing: RaisedButton( - child: Text(LocaleKeys.home_social_follow).tr(), + trailing: ElevatedButton( onPressed: () {}, - padding: EdgeInsets.zero, - textColor: context.colorScheme.background, - color: context.appTheme.buttonTheme.colorScheme!.onError, + style: ElevatedButton.styleFrom( + padding: EdgeInsets.zero, + backgroundColor: context.colorScheme.background, + foregroundColor: context.appTheme.buttonTheme.colorScheme?.onError, + ), + child: const Text(LocaleKeys.home_social_follow).tr(), ), ); } diff --git a/lib/view/_product/_widgets/listview/on_board_indicator.dart b/lib/view/_product/_widgets/listview/on_board_indicator.dart index c28963a..0dd5f74 100644 --- a/lib/view/_product/_widgets/listview/on_board_indicator.dart +++ b/lib/view/_product/_widgets/listview/on_board_indicator.dart @@ -1,19 +1,19 @@ -import 'package:flutter/material.dart'; import 'package:architecture_widgets/src/list-view/indicator_list_view.dart'; +import 'package:flutter/material.dart'; class OnBoardIndcator extends StatelessWidget { - final int? itemCount; - final int? currentIndex; const OnBoardIndcator({Key? key, this.itemCount, this.currentIndex}) : super(key: key); + final int? itemCount; + final int? currentIndex; @override Widget build(BuildContext context) { return IndactorListView( currentIndex: currentIndex, itemCount: itemCount, onListItem: (index) { - return FlutterLogo(); + return const FlutterLogo(); }, ); } diff --git a/lib/view/authenticate/login/model/login_model.dart b/lib/view/authenticate/login/model/login_model.dart index 4bd17c9..c7fe784 100644 --- a/lib/view/authenticate/login/model/login_model.dart +++ b/lib/view/authenticate/login/model/login_model.dart @@ -5,10 +5,10 @@ part 'login_model.g.dart'; @JsonSerializable() class LoginModel extends INetworkModel { - final String? email; - final String? password; LoginModel({this.email, this.password}); + final String? email; + final String? password; @override LoginModel fromJson(Map json) { diff --git a/lib/view/authenticate/login/model/login_model.g.dart b/lib/view/authenticate/login/model/login_model.g.dart index e936868..33a185d 100644 --- a/lib/view/authenticate/login/model/login_model.g.dart +++ b/lib/view/authenticate/login/model/login_model.g.dart @@ -6,12 +6,10 @@ part of 'login_model.dart'; // JsonSerializableGenerator // ************************************************************************** -LoginModel _$LoginModelFromJson(Map json) { - return LoginModel( - email: json['email'] as String?, - password: json['password'] as String?, - ); -} +LoginModel _$LoginModelFromJson(Map json) => LoginModel( + email: json['email'] as String?, + password: json['password'] as String?, + ); Map _$LoginModelToJson(LoginModel instance) => { diff --git a/lib/view/authenticate/login/model/login_response_model.dart b/lib/view/authenticate/login/model/login_response_model.dart index dd85c96..f585406 100644 --- a/lib/view/authenticate/login/model/login_response_model.dart +++ b/lib/view/authenticate/login/model/login_response_model.dart @@ -5,9 +5,9 @@ part 'login_response_model.g.dart'; @JsonSerializable() class LoginResponseModel extends INetworkModel { - final String? token; LoginResponseModel({this.token}); + final String? token; @override LoginResponseModel fromJson(Map json) { diff --git a/lib/view/authenticate/login/model/login_response_model.g.dart b/lib/view/authenticate/login/model/login_response_model.g.dart index b1cc7ac..35898bd 100644 --- a/lib/view/authenticate/login/model/login_response_model.g.dart +++ b/lib/view/authenticate/login/model/login_response_model.g.dart @@ -6,11 +6,10 @@ part of 'login_response_model.dart'; // JsonSerializableGenerator // ************************************************************************** -LoginResponseModel _$LoginResponseModelFromJson(Map json) { - return LoginResponseModel( - token: json['token'] as String?, - ); -} +LoginResponseModel _$LoginResponseModelFromJson(Map json) => + LoginResponseModel( + token: json['token'] as String?, + ); Map _$LoginResponseModelToJson(LoginResponseModel instance) => { diff --git a/lib/view/authenticate/login/service/ILoginService.dart b/lib/view/authenticate/login/service/ILoginService.dart index f553d9d..10b7db5 100644 --- a/lib/view/authenticate/login/service/ILoginService.dart +++ b/lib/view/authenticate/login/service/ILoginService.dart @@ -1,12 +1,11 @@ +import 'package:fluttermvvmtemplate/view/authenticate/login/model/login_model.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/model/login_response_model.dart'; import 'package:vexana/vexana.dart'; -import '../model/login_model.dart'; -import '../model/login_response_model.dart'; - abstract class ILoginService { - final INetworkManager manager; ILoginService(this.manager); + final INetworkManager manager; Future fetchUserControl(LoginModel model); } diff --git a/lib/view/authenticate/login/service/login_service.dart b/lib/view/authenticate/login/service/login_service.dart index 924728c..df87af7 100644 --- a/lib/view/authenticate/login/service/login_service.dart +++ b/lib/view/authenticate/login/service/login_service.dart @@ -1,17 +1,16 @@ +import 'package:fluttermvvmtemplate/view/_product/enum/network_route_enum.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/model/login_model.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/model/login_response_model.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/service/ILoginService.dart'; import 'package:vexana/vexana.dart'; -import '../../../_product/enum/network_route_enum.dart'; -import '../model/login_model.dart'; -import '../model/login_response_model.dart'; -import 'ILoginService.dart'; - class LoginService extends ILoginService { LoginService(INetworkManager manager) : super(manager); @override Future fetchUserControl(LoginModel model) async { final response = await manager.send(NetworkRoutes.LOGIN.rawValue, - parseModel: LoginResponseModel(), method: RequestType.POST, data: model); + parseModel: LoginResponseModel(), method: RequestType.POST, data: model,); if (response.data is LoginResponseModel) { return response.data; diff --git a/lib/view/authenticate/login/view/login_view.dart b/lib/view/authenticate/login/view/login_view.dart index 68c06bc..8696846 100644 --- a/lib/view/authenticate/login/view/login_view.dart +++ b/lib/view/authenticate/login/view/login_view.dart @@ -2,12 +2,12 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import '../../../../core/base/view/base_widget.dart'; -import '../../../../core/constants/image/image_constatns.dart'; -import '../../../../core/extension/context_extension.dart'; -import '../../../../core/extension/string_extension.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../viewmodel/login_view_model.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/constants/image/image_constatns.dart'; +import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; +import 'package:fluttermvvmtemplate/core/extension/string_extension.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/viewmodel/login_view_model.dart'; class LoginView extends StatelessWidget { @override @@ -38,15 +38,17 @@ class LoginView extends StatelessWidget { AnimatedContainer buildAnimatedContainer(BuildContext context) { return AnimatedContainer( - duration: context.lowDuration, - height: context.mediaQuery.viewInsets.bottom > 0 ? 0 : context.height * 0.3, - color: Colors.white, - child: Center(child: Image.asset(ImageConstants.instance.hotDog))); + duration: context.lowDuration, + height: context.mediaQuery.viewInsets.bottom > 0 ? 0 : context.height * 0.3, + color: Colors.white, + child: Center(child: Image.asset(ImageConstants.instance.hotDog)), + ); } Container buildContainerTabBar(BuildContext context) { return Container( - decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.vertical(bottom: Radius.circular(50))), + decoration: + const BoxDecoration(color: Colors.white, borderRadius: BorderRadius.vertical(bottom: Radius.circular(50))), child: Padding( padding: EdgeInsets.only(left: context.width * 0.1, right: context.width * 0.1, bottom: context.width * 0.01), child: buildTabBar(context), @@ -56,16 +58,17 @@ class LoginView extends StatelessWidget { TabBar buildTabBar(BuildContext context) { return TabBar( - labelStyle: context.textTheme.headline5, - unselectedLabelStyle: context.textTheme.headline5, - labelColor: Colors.black, - indicatorColor: Colors.yellow, - indicatorWeight: 5, - indicatorSize: TabBarIndicatorSize.label, - tabs: [ - Tab(text: ' ${LocaleKeys.login_tab1.tr()} '), - Tab(text: LocaleKeys.login_tab2.tr()), - ]); + labelStyle: context.textTheme.headline5, + unselectedLabelStyle: context.textTheme.headline5, + labelColor: Colors.black, + indicatorColor: Colors.yellow, + indicatorWeight: 5, + indicatorSize: TabBarIndicatorSize.label, + tabs: [ + Tab(text: ' ${LocaleKeys.login_tab1.tr()} '), + Tab(text: LocaleKeys.login_tab2.tr()), + ], + ); } Form buildForm(LoginViewModel value, BuildContext context) { @@ -74,40 +77,46 @@ class LoginView extends StatelessWidget { autovalidateMode: AutovalidateMode.always, child: Column( children: [ - Spacer(flex: 6), + const Spacer(flex: 6), buildTextFormFieldEmail(context, value), buildTextFormFieldPassword(context, value), - Spacer(), + const Spacer(), buildTextForgot(), - Spacer(flex: 6), + const Spacer(flex: 6), buildRaisedButtonLogin(context, value), buildWrapForgot(), - Spacer(), + const Spacer(), ], ), ); } Widget buildTextFormFieldPassword(BuildContext context, LoginViewModel viewModel) { - return Observer(builder: (_) { - return TextFormField( - controller: viewModel.passwordController, - validator: (value) => value!.isNotEmpty ? null : 'This field required', - obscureText: viewModel.isLockOpen, - decoration: InputDecoration( + return Observer( + builder: (_) { + return TextFormField( + controller: viewModel.passwordController, + validator: (value) => value!.isNotEmpty ? null : 'This field required', + obscureText: viewModel.isLockOpen, + decoration: InputDecoration( labelStyle: context.textTheme.subtitle1, labelText: LocaleKeys.login_password.tr(), icon: buildContainerIconField(context, Icons.vpn_key), - suffixIcon: FlatButton( - onPressed: () { - viewModel.isLockStateChange(); - }, - padding: EdgeInsets.zero, - child: Observer(builder: (_) { + suffixIcon: IconButton( + onPressed: () { + viewModel.isLockStateChange(); + }, + padding: EdgeInsets.zero, + icon: Observer( + builder: (_) { return Icon(viewModel.isLockOpen ? Icons.lock : Icons.lock_open); - }))), - ); - }); + }, + ), + ), + ), + ); + }, + ); } TextFormField buildTextFormFieldEmail(BuildContext context, LoginViewModel viewModel) { @@ -126,32 +135,47 @@ class LoginView extends StatelessWidget { return Container( color: context.colors.onError, padding: context.paddingLow, - child: Icon(icon, color: context.colors.primaryVariant), + child: Icon(icon, color: context.colors.primaryContainer), ); } - Widget buildTextForgot() => Align(alignment: Alignment.centerRight, child: Text(LocaleKeys.login_forgotText, textAlign: TextAlign.end).tr()); + Widget buildTextForgot() => Align( + alignment: Alignment.centerRight, + child: const Text(LocaleKeys.login_forgotText, textAlign: TextAlign.end).tr(), + ); Widget buildRaisedButtonLogin(BuildContext context, LoginViewModel viewModel) { - return Observer(builder: (_) { - return RaisedButton( - padding: context.paddingNormal, - onPressed: viewModel.isLoading - ? null - : () { - viewModel.fetchLoginSevice(); - }, - shape: StadiumBorder(), - child: Center(child: Text(LocaleKeys.login_login.tr(), style: context.textTheme.headline5)), - color: context.colors.onError, - ); - }); + return Observer( + builder: (_) { + return ElevatedButton( + style: ElevatedButton.styleFrom( + padding: context.paddingNormal, + shape: const StadiumBorder(), + backgroundColor: context.colors.onError, + ), + onPressed: viewModel.isLoading + ? null + : () { + viewModel.fetchLoginService(); + }, + child: Center( + child: Text( + LocaleKeys.login_login.tr(), + style: context.textTheme.headline5, + ), + ), + ); + }, + ); } Wrap buildWrapForgot() { return Wrap( crossAxisAlignment: WrapCrossAlignment.center, - children: [Text(LocaleKeys.login_dontAccount.tr()), FlatButton(onPressed: () {}, child: Text(LocaleKeys.login_tab2.tr()))], + children: [ + Text(LocaleKeys.login_dontAccount.tr()), + TextButton(onPressed: () {}, child: Text(LocaleKeys.login_tab2.tr())) + ], ); } } diff --git a/lib/view/authenticate/login/view/login_view_two.dart b/lib/view/authenticate/login/view/login_view_two.dart index 5d061be..0ef54fb 100644 --- a/lib/view/authenticate/login/view/login_view_two.dart +++ b/lib/view/authenticate/login/view/login_view_two.dart @@ -9,42 +9,59 @@ class UserView extends StatelessWidget { body: Stack( children: [ Positioned( - right: 0, - left: 0, - height: MediaQuery.of(context).size.height * 0.4, - child: Column( - children: [ - Expanded(flex: 9, child: Container(color: Colors.red, child: FlutterLogo(size: 200))), - Container( - child: Padding( - padding: EdgeInsets.only(left: 30, right: 30, bottom: 5), - child: TabBar(indicatorSize: TabBarIndicatorSize.label, tabs: [ + right: 0, + left: 0, + height: MediaQuery.of(context).size.height * 0.4, + child: Column( + children: [ + Expanded(flex: 9, child: Container(color: Colors.red, child: const FlutterLogo(size: 200))), + Container( + decoration: const BoxDecoration( + color: Colors.yellow, + borderRadius: BorderRadius.vertical(bottom: Radius.circular(30)), + ), + child: const Padding( + padding: EdgeInsets.only(left: 30, right: 30, bottom: 5), + child: TabBar( + indicatorSize: TabBarIndicatorSize.label, + tabs: [ Tab( - text: " Login ", + text: ' Login ', ), Tab(icon: Icon(Icons.radio)), - ]), + ], ), - decoration: BoxDecoration(color: Colors.yellow, borderRadius: BorderRadius.vertical(bottom: Radius.circular(30))), ), - // Spacer(flex: 12) - ], - )), + ), + // Spacer(flex: 12) + ], + ), + ), Positioned.fill( - left: 0, - right: 0, - top: MediaQuery.of(context).size.height * 0.4, - child: Center( - child: SingleChildScrollView( - child: SizedBox( - height: MediaQuery.of(context).size.height * 0.25, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [TextField(), TextField(), RaisedButton(onPressed: null), RaisedButton(onPressed: null)], - ), + top: MediaQuery.of(context).size.height * 0.4, + child: Center( + child: SingleChildScrollView( + child: SizedBox( + height: MediaQuery.of(context).size.height * 0.25, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: const [ + TextField(), + TextField(), + ElevatedButton( + onPressed: null, + child: Text(''), + ), + ElevatedButton( + onPressed: null, + child: Text(''), + ) + ], ), ), - )) + ), + ), + ) ], ), ), diff --git a/lib/view/authenticate/login/viewmodel/login_view_model.dart b/lib/view/authenticate/login/viewmodel/login_view_model.dart index e33fafa..a201468 100644 --- a/lib/view/authenticate/login/viewmodel/login_view_model.dart +++ b/lib/view/authenticate/login/viewmodel/login_view_model.dart @@ -1,13 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/locale_keys_enum.dart'; +import 'package:fluttermvvmtemplate/core/init/network/vexana_manager.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/model/login_model.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/service/ILoginService.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/login/service/login_service.dart'; import 'package:mobx/mobx.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../../core/constants/enums/locale_keys_enum.dart'; -import '../../../../core/init/network/vexana_manager.dart'; -import '../model/login_model.dart'; -import '../service/ILoginService.dart'; -import '../service/login_service.dart'; - part 'login_view_model.g.dart'; class LoginViewModel = _LoginViewModelBase with _$LoginViewModel; @@ -17,16 +16,15 @@ abstract class _LoginViewModelBase with Store, BaseViewModel { GlobalKey scaffoldState = GlobalKey(); late ILoginService loginService; - TextEditingController? emailController; - TextEditingController? passwordController; + TextEditingController emailController = TextEditingController(); + TextEditingController passwordController = TextEditingController(); @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; + @override void init() { loginService = LoginService(VexanaManager.instance.networkManager); - emailController = TextEditingController(); - passwordController = TextEditingController(); } @observable @@ -36,21 +34,39 @@ abstract class _LoginViewModelBase with Store, BaseViewModel { bool isLockOpen = false; @action - Future fetchLoginSevice() async { + Future fetchLoginService() async { isLoadingChange(); if (formState.currentState!.validate()) { - final response = await loginService.fetchUserControl(LoginModel(email: emailController!.text, password: passwordController!.text)); + final response = await loginService.fetchUserControl( + LoginModel( + email: emailController.text, + password: passwordController.text, + ), + ); if (response != null) { - if (scaffoldState.currentState != null) { - scaffoldState.currentState!.showSnackBar(SnackBar(content: Text(response.token!))); + if (response.token?.isEmpty ?? true) return; + if (scaffoldState.currentContext != null) { + ScaffoldMessenger.of(scaffoldState.currentContext!).showSnackBar( + SnackBar( + content: Text(response.token!), + ), + ); } - await localeManager.setStringValue(PreferencesKeys.TOKEN, response.token!); + await localeManager.setStringValue( + PreferencesKeys.TOKEN, + response.token!, + ); } } isLoadingChange(); } + void dispose() { + emailController.dispose(); + passwordController.dispose(); + } + @action void isLoadingChange() { isLoading = !isLoading; diff --git a/lib/view/authenticate/login/viewmodel/login_view_model.g.dart b/lib/view/authenticate/login/viewmodel/login_view_model.g.dart index 860887e..19b35e0 100644 --- a/lib/view/authenticate/login/viewmodel/login_view_model.g.dart +++ b/lib/view/authenticate/login/viewmodel/login_view_model.g.dart @@ -6,10 +6,11 @@ part of 'login_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$LoginViewModel on _LoginViewModelBase, Store { - final _$isLoadingAtom = Atom(name: '_LoginViewModelBase.isLoading'); + late final _$isLoadingAtom = + Atom(name: '_LoginViewModelBase.isLoading', context: context); @override bool get isLoading { @@ -24,7 +25,8 @@ mixin _$LoginViewModel on _LoginViewModelBase, Store { }); } - final _$isLockOpenAtom = Atom(name: '_LoginViewModelBase.isLockOpen'); + late final _$isLockOpenAtom = + Atom(name: '_LoginViewModelBase.isLockOpen', context: context); @override bool get isLockOpen { @@ -39,16 +41,16 @@ mixin _$LoginViewModel on _LoginViewModelBase, Store { }); } - final _$fetchLoginSeviceAsyncAction = - AsyncAction('_LoginViewModelBase.fetchLoginSevice'); + late final _$fetchLoginServiceAsyncAction = + AsyncAction('_LoginViewModelBase.fetchLoginService', context: context); @override - Future fetchLoginSevice() { - return _$fetchLoginSeviceAsyncAction.run(() => super.fetchLoginSevice()); + Future fetchLoginService() { + return _$fetchLoginServiceAsyncAction.run(() => super.fetchLoginService()); } - final _$_LoginViewModelBaseActionController = - ActionController(name: '_LoginViewModelBase'); + late final _$_LoginViewModelBaseActionController = + ActionController(name: '_LoginViewModelBase', context: context); @override void isLoadingChange() { diff --git a/lib/view/authenticate/onboard/model/on_board_model.dart b/lib/view/authenticate/onboard/model/on_board_model.dart index e33fe3f..0ac9681 100644 --- a/lib/view/authenticate/onboard/model/on_board_model.dart +++ b/lib/view/authenticate/onboard/model/on_board_model.dart @@ -1,7 +1,7 @@ class OnBoardModel { + + OnBoardModel(this.title, this.description, this.imagePath); final String title; final String description; final String imagePath; - - OnBoardModel(this.title, this.description, this.imagePath); } diff --git a/lib/view/authenticate/onboard/view/on_board_view.dart b/lib/view/authenticate/onboard/view/on_board_view.dart index 41041fd..a376d98 100644 --- a/lib/view/authenticate/onboard/view/on_board_view.dart +++ b/lib/view/authenticate/onboard/view/on_board_view.dart @@ -1,13 +1,12 @@ +import 'package:architecture_widgets/src/text/auto_locale_text.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_svg/svg.dart'; - -import '../../../../core/base/view/base_widget.dart'; -import 'package:architecture_widgets/src/text/auto_locale_text.dart'; -import '../../../../core/extension/context_extension.dart'; -import '../../../_product/_widgets/avatar/on_board_circle.dart'; -import '../model/on_board_model.dart'; -import '../viewModel/on_board_view_model.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; +import 'package:fluttermvvmtemplate/view/_product/_widgets/avatar/on_board_circle.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/onboard/model/on_board_model.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/onboard/viewModel/on_board_view_model.dart'; class OnBoardView extends StatelessWidget { @override @@ -24,7 +23,7 @@ class OnBoardView extends StatelessWidget { padding: context.paddingNormalHorizontal, child: Column( children: [ - Spacer(flex: 1), + const Spacer(), Expanded(flex: 5, child: buildPageView(viewModel)), Expanded(flex: 2, child: buildRowFooter(viewModel, context)), ], @@ -41,7 +40,7 @@ class OnBoardView extends StatelessWidget { viewModel.changeCurrentIndex(value); }, itemBuilder: (context, index) => - buildColumnBody(context, viewModel.onBoardItems[index])); + buildColumnBody(context, viewModel.onBoardItems[index]),); } Row buildRowFooter(OnBoardViewModel viewModel, BuildContext context) { @@ -51,8 +50,8 @@ class OnBoardView extends StatelessWidget { buildListViewCircles(viewModel), Expanded(child: Center(child: Observer(builder: (_) { return Visibility( - visible: viewModel.isLoading, child: CircularProgressIndicator()); - }))), + visible: viewModel.isLoading, child: const CircularProgressIndicator(),); + },),),), buildFloatingActionButtonSkip(context, viewModel) ], ); @@ -68,18 +67,18 @@ class OnBoardView extends StatelessWidget { return OnBoardCircle( isSelected: viewModel.currentIndex == index, ); - }); + },); }, ); } FloatingActionButton buildFloatingActionButtonSkip( - BuildContext context, OnBoardViewModel viewModel) { + BuildContext context, OnBoardViewModel viewModel,) { return FloatingActionButton( - backgroundColor: context.colors.secondaryVariant, + backgroundColor: context.colors.secondaryContainer, child: Icon( Icons.keyboard_arrow_right, - color: context.colors.primaryVariant, + color: context.colors.primaryContainer, ), onPressed: () => viewModel.completeToOnBoard(), ); @@ -100,22 +99,22 @@ class OnBoardView extends StatelessWidget { buildAutoLocaleTextTitle(model, context), Padding( padding: context.paddingMediumHorizontal, - child: buildAutoLocaleTextDescription(model, context)) + child: buildAutoLocaleTextDescription(model, context),) ], ); } AutoLocaleText buildAutoLocaleTextTitle( - OnBoardModel model, BuildContext context) { + OnBoardModel model, BuildContext context,) { return AutoLocaleText( value: model.title, style: Theme.of(context).textTheme.headline3!.copyWith( - fontWeight: FontWeight.bold, color: context.colors.onSecondary), + fontWeight: FontWeight.bold, color: context.colors.onSecondary,), ); } AutoLocaleText buildAutoLocaleTextDescription( - OnBoardModel model, BuildContext context) { + OnBoardModel model, BuildContext context,) { return AutoLocaleText( value: model.description, textAlign: TextAlign.center, diff --git a/lib/view/authenticate/onboard/viewModel/on_board_view_model.dart b/lib/view/authenticate/onboard/viewModel/on_board_view_model.dart index a68f6be..d1c3297 100644 --- a/lib/view/authenticate/onboard/viewModel/on_board_view_model.dart +++ b/lib/view/authenticate/onboard/viewModel/on_board_view_model.dart @@ -1,20 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/locale_keys_enum.dart'; +import 'package:fluttermvvmtemplate/core/constants/navigation/navigation_constants.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/_product/_constants/image_path_svg.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/onboard/model/on_board_model.dart'; import 'package:mobx/mobx.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../../core/constants/enums/locale_keys_enum.dart'; -import '../../../../core/constants/navigation/navigation_constants.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../../../_product/_constants/image_path_svg.dart'; -import '../model/on_board_model.dart'; - part 'on_board_view_model.g.dart'; class OnBoardViewModel = _OnBoardViewModelBase with _$OnBoardViewModel; abstract class _OnBoardViewModelBase with Store, BaseViewModel { @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) { + viewModelContext = context; + } + List onBoardItems = []; @observable @@ -30,9 +32,24 @@ abstract class _OnBoardViewModelBase with Store, BaseViewModel { @override void init() { - onBoardItems.add(OnBoardModel(LocaleKeys.onBoard_page1_title, LocaleKeys.onBoard_page1_desc, SVGImagePaths.instance.astronautSVG)); - onBoardItems.add(OnBoardModel(LocaleKeys.onBoard_page1_title, LocaleKeys.onBoard_page2_desc, SVGImagePaths.instance.chattingSVG)); - onBoardItems.add(OnBoardModel(LocaleKeys.onBoard_page3_title, LocaleKeys.onBoard_page3_desc, SVGImagePaths.instance.relaxSVG)); + onBoardItems.addAll([ + OnBoardModel( + LocaleKeys.onBoard_page1_title, + LocaleKeys.onBoard_page1_desc, + SVGImagePaths.instance.astronautSVG, + ), + OnBoardModel( + LocaleKeys.onBoard_page1_title, + LocaleKeys.onBoard_page2_desc, + SVGImagePaths.instance.chattingSVG, + ), + OnBoardModel( + LocaleKeys.onBoard_page1_title, + LocaleKeys.onBoard_page2_desc, + SVGImagePaths.instance.chattingSVG, + ), + OnBoardModel(LocaleKeys.onBoard_page3_title, LocaleKeys.onBoard_page3_desc, SVGImagePaths.instance.relaxSVG), + ]); } @action diff --git a/lib/view/authenticate/onboard/viewModel/on_board_view_model.g.dart b/lib/view/authenticate/onboard/viewModel/on_board_view_model.g.dart index 0f77498..928e09e 100644 --- a/lib/view/authenticate/onboard/viewModel/on_board_view_model.g.dart +++ b/lib/view/authenticate/onboard/viewModel/on_board_view_model.g.dart @@ -6,10 +6,11 @@ part of 'on_board_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$OnBoardViewModel on _OnBoardViewModelBase, Store { - final _$isLoadingAtom = Atom(name: '_OnBoardViewModelBase.isLoading'); + late final _$isLoadingAtom = + Atom(name: '_OnBoardViewModelBase.isLoading', context: context); @override bool get isLoading { @@ -24,7 +25,8 @@ mixin _$OnBoardViewModel on _OnBoardViewModelBase, Store { }); } - final _$currentIndexAtom = Atom(name: '_OnBoardViewModelBase.currentIndex'); + late final _$currentIndexAtom = + Atom(name: '_OnBoardViewModelBase.currentIndex', context: context); @override int get currentIndex { @@ -39,8 +41,8 @@ mixin _$OnBoardViewModel on _OnBoardViewModelBase, Store { }); } - final _$_OnBoardViewModelBaseActionController = - ActionController(name: '_OnBoardViewModelBase'); + late final _$_OnBoardViewModelBaseActionController = + ActionController(name: '_OnBoardViewModelBase', context: context); @override void changeCurrentIndex(int value) { diff --git a/lib/view/authenticate/splash/model/force_update_model.dart b/lib/view/authenticate/splash/model/force_update_model.dart index df187fb..292d16c 100644 --- a/lib/view/authenticate/splash/model/force_update_model.dart +++ b/lib/view/authenticate/splash/model/force_update_model.dart @@ -5,14 +5,14 @@ part 'force_update_model.g.dart'; @JsonSerializable() class ForceUpdateModel extends INetworkModel { - bool? isForceUpdate; - String? type; - String? currentVersion; ForceUpdateModel({ this.isForceUpdate, this.type, this.currentVersion, }); + bool? isForceUpdate; + String? type; + String? currentVersion; @override ForceUpdateModel fromJson(Map json) { diff --git a/lib/view/authenticate/splash/model/force_update_model.g.dart b/lib/view/authenticate/splash/model/force_update_model.g.dart index a849013..031b903 100644 --- a/lib/view/authenticate/splash/model/force_update_model.g.dart +++ b/lib/view/authenticate/splash/model/force_update_model.g.dart @@ -6,13 +6,12 @@ part of 'force_update_model.dart'; // JsonSerializableGenerator // ************************************************************************** -ForceUpdateModel _$ForceUpdateModelFromJson(Map json) { - return ForceUpdateModel( - isForceUpdate: json['isForceUpdate'] as bool?, - type: json['type'] as String?, - currentVersion: json['currentVersion'] as String?, - ); -} +ForceUpdateModel _$ForceUpdateModelFromJson(Map json) => + ForceUpdateModel( + isForceUpdate: json['isForceUpdate'] as bool?, + type: json['type'] as String?, + currentVersion: json['currentVersion'] as String?, + ); Map _$ForceUpdateModelToJson(ForceUpdateModel instance) => { diff --git a/lib/view/authenticate/splash/service/splash_service.dart b/lib/view/authenticate/splash/service/splash_service.dart index 9255724..75ec0cd 100644 --- a/lib/view/authenticate/splash/service/splash_service.dart +++ b/lib/view/authenticate/splash/service/splash_service.dart @@ -1,14 +1,13 @@ -import 'package:flutter/cupertino.dart'; import 'package:fluttermvvmtemplate/view/authenticate/splash/model/force_update_model.dart'; import 'package:vexana/vexana.dart'; abstract class ISplashService { - final INetworkManager networkManager; ISplashService(this.networkManager); + final INetworkManager networkManager; Future checkDeviceVersion( - {required String version, required String platform}); + {required String version, required String platform,}); } enum SplashServiceQuery { VERSION, PLATFORM } @@ -25,12 +24,12 @@ extension SplashServiceQueryExtension on SplashServiceQuery { } class SplashService extends ISplashService { - final String _path = 'version'; SplashService(INetworkManager networkManager) : super(networkManager); + final String _path = 'version'; @override Future checkDeviceVersion( - {required String version, required String platform}) async { + {required String version, required String platform,}) async { final response = await networkManager.send( _path, diff --git a/lib/view/authenticate/splash/view/splash_view.dart b/lib/view/authenticate/splash/view/splash_view.dart index cd2aebd..e8ac753 100644 --- a/lib/view/authenticate/splash/view/splash_view.dart +++ b/lib/view/authenticate/splash/view/splash_view.dart @@ -1,13 +1,12 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/constants/image/image_constatns.dart'; import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/splash/viewmodel/splash_view_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../../core/base/view/base_widget.dart'; -import '../../../../core/constants/image/image_constatns.dart'; -import '../viewmodel/splash_view_model.dart'; - class SplashView extends StatelessWidget { const SplashView({Key? key}) : super(key: key); @@ -19,8 +18,7 @@ class SplashView extends StatelessWidget { model.setContext(context); model.init(); }, - onPageBuilder: (BuildContext context, SplashViewModel value) => - buildScaffoldBody(context, value), + onPageBuilder: buildScaffoldBody, ); } @@ -33,12 +31,12 @@ class SplashView extends StatelessWidget { buildCenterTextWelcome(context, viewModel), buildAnimatedAlignIcon(viewModel, context), ], - )), + ),), ); } Center buildCenterTextWelcome( - BuildContext context, SplashViewModel viewModel) { + BuildContext context, SplashViewModel viewModel,) { return Center(child: Observer(builder: (_) { return AnimatedOpacity( duration: context.durationNormal, @@ -50,24 +48,24 @@ class SplashView extends StatelessWidget { LocaleKeys.splash_welcome.tr(), style: context.textTheme.headline4?.copyWith( fontWeight: FontWeight.w700, - color: context.colorScheme.primaryVariant), + color: context.colorScheme.primaryContainer,), textAlign: TextAlign.center, ), - CircularProgressIndicator.adaptive() + const CircularProgressIndicator.adaptive() ], ), ); - })); + },),); } Widget buildAnimatedAlignIcon( - SplashViewModel viewModel, BuildContext context) { + SplashViewModel viewModel, BuildContext context,) { return Observer(builder: (_) { return AnimatedAlign( alignment: viewModel.isFirstInit ? Alignment.center : Alignment.bottomCenter, duration: context.durationLow, - child: Image.asset(ImageConstants.instance.projeIcon)); - }); + child: Image.asset(ImageConstants.instance.projeIcon),); + },); } } diff --git a/lib/view/authenticate/splash/viewmodel/device_and_cahe.dart b/lib/view/authenticate/splash/viewmodel/device_and_cahe.dart index 21df3c1..3933797 100644 --- a/lib/view/authenticate/splash/viewmodel/device_and_cahe.dart +++ b/lib/view/authenticate/splash/viewmodel/device_and_cahe.dart @@ -1,7 +1,6 @@ +import 'package:fluttermvvmtemplate/core/init/cache/locale_manager.dart'; import 'package:kartal/kartal.dart'; -import '../../../../core/init/cache/locale_manager.dart'; - mixin DeviceAndCache { Future deviceandCacheInit() async { await Future.wait([ diff --git a/lib/view/authenticate/splash/viewmodel/splash_view_model.dart b/lib/view/authenticate/splash/viewmodel/splash_view_model.dart index 6ddc025..f537de0 100644 --- a/lib/view/authenticate/splash/viewmodel/splash_view_model.dart +++ b/lib/view/authenticate/splash/viewmodel/splash_view_model.dart @@ -2,25 +2,22 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; import 'package:fluttermvvmtemplate/core/constants/navigation/navigation_constants.dart'; +import 'package:fluttermvvmtemplate/product/enum/platform_project.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/splash/model/force_update_model.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/splash/service/splash_service.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/splash/viewmodel/device_and_cahe.dart'; import 'package:kartal/kartal.dart'; -import 'package:logger/logger.dart'; import 'package:mobx/mobx.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../../core/init/cache/locale_manager.dart'; -import '../../../../product/enum/platform_project.dart'; -import '../model/force_update_model.dart'; -import '../service/splash_service.dart'; -import 'device_and_cahe.dart'; - part 'splash_view_model.g.dart'; class SplashViewModel = _SplashViewModelBase with _$SplashViewModel; abstract class _SplashViewModelBase with Store, BaseViewModel, DeviceAndCache { @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; @observable bool isFirstInit = true; @@ -30,12 +27,12 @@ abstract class _SplashViewModelBase with Store, BaseViewModel, DeviceAndCache { @override void init() { startAnimationOnView(); - WidgetsBinding.instance?.addPostFrameCallback((timeStamp) { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { controlAppState(); }); // Dummy for moduler page - Future.delayed(Duration(seconds: 1)).then((value) { + Future.delayed(const Duration(seconds: 1)).then((value) { navigation.navigateToPage(path: NavigationConstants.BUY_VIEW); }); } @@ -48,7 +45,7 @@ abstract class _SplashViewModelBase with Store, BaseViewModel, DeviceAndCache { _networkInit(); final isNeedForceUpdate = await _checkAppVersion(); if (isNeedForceUpdate) { - showAboutDialog(context: context!, children: [Text('Neeed to Update')]); + showAboutDialog(context: viewModelContext, children: [const Text('Neeed to Update')]); } else { // await navigation.navigateToPageClear(path: NavigationConstants.TEST_VIEW); } @@ -62,7 +59,9 @@ abstract class _SplashViewModelBase with Store, BaseViewModel, DeviceAndCache { Future _checkAppVersion() async { final response = await service?.checkDeviceVersion( - version: ''.version, platform: '${PlatformProject.IOS.versionNumber}'); + version: ''.version, + platform: '${PlatformProject.IOS.versionNumber}', + ); if (response is ForceUpdateModel) { return response.isForceUpdate ?? false; @@ -72,8 +71,7 @@ abstract class _SplashViewModelBase with Store, BaseViewModel, DeviceAndCache { } Future startAnimationOnView() async { - if (context == null) return; - await Future.delayed(context!.durationLow); + await Future.delayed(viewModelContext.durationLow); _changeFirstInit(); } @@ -85,10 +83,13 @@ abstract class _SplashViewModelBase with Store, BaseViewModel, DeviceAndCache { class _UserVersionCreate { static String createNumber(int number) { - var model = ForceUpdateModel(currentVersion: '1.0.3'); + final model = ForceUpdateModel(currentVersion: '1.0.3'); final data = jsonEncode(model); final lastData = jsonDecode(data); - - return ForceUpdateModel().fromJson(lastData).currentVersion ?? ''; + if (lastData is Map) { + return ForceUpdateModel().fromJson(lastData).currentVersion ?? ''; + } + // throw + return ''; } } diff --git a/lib/view/authenticate/splash/viewmodel/splash_view_model.g.dart b/lib/view/authenticate/splash/viewmodel/splash_view_model.g.dart index 050d79b..1f8c11a 100644 --- a/lib/view/authenticate/splash/viewmodel/splash_view_model.g.dart +++ b/lib/view/authenticate/splash/viewmodel/splash_view_model.g.dart @@ -6,10 +6,11 @@ part of 'splash_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$SplashViewModel on _SplashViewModelBase, Store { - final _$isFirstInitAtom = Atom(name: '_SplashViewModelBase.isFirstInit'); + late final _$isFirstInitAtom = + Atom(name: '_SplashViewModelBase.isFirstInit', context: context); @override bool get isFirstInit { @@ -24,8 +25,8 @@ mixin _$SplashViewModel on _SplashViewModelBase, Store { }); } - final _$_SplashViewModelBaseActionController = - ActionController(name: '_SplashViewModelBase'); + late final _$_SplashViewModelBaseActionController = + ActionController(name: '_SplashViewModelBase', context: context); @override void _changeFirstInit() { diff --git a/lib/view/authenticate/test/model/test_model.dart b/lib/view/authenticate/test/model/test_model.dart index b73287a..a3fea55 100644 --- a/lib/view/authenticate/test/model/test_model.dart +++ b/lib/view/authenticate/test/model/test_model.dart @@ -1,17 +1,16 @@ +import 'package:equatable/equatable.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_model.dart'; import 'package:json_annotation/json_annotation.dart'; -import '../../../../core/base/model/base_model.dart'; - part 'test_model.g.dart'; @JsonSerializable() -class TestModel extends BaseModel { - int? userId; - int? id; - String? title; - bool? completed; - +class TestModel extends BaseModel with EquatableMixin { TestModel({this.userId, this.id, this.title, this.completed}); + final int? userId; + final int? id; + final String? title; + final bool? completed; @override Map toJson() { @@ -22,4 +21,21 @@ class TestModel extends BaseModel { TestModel fromJson(Map json) { return _$TestModelFromJson(json); } + + @override + List get props => [userId, id, title, completed]; + + TestModel copyWith({ + int? userId, + int? id, + String? title, + bool? completed, + }) { + return TestModel( + userId: userId ?? this.userId, + id: id ?? this.id, + title: title ?? this.title, + completed: completed ?? this.completed, + ); + } } diff --git a/lib/view/authenticate/test/model/test_model.g.dart b/lib/view/authenticate/test/model/test_model.g.dart index 8de3c0f..7ade817 100644 --- a/lib/view/authenticate/test/model/test_model.g.dart +++ b/lib/view/authenticate/test/model/test_model.g.dart @@ -6,14 +6,12 @@ part of 'test_model.dart'; // JsonSerializableGenerator // ************************************************************************** -TestModel _$TestModelFromJson(Map json) { - return TestModel( - userId: json['userId'] as int?, - id: json['id'] as int?, - title: json['title'] as String?, - completed: json['completed'] as bool?, - ); -} +TestModel _$TestModelFromJson(Map json) => TestModel( + userId: json['userId'] as int?, + id: json['id'] as int?, + title: json['title'] as String?, + completed: json['completed'] as bool?, + ); Map _$TestModelToJson(TestModel instance) => { 'userId': instance.userId, diff --git a/lib/view/authenticate/test/view/test_view.dart b/lib/view/authenticate/test/view/test_view.dart index b194277..e15e91a 100644 --- a/lib/view/authenticate/test/view/test_view.dart +++ b/lib/view/authenticate/test/view/test_view.dart @@ -2,14 +2,14 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import '../../../../core/base/state/base_state.dart'; -import '../../../../core/base/view/base_widget.dart'; -import '../../../../core/constants/enums/locale_keys_enum.dart'; -import '../../../../core/extension/string_extension.dart'; -import '../../../../core/init/cache/locale_manager.dart'; -import '../../../../core/init/lang/language_manager.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../viewmodel/test_view_model.dart'; +import 'package:fluttermvvmtemplate/core/base/state/base_state.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/locale_keys_enum.dart'; +import 'package:fluttermvvmtemplate/core/extension/string_extension.dart'; +import 'package:fluttermvvmtemplate/core/init/cache/locale_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/language_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/test/viewmodel/test_view_model.dart'; class TestsView extends StatefulWidget { @override @@ -46,10 +46,10 @@ class _TestsViewState extends BaseState { IconButton iconButtonChangeTheme() { return IconButton( - icon: Icon(Icons.change_history), + icon: const Icon(Icons.change_history), onPressed: () { context.setLocale(LanguageManager.instance.enLocale); - }); + },); } Widget get textNumber { diff --git a/lib/view/authenticate/test/viewmodel/test_view_model.dart b/lib/view/authenticate/test/viewmodel/test_view_model.dart index a6e1345..08a6cec 100644 --- a/lib/view/authenticate/test/viewmodel/test_view_model.dart +++ b/lib/view/authenticate/test/viewmodel/test_view_model.dart @@ -1,13 +1,12 @@ import 'package:flutter/cupertino.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/app_theme_enum.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/http_request_enum.dart'; +import 'package:fluttermvvmtemplate/core/init/notifier/theme_notifer.dart'; +import 'package:fluttermvvmtemplate/view/authenticate/test/model/test_model.dart'; import 'package:mobx/mobx.dart'; import 'package:provider/provider.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../../core/constants/enums/app_theme_enum.dart'; -import '../../../../core/constants/enums/http_request_enum.dart'; -import '../../../../core/init/notifier/theme_notifer.dart'; -import '../model/test_model.dart'; - part 'test_view_model.g.dart'; class TestViewModel = _TestViewModelBase with _$TestViewModel; @@ -15,7 +14,7 @@ class TestViewModel = _TestViewModelBase with _$TestViewModel; abstract class _TestViewModelBase with Store, BaseViewModel { @override void setContext(BuildContext context) { - this.context = context; + viewModelContext = context; } @override @@ -36,7 +35,7 @@ abstract class _TestViewModelBase with Store, BaseViewModel { } void changeTheme() { - Provider.of(context!, listen: false).changeValue(AppThemes.DARK); + Provider.of(viewModelContext, listen: false).changeValue(AppThemes.DARK); } @action diff --git a/lib/view/authenticate/test/viewmodel/test_view_model.g.dart b/lib/view/authenticate/test/viewmodel/test_view_model.g.dart index 4f95173..7bffd00 100644 --- a/lib/view/authenticate/test/viewmodel/test_view_model.g.dart +++ b/lib/view/authenticate/test/viewmodel/test_view_model.g.dart @@ -6,7 +6,7 @@ part of 'test_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$TestViewModel on _TestViewModelBase, Store { Computed? _$isEvenComputed; @@ -16,7 +16,8 @@ mixin _$TestViewModel on _TestViewModelBase, Store { Computed(() => super.isEven, name: '_TestViewModelBase.isEven')) .value; - final _$isLoadingAtom = Atom(name: '_TestViewModelBase.isLoading'); + late final _$isLoadingAtom = + Atom(name: '_TestViewModelBase.isLoading', context: context); @override bool get isLoading { @@ -31,7 +32,8 @@ mixin _$TestViewModel on _TestViewModelBase, Store { }); } - final _$numberAtom = Atom(name: '_TestViewModelBase.number'); + late final _$numberAtom = + Atom(name: '_TestViewModelBase.number', context: context); @override int get number { @@ -46,16 +48,16 @@ mixin _$TestViewModel on _TestViewModelBase, Store { }); } - final _$getSampleRequestAsyncAction = - AsyncAction('_TestViewModelBase.getSampleRequest'); + late final _$getSampleRequestAsyncAction = + AsyncAction('_TestViewModelBase.getSampleRequest', context: context); @override Future getSampleRequest() { return _$getSampleRequestAsyncAction.run(() => super.getSampleRequest()); } - final _$_TestViewModelBaseActionController = - ActionController(name: '_TestViewModelBase'); + late final _$_TestViewModelBaseActionController = + ActionController(name: '_TestViewModelBase', context: context); @override void incrementNumber() { diff --git a/lib/view/home/build/feed/model/house_model.dart b/lib/view/home/build/feed/model/house_model.dart index 8b4ec29..8a72a0a 100644 --- a/lib/view/home/build/feed/model/house_model.dart +++ b/lib/view/home/build/feed/model/house_model.dart @@ -5,7 +5,9 @@ part 'house_model.g.dart'; @JsonSerializable() class HouseModel extends INetworkModel { - @JsonKey(name: "_id") + + HouseModel({this.id, this.title, this.description, this.image, this.user, this.iV}); + @JsonKey(name: '_id') String? id; String? title; String? description; @@ -13,8 +15,6 @@ class HouseModel extends INetworkModel { UserHouse? user; int? iV; - HouseModel({this.id, this.title, this.description, this.image, this.user, this.iV}); - @override HouseModel fromJson(Map json) { return _$HouseModelFromJson(json); @@ -28,22 +28,22 @@ class HouseModel extends INetworkModel { @JsonSerializable() class UserHouse extends INetworkModel { - @JsonKey(name: "_id") + + UserHouse({this.id, this.name, this.image, this.date}); + + factory UserHouse.fromJson(Map json) { + return _$UserHouseFromJson(json); + } + @JsonKey(name: '_id') String? id; String? name; String? image; String? date; - UserHouse({this.id, this.name, this.image, this.date}); - @override UserHouse fromJson(Map json) { return _$UserHouseFromJson(json); } - - factory UserHouse.fromJson(Map json) { - return _$UserHouseFromJson(json); - } @override Map toJson() { return _$UserHouseToJson(this); diff --git a/lib/view/home/build/feed/model/house_model.g.dart b/lib/view/home/build/feed/model/house_model.g.dart index 53d5f4d..aab3834 100644 --- a/lib/view/home/build/feed/model/house_model.g.dart +++ b/lib/view/home/build/feed/model/house_model.g.dart @@ -6,20 +6,18 @@ part of 'house_model.dart'; // JsonSerializableGenerator // ************************************************************************** -HouseModel _$HouseModelFromJson(Map json) { - return HouseModel( - id: json['_id'] as String?, - title: json['title'] as String?, - description: json['description'] as String?, - image: json['image'] as String?, - user: json['user'] == null - ? null - : UserHouse.fromJson((json['user'] as Map).map( - (k, e) => MapEntry(k, e as Object), - )), - iV: json['iV'] as int?, - ); -} +HouseModel _$HouseModelFromJson(Map json) => HouseModel( + id: json['_id'] as String?, + title: json['title'] as String?, + description: json['description'] as String?, + image: json['image'] as String?, + user: json['user'] == null + ? null + : UserHouse.fromJson((json['user'] as Map).map( + (k, e) => MapEntry(k, e as Object), + )), + iV: json['iV'] as int?, + ); Map _$HouseModelToJson(HouseModel instance) => { @@ -31,14 +29,12 @@ Map _$HouseModelToJson(HouseModel instance) => 'iV': instance.iV, }; -UserHouse _$UserHouseFromJson(Map json) { - return UserHouse( - id: json['_id'] as String?, - name: json['name'] as String?, - image: json['image'] as String?, - date: json['date'] as String?, - ); -} +UserHouse _$UserHouseFromJson(Map json) => UserHouse( + id: json['_id'] as String?, + name: json['name'] as String?, + image: json['image'] as String?, + date: json['date'] as String?, + ); Map _$UserHouseToJson(UserHouse instance) => { '_id': instance.id, diff --git a/lib/view/home/build/feed/service/IBuildFeedService.dart b/lib/view/home/build/feed/service/IBuildFeedService.dart index 540df3e..b3dbc5d 100644 --- a/lib/view/home/build/feed/service/IBuildFeedService.dart +++ b/lib/view/home/build/feed/service/IBuildFeedService.dart @@ -1,14 +1,12 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart'; import 'package:vexana/vexana.dart'; -import '../model/house_model.dart'; - abstract class IBuildFeedService { - final INetworkManager manager; - final GlobalKey scaffoldyKey; IBuildFeedService(this.manager, this.scaffoldyKey); + final INetworkManager manager; + final GlobalKey scaffoldyKey; Future?> fetchUserHouseList(); } diff --git a/lib/view/home/build/feed/service/build_feed_service.dart b/lib/view/home/build/feed/service/build_feed_service.dart index d7773c0..25db8ba 100644 --- a/lib/view/home/build/feed/service/build_feed_service.dart +++ b/lib/view/home/build/feed/service/build_feed_service.dart @@ -1,12 +1,10 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/service_helper.dart'; +import 'package:fluttermvvmtemplate/view/_product/enum/network_route_enum.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/service/IBuildFeedService.dart'; import 'package:vexana/vexana.dart'; -import '../../../../_product/_utilty/service_helper.dart'; -import '../../../../_product/enum/network_route_enum.dart'; -import '../model/house_model.dart'; -import 'IBuildFeedService.dart'; - class BuildFeedService extends IBuildFeedService with ServiceHelper { BuildFeedService(INetworkManager manager, GlobalKey key) : super(manager, key); diff --git a/lib/view/home/build/feed/view/build_feed_view.dart b/lib/view/home/build/feed/view/build_feed_view.dart index 4f42a8f..f4e4a02 100644 --- a/lib/view/home/build/feed/view/build_feed_view.dart +++ b/lib/view/home/build/feed/view/build_feed_view.dart @@ -1,14 +1,13 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/_product/_widgets/card/build_user_card.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/viewmodel/build_feed_view_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../../../core/base/view/base_widget.dart'; -import '../../../../../core/init/lang/locale_keys.g.dart'; -import '../../../../_product/_widgets/card/build_user_card.dart'; -import '../model/house_model.dart'; -import '../viewmodel/build_feed_view_model.dart'; - class BuildFeedView extends StatelessWidget { @override Widget build(BuildContext context) { @@ -28,9 +27,9 @@ class BuildFeedView extends StatelessWidget { return viewModel.isLoaindg ? buildCenter() : viewModel.houseModels == null || viewModel.houseModels!.isEmpty - ? Center(child: Text('Not Found')) + ? const Center(child: Text('Not Found')) : buildListViewRecommended(viewModel, context); - })), + },),), ), ); } @@ -51,7 +50,7 @@ class BuildFeedView extends StatelessWidget { ListView buildListBottom(BuildFeedViewModel viewModel) { return ListView.builder( - physics: NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) => SizedBox( height: context.dynamicHeight(0.15), child: Card( @@ -61,7 +60,7 @@ class BuildFeedView extends StatelessWidget { Expanded(flex: 9, child: buildObserver(viewModel, index)), ], ), - )), + ),), itemCount: 3, shrinkWrap: true, ); @@ -78,7 +77,7 @@ class BuildFeedView extends StatelessWidget { } }, ); - }); + },); } SizedBox buildSizedBoxLAtestPageView(BuildContext context, BuildFeedViewModel viewModel) { @@ -98,17 +97,17 @@ class BuildFeedView extends StatelessWidget { Tab(text: LocaleKeys.home_build_tabbar_tab2.tr()), Tab(text: LocaleKeys.home_build_tabbar_tab3.tr()), Tab(text: LocaleKeys.home_build_tabbar_tab4.tr()), - ]); + ],); } - Center buildCenter() => Center(child: CircularProgressIndicator()); + Center buildCenter() => const Center(child: CircularProgressIndicator()); AppBar buildAppBar() { return AppBar( backgroundColor: Colors.transparent, elevation: 0, - leading: IconButton(icon: Icon(Icons.format_align_left), onPressed: () {}), - actions: [IconButton(icon: Icon(Icons.search), onPressed: () {})], + leading: IconButton(icon: const Icon(Icons.format_align_left), onPressed: () {}), + actions: [IconButton(icon: const Icon(Icons.search), onPressed: () {})], ); } @@ -138,7 +137,7 @@ class BuildFeedView extends StatelessWidget { } }, ); - }), + },), ), ); } diff --git a/lib/view/home/build/feed/viewmodel/build_feed_view_model.dart b/lib/view/home/build/feed/viewmodel/build_feed_view_model.dart index ae4a111..c2585e3 100644 --- a/lib/view/home/build/feed/viewmodel/build_feed_view_model.dart +++ b/lib/view/home/build/feed/viewmodel/build_feed_view_model.dart @@ -1,19 +1,18 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/decoration_helper.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/service/IBuildFeedService.dart'; +import 'package:fluttermvvmtemplate/view/home/build/feed/service/build_feed_service.dart'; import 'package:mobx/mobx.dart'; -import '../../../../../core/base/model/base_view_model.dart'; -import '../../../../_product/_utilty/decoration_helper.dart'; -import '../model/house_model.dart'; -import '../service/IBuildFeedService.dart'; -import '../service/build_feed_service.dart'; - part 'build_feed_view_model.g.dart'; class BuildFeedViewModel = _BuildFeedViewModelBase with _$BuildFeedViewModel; abstract class _BuildFeedViewModelBase with Store, BaseViewModel { @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; GlobalKey scaffoldKey = GlobalKey(); late DecorationHelper helper; @@ -43,7 +42,7 @@ abstract class _BuildFeedViewModelBase with Store, BaseViewModel { @override void init() { - helper = DecorationHelper(context: context); + helper = DecorationHelper(context: viewModelContext); feedService = BuildFeedService(vexanaManager!.networkManager, scaffoldKey); } diff --git a/lib/view/home/build/feed/viewmodel/build_feed_view_model.g.dart b/lib/view/home/build/feed/viewmodel/build_feed_view_model.g.dart index 85fb988..faaf21e 100644 --- a/lib/view/home/build/feed/viewmodel/build_feed_view_model.g.dart +++ b/lib/view/home/build/feed/viewmodel/build_feed_view_model.g.dart @@ -6,7 +6,7 @@ part of 'build_feed_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$BuildFeedViewModel on _BuildFeedViewModelBase, Store { Computed? _$sliderHouseComputed; @@ -17,7 +17,8 @@ mixin _$BuildFeedViewModel on _BuildFeedViewModelBase, Store { name: '_BuildFeedViewModelBase.sliderHouse')) .value; - final _$likeItemsAtom = Atom(name: '_BuildFeedViewModelBase.likeItems'); + late final _$likeItemsAtom = + Atom(name: '_BuildFeedViewModelBase.likeItems', context: context); @override List get likeItems { @@ -32,7 +33,8 @@ mixin _$BuildFeedViewModel on _BuildFeedViewModelBase, Store { }); } - final _$houseModelsAtom = Atom(name: '_BuildFeedViewModelBase.houseModels'); + late final _$houseModelsAtom = + Atom(name: '_BuildFeedViewModelBase.houseModels', context: context); @override List? get houseModels { @@ -47,7 +49,8 @@ mixin _$BuildFeedViewModel on _BuildFeedViewModelBase, Store { }); } - final _$isLoaindgAtom = Atom(name: '_BuildFeedViewModelBase.isLoaindg'); + late final _$isLoaindgAtom = + Atom(name: '_BuildFeedViewModelBase.isLoaindg', context: context); @override bool get isLoaindg { @@ -62,16 +65,16 @@ mixin _$BuildFeedViewModel on _BuildFeedViewModelBase, Store { }); } - final _$getListAllAsyncAction = - AsyncAction('_BuildFeedViewModelBase.getListAll'); + late final _$getListAllAsyncAction = + AsyncAction('_BuildFeedViewModelBase.getListAll', context: context); @override Future getListAll() { return _$getListAllAsyncAction.run(() => super.getListAll()); } - final _$_BuildFeedViewModelBaseActionController = - ActionController(name: '_BuildFeedViewModelBase'); + late final _$_BuildFeedViewModelBaseActionController = + ActionController(name: '_BuildFeedViewModelBase', context: context); @override void onLikeItemPressed(String id) { diff --git a/lib/view/home/burger/model/burger_model.g.dart b/lib/view/home/burger/model/burger_model.g.dart index 65c8be0..d5ef629 100644 --- a/lib/view/home/burger/model/burger_model.g.dart +++ b/lib/view/home/burger/model/burger_model.g.dart @@ -6,16 +6,14 @@ part of 'burger_model.dart'; // JsonSerializableGenerator // ************************************************************************** -BurgerModel _$BurgerModelFromJson(Map json) { - return BurgerModel() - ..id = json['_id'] as String? - ..image = json['image'] as String? - ..name = json['name'] as String? - ..price = json['price'] as int? - ..rates = json['rates'] as int? - ..isFavorite = json['isFavorite'] as bool? - ..updated = json['updated'] as String?; -} +BurgerModel _$BurgerModelFromJson(Map json) => BurgerModel() + ..id = json['_id'] as String? + ..image = json['image'] as String? + ..name = json['name'] as String? + ..price = json['price'] as int? + ..rates = json['rates'] as int? + ..isFavorite = json['isFavorite'] as bool? + ..updated = json['updated'] as String?; Map _$BurgerModelToJson(BurgerModel instance) => { diff --git a/lib/view/home/burger/service/burger_serivce.dart b/lib/view/home/burger/service/burger_serivce.dart index 5f65f82..108d624 100644 --- a/lib/view/home/burger/service/burger_serivce.dart +++ b/lib/view/home/burger/service/burger_serivce.dart @@ -1,13 +1,12 @@ +import 'package:fluttermvvmtemplate/view/_product/_mixin/network_helper.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/burger_network_enum.dart'; +import 'package:fluttermvvmtemplate/view/home/burger/model/burger_model.dart'; import 'package:vexana/vexana.dart'; -import '../../../_product/_mixin/network_helper.dart'; -import '../../../_product/_utilty/burger_network_enum.dart'; -import '../model/burger_model.dart'; - abstract class IBurgerService { - final INetworkManager manager; IBurgerService(this.manager); + final INetworkManager manager; Future> fetchFavoriteBurgers(); @@ -23,7 +22,7 @@ class BurgerService extends IBurgerService with NetworkHelper { final response = await manager.send>(BurgerNetworkPath.PRICE.rawValue, parseModel: BurgerModel(), method: RequestType.GET, - queryParameters: Map.fromEntries([BurgerQueryParamaters.MIN.rawValue(min?.toInt()), BurgerQueryParamaters.MAX.rawValue(max?.toInt())])); + queryParameters: Map.fromEntries([BurgerQueryParamaters.MIN.rawValue(min?.toInt()), BurgerQueryParamaters.MAX.rawValue(max?.toInt())]),); return response.data ?? []; } @@ -34,7 +33,7 @@ class BurgerService extends IBurgerService with NetworkHelper { parseModel: BurgerModel(), method: RequestType.GET, queryParameters: - Map.fromEntries([BurgerQueryParamaters.SORT.rawValue(sort.rawValue), BurgerQueryParamaters.SORT_TYPE.rawValue(types.rawValue)])); + Map.fromEntries([BurgerQueryParamaters.SORT.rawValue(sort.rawValue), BurgerQueryParamaters.SORT_TYPE.rawValue(types.rawValue)]),); return response.data ?? []; } @@ -42,7 +41,7 @@ class BurgerService extends IBurgerService with NetworkHelper { @override Future> fetchFavoriteBurgers() async { final response = await manager.send>(BurgerNetworkPath.MAIN.rawValue, - parseModel: BurgerModel(), method: RequestType.GET, queryParameters: Map.fromEntries([BurgerQueryParamaters.FAVORITE.rawValue(true)])); + parseModel: BurgerModel(), method: RequestType.GET, queryParameters: Map.fromEntries([BurgerQueryParamaters.FAVORITE.rawValue(true)]),); showLog(response); return response.data ?? []; } diff --git a/lib/view/home/burger/view/burgers_view.dart b/lib/view/home/burger/view/burgers_view.dart index 93c7b03..88c5ddb 100644 --- a/lib/view/home/burger/view/burgers_view.dart +++ b/lib/view/home/burger/view/burgers_view.dart @@ -2,16 +2,15 @@ import 'package:architecture_widgets/architecture_widgets.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/core/init/network/vexana_manager.dart'; +import 'package:fluttermvvmtemplate/product/widget/card/burger_card.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/burger_network_enum.dart'; +import 'package:fluttermvvmtemplate/view/home/burger/service/burger_serivce.dart'; +import 'package:fluttermvvmtemplate/view/home/burger/viewmodel/burger_view_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../../core/base/view/base_widget.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../../../../core/init/network/vexana_manager.dart'; -import '../../../../product/widget/card/burger_card.dart'; -import '../../../_product/_utilty/burger_network_enum.dart'; -import '../service/burger_serivce.dart'; -import '../viewmodel/burger_view_model.dart'; - enum _BurgerViews { BEST_SELL_TITLE, BURGER_FOVORITE, @@ -39,23 +38,23 @@ class BurgersView extends StatelessWidget { } Observer buildObserverBuildbody( - BurgerViewModel viewModel, BuildContext context) { + BurgerViewModel viewModel, BuildContext context,) { return Observer(builder: (_) { return viewModel.isLoading ? buildCenterLoading() : buildPaddingListView(context, viewModel); - }); + },); } Padding buildPaddingListView( - BuildContext context, BurgerViewModel viewModel) { + BuildContext context, BurgerViewModel viewModel,) { return Padding( padding: context.paddingLow, child: ListView.builder( itemCount: _BurgerViews.values.length, itemBuilder: (context, index) { - final _views = _BurgerViews.values[index]; - switch (_views) { + final views = _BurgerViews.values[index]; + switch (views) { case _BurgerViews.BEST_SELL_TITLE: return buildTextBestSell(context); case _BurgerViews.BURGER_FOVORITE: @@ -75,7 +74,7 @@ class BurgersView extends StatelessWidget { title: Text( _title, style: context.textTheme.headline5?.copyWith( - fontWeight: FontWeight.w600, color: context.colorScheme.onError), + fontWeight: FontWeight.w600, color: context.colorScheme.onError,), ), centerTitle: false, leading: @@ -86,22 +85,22 @@ class BurgersView extends StatelessWidget { showModalBottomSheet( context: context, builder: (context) => - buildBottomSheetBody(context, viewModel)); + buildBottomSheetBody(context, viewModel),); }, - icon: Icon(Icons.filter_alt)) + icon: const Icon(Icons.filter_alt),) ], ); } Widget buildBottomSheetBody( - BuildContext context, BurgerViewModel viewModel) => + BuildContext context, BurgerViewModel viewModel,) => Padding( padding: context.paddingLow, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text('Filter'), - Divider(height: 2, thickness: 2), + const Text('Filter'), + const Divider(height: 2, thickness: 2), Row( children: [ Expanded( @@ -117,7 +116,7 @@ class BurgersView extends StatelessWidget { onPressed: () { viewModel.fetchMinMax(); }, - icon: Icon(Icons.check_box_outline_blank)) + icon: const Icon(Icons.check_box_outline_blank),) ], ), Card( @@ -131,17 +130,17 @@ class BurgersView extends StatelessWidget { onPressed: () { viewModel.fetchSort(e); }, - icon: Text(e.rawValue, maxLines: 1))) + icon: Text(e.rawValue, maxLines: 1),),) .toList(), ), Row( children: [ IconButton( onPressed: () => viewModel.changeAscending(true), - icon: Icon(Icons.plus_one)), + icon: const Icon(Icons.plus_one),), IconButton( onPressed: () => viewModel.changeAscending(true), - icon: Icon(Icons.design_services_rounded)), + icon: const Icon(Icons.design_services_rounded),), ], ), ], @@ -155,7 +154,7 @@ class BurgersView extends StatelessWidget { return Padding( padding: context.verticalPaddingLow, child: Text(LocaleKeys.home_burgers_normalProducts.tr(), - style: context.textTheme.headline5), + style: context.textTheme.headline5,), ); } @@ -163,33 +162,33 @@ class BurgersView extends StatelessWidget { return Text( LocaleKeys.home_burgers_favoriteProducts.tr(), style: context.textTheme.headline3?.copyWith( - color: context.colorScheme.onSecondary, fontWeight: FontWeight.bold), + color: context.colorScheme.onSecondary, fontWeight: FontWeight.bold,), ); } Center buildCenterLoading() => - Center(child: CircularProgressIndicator.adaptive()); + const Center(child: CircularProgressIndicator.adaptive()); SizedBox buildSizedBoxFavorite( - BuildContext context, BurgerViewModel viewModel) => + BuildContext context, BurgerViewModel viewModel,) => SizedBox( height: context.dynamicHeight(0.3), - child: BurgerCard().buildList(viewModel.favoriteBurgerModel)); + child: const BurgerCard().buildList(viewModel.favoriteBurgerModel),); Widget buildSizedBoxNormalBurgers( - BurgerViewModel viewModel, BuildContext context) { + BurgerViewModel viewModel, BuildContext context,) { viewModel.fetchNormalItems(); return SizedBox( child: Observer(builder: (_) { return viewModel.isLoadingMain ? SizedBox( - height: context.dynamicHeight(0.1), child: buildCenterLoading()) + height: context.dynamicHeight(0.1), child: buildCenterLoading(),) : GridView.builder( - physics: NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2), + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2,), itemBuilder: (context, index) { return BurgerCard( model: viewModel.mainBurgerModel[index], @@ -197,7 +196,7 @@ class BurgersView extends StatelessWidget { }, itemCount: viewModel.mainBurgerModel.length, ); - }), + },), ); } } diff --git a/lib/view/home/burger/viewmodel/burger_view_model.dart b/lib/view/home/burger/viewmodel/burger_view_model.dart index 98db86c..8a82e1e 100644 --- a/lib/view/home/burger/viewmodel/burger_view_model.dart +++ b/lib/view/home/burger/viewmodel/burger_view_model.dart @@ -1,20 +1,18 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/burger_network_enum.dart'; +import 'package:fluttermvvmtemplate/view/home/burger/model/burger_model.dart'; +import 'package:fluttermvvmtemplate/view/home/burger/service/burger_serivce.dart'; import 'package:kartal/kartal.dart'; import 'package:mobx/mobx.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../_product/_utilty/burger_network_enum.dart'; -import '../model/burger_model.dart'; -import '../service/burger_serivce.dart'; - part 'burger_view_model.g.dart'; class BurgerViewModel = _BurgerViewModelBase with _$BurgerViewModel; abstract class _BurgerViewModelBase with Store, BaseViewModel { - final IBurgerService burgerService; - _BurgerViewModelBase(this.burgerService); + final IBurgerService burgerService; @observable bool isLoading = false; @@ -26,7 +24,7 @@ abstract class _BurgerViewModelBase with Store, BaseViewModel { @observable List mainBurgerModel = []; @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; RangeValues? _values; @@ -71,16 +69,19 @@ abstract class _BurgerViewModelBase with Store, BaseViewModel { @action Future fetchMinMax() async { - context?.navigation.pop(); + viewModelContext.navigation.pop(); _changeLoadingMain(); mainBurgerModel = await burgerService.fetchBurgersLimited(max: _values?.end, min: _values?.start); _changeLoadingMain(); } Future fetchSort(BurgerSortValues value) async { - context?.navigation.pop(); + viewModelContext.navigation.pop(); _changeLoadingMain(); - mainBurgerModel = await burgerService.fetchBurgersSorted(sort: value, types: _isAscending ? BurgerSortValuesType.ASC : BurgerSortValuesType.DSC); + mainBurgerModel = await burgerService.fetchBurgersSorted( + sort: value, + types: _isAscending ? BurgerSortValuesType.ASC : BurgerSortValuesType.DSC, + ); _changeLoadingMain(); } } diff --git a/lib/view/home/burger/viewmodel/burger_view_model.g.dart b/lib/view/home/burger/viewmodel/burger_view_model.g.dart index f6c4ebc..c6df23a 100644 --- a/lib/view/home/burger/viewmodel/burger_view_model.g.dart +++ b/lib/view/home/burger/viewmodel/burger_view_model.g.dart @@ -6,10 +6,11 @@ part of 'burger_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$BurgerViewModel on _BurgerViewModelBase, Store { - final _$isLoadingAtom = Atom(name: '_BurgerViewModelBase.isLoading'); + late final _$isLoadingAtom = + Atom(name: '_BurgerViewModelBase.isLoading', context: context); @override bool get isLoading { @@ -24,7 +25,8 @@ mixin _$BurgerViewModel on _BurgerViewModelBase, Store { }); } - final _$isLoadingMainAtom = Atom(name: '_BurgerViewModelBase.isLoadingMain'); + late final _$isLoadingMainAtom = + Atom(name: '_BurgerViewModelBase.isLoadingMain', context: context); @override bool get isLoadingMain { @@ -39,8 +41,8 @@ mixin _$BurgerViewModel on _BurgerViewModelBase, Store { }); } - final _$favoriteBurgerModelAtom = - Atom(name: '_BurgerViewModelBase.favoriteBurgerModel'); + late final _$favoriteBurgerModelAtom = + Atom(name: '_BurgerViewModelBase.favoriteBurgerModel', context: context); @override List get favoriteBurgerModel { @@ -55,8 +57,8 @@ mixin _$BurgerViewModel on _BurgerViewModelBase, Store { }); } - final _$mainBurgerModelAtom = - Atom(name: '_BurgerViewModelBase.mainBurgerModel'); + late final _$mainBurgerModelAtom = + Atom(name: '_BurgerViewModelBase.mainBurgerModel', context: context); @override List get mainBurgerModel { @@ -71,32 +73,32 @@ mixin _$BurgerViewModel on _BurgerViewModelBase, Store { }); } - final _$fetchFavoriteAsyncAction = - AsyncAction('_BurgerViewModelBase.fetchFavorite'); + late final _$fetchFavoriteAsyncAction = + AsyncAction('_BurgerViewModelBase.fetchFavorite', context: context); @override Future fetchFavorite() { return _$fetchFavoriteAsyncAction.run(() => super.fetchFavorite()); } - final _$fetchNormalItemsAsyncAction = - AsyncAction('_BurgerViewModelBase.fetchNormalItems'); + late final _$fetchNormalItemsAsyncAction = + AsyncAction('_BurgerViewModelBase.fetchNormalItems', context: context); @override Future fetchNormalItems() { return _$fetchNormalItemsAsyncAction.run(() => super.fetchNormalItems()); } - final _$fetchMinMaxAsyncAction = - AsyncAction('_BurgerViewModelBase.fetchMinMax'); + late final _$fetchMinMaxAsyncAction = + AsyncAction('_BurgerViewModelBase.fetchMinMax', context: context); @override Future fetchMinMax() { return _$fetchMinMaxAsyncAction.run(() => super.fetchMinMax()); } - final _$_BurgerViewModelBaseActionController = - ActionController(name: '_BurgerViewModelBase'); + late final _$_BurgerViewModelBaseActionController = + ActionController(name: '_BurgerViewModelBase', context: context); @override void _changeLoading() { diff --git a/lib/view/home/game/model/game_model.dart b/lib/view/home/game/model/game_model.dart index c528a4b..dd822e0 100644 --- a/lib/view/home/game/model/game_model.dart +++ b/lib/view/home/game/model/game_model.dart @@ -5,12 +5,6 @@ part 'game_model.g.dart'; @JsonSerializable() class GameModel extends INetworkModel { - @JsonKey(name: '_id') - String? sId; - String? image; - String? name; - int? money; - int? category; GameModel({ this.sId, this.image, @@ -18,6 +12,12 @@ class GameModel extends INetworkModel { this.money, this.category, }); + @JsonKey(name: '_id') + String? sId; + String? image; + String? name; + int? money; + int? category; @override GameModel fromJson(Map json) { diff --git a/lib/view/home/game/model/game_model.g.dart b/lib/view/home/game/model/game_model.g.dart index bb3b11f..388ed67 100644 --- a/lib/view/home/game/model/game_model.g.dart +++ b/lib/view/home/game/model/game_model.g.dart @@ -6,15 +6,13 @@ part of 'game_model.dart'; // JsonSerializableGenerator // ************************************************************************** -GameModel _$GameModelFromJson(Map json) { - return GameModel( - sId: json['_id'] as String?, - image: json['image'] as String?, - name: json['name'] as String?, - money: json['money'] as int?, - category: json['category'] as int?, - ); -} +GameModel _$GameModelFromJson(Map json) => GameModel( + sId: json['_id'] as String?, + image: json['image'] as String?, + name: json['name'] as String?, + money: json['money'] as int?, + category: json['category'] as int?, + ); Map _$GameModelToJson(GameModel instance) => { '_id': instance.sId, diff --git a/lib/view/home/game/model/slider_model.dart b/lib/view/home/game/model/slider_model.dart index d214776..4053cb9 100644 --- a/lib/view/home/game/model/slider_model.dart +++ b/lib/view/home/game/model/slider_model.dart @@ -5,12 +5,12 @@ part 'slider_model.g.dart'; @JsonSerializable() class SliderModel extends INetworkModel { + + SliderModel({this.image, this.text, this.detailId}); final String? image; final String? text; final String? detailId; - SliderModel({this.image, this.text, this.detailId}); - @override SliderModel fromJson(Map json) { return _$SliderModelFromJson(json); diff --git a/lib/view/home/game/model/slider_model.g.dart b/lib/view/home/game/model/slider_model.g.dart index 73b984f..8f552f2 100644 --- a/lib/view/home/game/model/slider_model.g.dart +++ b/lib/view/home/game/model/slider_model.g.dart @@ -6,13 +6,11 @@ part of 'slider_model.dart'; // JsonSerializableGenerator // ************************************************************************** -SliderModel _$SliderModelFromJson(Map json) { - return SliderModel( - image: json['image'] as String?, - text: json['text'] as String?, - detailId: json['detailId'] as String?, - ); -} +SliderModel _$SliderModelFromJson(Map json) => SliderModel( + image: json['image'] as String?, + text: json['text'] as String?, + detailId: json['detailId'] as String?, + ); Map _$SliderModelToJson(SliderModel instance) => { diff --git a/lib/view/home/game/service/IGameService.dart b/lib/view/home/game/service/IGameService.dart index 29a42f5..c8c5828 100644 --- a/lib/view/home/game/service/IGameService.dart +++ b/lib/view/home/game/service/IGameService.dart @@ -1,15 +1,14 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_enums.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; import 'package:vexana/vexana.dart'; -import '../model/game_enums.dart'; -import '../model/game_model.dart'; -import '../model/slider_model.dart'; - abstract class IGameService { - final INetworkManager manager; - final GlobalKey scaffoldyKey; IGameService(this.manager, this.scaffoldyKey); + final INetworkManager manager; + final GlobalKey scaffoldyKey; Future?> fetchSliderItems(); Future?> fetchGameItems(GameEnum type); diff --git a/lib/view/home/game/service/game_service.dart b/lib/view/home/game/service/game_service.dart index 24b4cb2..bb1a2a6 100644 --- a/lib/view/home/game/service/game_service.dart +++ b/lib/view/home/game/service/game_service.dart @@ -1,23 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/service_helper.dart'; +import 'package:fluttermvvmtemplate/view/_product/enum/network_route_enum.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_enums.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/service/IGameService.dart'; import 'package:vexana/vexana.dart'; -import '../../../_product/_utilty/service_helper.dart'; -import '../../../_product/enum/network_route_enum.dart'; -import '../model/game_enums.dart'; -import '../model/game_model.dart'; -import '../model/slider_model.dart'; -import 'IGameService.dart'; - class GameService extends IGameService with ServiceHelper { GameService(INetworkManager manager, GlobalKey scaffoldyKey) : super(manager, scaffoldyKey); @override Future?> fetchGameItems(GameEnum type) async { final response = await manager.send>(NetworkRoutes.GAME.rawValue, - urlSuffix: '/${type.index + 1}', parseModel: GameModel(), method: RequestType.GET); + urlSuffix: '/${type.index + 1}', parseModel: GameModel(), method: RequestType.GET,); showMessage(scaffoldyKey, response.error); - await Future.delayed(Duration(seconds: 5)); + await Future.delayed(const Duration(seconds: 5)); return response.data; } diff --git a/lib/view/home/game/view/game_view.dart b/lib/view/home/game/view/game_view.dart index a724c82..84b4988 100644 --- a/lib/view/home/game/view/game_view.dart +++ b/lib/view/home/game/view/game_view.dart @@ -1,21 +1,20 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/core/init/network/vexana_manager.dart'; +import 'package:fluttermvvmtemplate/product/widget/button/header_button.dart'; +import 'package:fluttermvvmtemplate/product/widget/grid/game_grid_view.dart'; +import 'package:fluttermvvmtemplate/product/widget/pageview/game_slider.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_view_state.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/service/game_service.dart'; +import 'package:fluttermvvmtemplate/view/home/game/viewmodel/game_view_model.dart'; import 'package:kartal/kartal.dart'; import 'package:shimmer/shimmer.dart'; -import '../../../../core/base/view/base_widget.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../../../../core/init/network/vexana_manager.dart'; -import '../../../../product/widget/button/header_button.dart'; -import '../../../../product/widget/grid/game_grid_view.dart'; -import '../../../../product/widget/pageview/game_slider.dart'; -import '../model/game_model.dart'; -import '../model/game_view_state.dart'; -import '../model/slider_model.dart'; -import '../service/game_service.dart'; -import '../viewmodel/game_view_model.dart'; - part './subview/game_view_cards.dart'; class GameView extends StatelessWidget { @@ -34,7 +33,7 @@ class GameView extends StatelessWidget { appBar: buildAppBar(context), body: Observer(builder: (_) { return value.isLoading - ? Center(child: CircularProgressIndicator()) + ? const Center(child: CircularProgressIndicator()) : DefaultTabController( length: value.gameTabItems.length, child: ListView.builder( @@ -55,16 +54,16 @@ class GameView extends StatelessWidget { throw Exception('STATE NOT FOUND'); // return Card(child: Text("data")); } - })); - }), + },),); + },), ), ); } AppBar buildAppBar(BuildContext context) { return AppBar( - leading: Icon(Icons.rounded_corner), - actions: [IconButton(icon: Icon(Icons.camera_enhance), onPressed: () {})], + leading: const Icon(Icons.rounded_corner), + actions: [IconButton(icon: const Icon(Icons.camera_enhance), onPressed: () {})], title: Text( LocaleKeys.home_game_title.tr(), style: context.textTheme.headline5!.copyWith(color: context.colorScheme.onError, fontWeight: FontWeight.w600), @@ -81,8 +80,8 @@ class GameView extends StatelessWidget { tabs: value.gameTabItems .map((e) => Tab( child: Padding(padding: context.paddingLow, child: Text(e.tr())), - )) - .toList()); + ),) + .toList(),); } Widget buildSizedBoxSlider(BuildContext context, List? items) { @@ -100,7 +99,7 @@ class GameView extends StatelessWidget { Padding buildPaddingSearchBar(BuildContext context) { return Padding( padding: context.paddingLow, - child: TextField( + child: const TextField( decoration: InputDecoration(prefixIcon: Icon(Icons.search)), ), ); diff --git a/lib/view/home/game/view/subview/game_view_cards.dart b/lib/view/home/game/view/subview/game_view_cards.dart index cb2f389..d98e8d3 100644 --- a/lib/view/home/game/view/subview/game_view_cards.dart +++ b/lib/view/home/game/view/subview/game_view_cards.dart @@ -5,7 +5,7 @@ extension _GameViewGamesCard on GameView { return viewModel.onNewsGameItems().toBuild?>( onSuccess: (data) { return Column( - children: [HeaderButton(titleText: LocaleKeys.home_game_newUpdate), GameGrid(models: data)], + children: [const HeaderButton(titleText: LocaleKeys.home_game_newUpdate), GameGrid(models: data)], ); }, loadingWidget: SizedBox( @@ -14,15 +14,15 @@ extension _GameViewGamesCard on GameView { child: Shimmer.fromColors( baseColor: Colors.grey, highlightColor: Colors.grey[200]!, - child: ListTile( + child: const ListTile( leading: CircleAvatar(), title: Text('data'), subtitle: Text('data'), ), ), ), - notFoundWidget: Text('data'), - onError: Text('data')); + notFoundWidget: const Text('data'), + onError: const Text('data'),); } Widget buildColumnUpdate(GameViewModel viewModel) { @@ -30,15 +30,15 @@ extension _GameViewGamesCard on GameView { onSuccess: (data) { return Column( children: [ - HeaderButton(titleText: LocaleKeys.home_game_topDownload), + const HeaderButton(titleText: LocaleKeys.home_game_topDownload), GameGrid( models: data, ) ], ); }, - loadingWidget: CircularProgressIndicator(), - notFoundWidget: Text('data'), - onError: Text('data')); + loadingWidget: const CircularProgressIndicator(), + notFoundWidget: const Text('data'), + onError: const Text('data'),); } } diff --git a/lib/view/home/game/viewmodel/game_view_model.dart b/lib/view/home/game/viewmodel/game_view_model.dart index d984825..79409f0 100644 --- a/lib/view/home/game/viewmodel/game_view_model.dart +++ b/lib/view/home/game/viewmodel/game_view_model.dart @@ -1,18 +1,18 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_enums.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; +import 'package:fluttermvvmtemplate/view/home/game/service/game_service.dart'; import 'package:mobx/mobx.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../model/game_enums.dart'; -import '../model/game_model.dart'; -import '../model/slider_model.dart'; -import '../service/game_service.dart'; - part 'game_view_model.g.dart'; class GameViewModel = _GameViewModelBase with _$GameViewModel; abstract class _GameViewModelBase with Store, BaseViewModel { + _GameViewModelBase(this.gameService); final List gameTabItems = [ LocaleKeys.home_game_tabbar_tab1, LocaleKeys.home_game_tabbar_tab2, @@ -26,10 +26,9 @@ abstract class _GameViewModelBase with Store, BaseViewModel { List? sliderItems = []; List newsGameItems = []; List topGameITems = []; - _GameViewModelBase(this.gameService); @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; @observable bool isLoading = false; diff --git a/lib/view/home/game/viewmodel/game_view_model.g.dart b/lib/view/home/game/viewmodel/game_view_model.g.dart index 50910c0..6a44b32 100644 --- a/lib/view/home/game/viewmodel/game_view_model.g.dart +++ b/lib/view/home/game/viewmodel/game_view_model.g.dart @@ -6,10 +6,11 @@ part of 'game_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$GameViewModel on _GameViewModelBase, Store { - final _$isLoadingAtom = Atom(name: '_GameViewModelBase.isLoading'); + late final _$isLoadingAtom = + Atom(name: '_GameViewModelBase.isLoading', context: context); @override bool get isLoading { @@ -24,16 +25,16 @@ mixin _$GameViewModel on _GameViewModelBase, Store { }); } - final _$fetchSliderItemsAsyncAction = - AsyncAction('_GameViewModelBase.fetchSliderItems'); + late final _$fetchSliderItemsAsyncAction = + AsyncAction('_GameViewModelBase.fetchSliderItems', context: context); @override Future fetchSliderItems() { return _$fetchSliderItemsAsyncAction.run(() => super.fetchSliderItems()); } - final _$_GameViewModelBaseActionController = - ActionController(name: '_GameViewModelBase'); + late final _$_GameViewModelBaseActionController = + ActionController(name: '_GameViewModelBase', context: context); @override void changeLoading() { diff --git a/lib/view/home/social/model/social_user_model.dart b/lib/view/home/social/model/social_user_model.dart index 52b1f53..85f0724 100644 --- a/lib/view/home/social/model/social_user_model.dart +++ b/lib/view/home/social/model/social_user_model.dart @@ -5,11 +5,6 @@ part 'social_user_model.g.dart'; @JsonSerializable() class SocialUser extends INetworkModel { - @JsonKey(name: '_id') - String? id; - String? name; - String? company; - String? image; SocialUser({this.name, this.company, this.image}); @@ -19,6 +14,11 @@ class SocialUser extends INetworkModel { company = json['company'] as String?; image = json['image'] as String?; } + @JsonKey(name: '_id') + String? id; + String? name; + String? company; + String? image; @override Map toJson() { diff --git a/lib/view/home/social/model/social_user_model.g.dart b/lib/view/home/social/model/social_user_model.g.dart index 7ca97da..80a5e32 100644 --- a/lib/view/home/social/model/social_user_model.g.dart +++ b/lib/view/home/social/model/social_user_model.g.dart @@ -6,13 +6,11 @@ part of 'social_user_model.dart'; // JsonSerializableGenerator // ************************************************************************** -SocialUser _$SocialUserFromJson(Map json) { - return SocialUser( - name: json['name'] as String?, - company: json['company'] as String?, - image: json['image'] as String?, - )..id = json['_id'] as String?; -} +SocialUser _$SocialUserFromJson(Map json) => SocialUser( + name: json['name'] as String?, + company: json['company'] as String?, + image: json['image'] as String?, + )..id = json['_id'] as String?; Map _$SocialUserToJson(SocialUser instance) => { diff --git a/lib/view/home/social/service/ISocialService.dart b/lib/view/home/social/service/ISocialService.dart index 48934b7..e16ea66 100644 --- a/lib/view/home/social/service/ISocialService.dart +++ b/lib/view/home/social/service/ISocialService.dart @@ -1,15 +1,13 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/view/_product/_model/query/friend_query.dart'; +import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dart'; import 'package:vexana/vexana.dart'; -import '../../../_product/_model/query/friend_query.dart'; -import '../model/social_user_model.dart'; - abstract class ISocialServiceService { - final INetworkManager manager; - final GlobalKey? scaffoldyKey; ISocialServiceService(this.manager, this.scaffoldyKey); + final INetworkManager manager; + final GlobalKey? scaffoldyKey; Future> fetchUserHouseList(FriendQuery query); Future> fetchUserNameQuery(String text); diff --git a/lib/view/home/social/service/socail_service.dart b/lib/view/home/social/service/socail_service.dart index 72cb6f2..fb5e8df 100644 --- a/lib/view/home/social/service/socail_service.dart +++ b/lib/view/home/social/service/socail_service.dart @@ -1,22 +1,20 @@ import 'package:flutter/src/material/scaffold.dart'; import 'package:flutter/src/widgets/framework.dart'; -import 'package:vexana/src/interface/INetworkService.dart'; +import 'package:fluttermvvmtemplate/view/_product/_model/query/friend_query.dart'; +import 'package:fluttermvvmtemplate/view/_product/_model/query/friend_query_enum.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/service_helper.dart'; +import 'package:fluttermvvmtemplate/view/_product/enum/network_route_enum.dart'; +import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dart'; +import 'package:fluttermvvmtemplate/view/home/social/service/ISocialService.dart'; import 'package:vexana/vexana.dart'; -import '../../../_product/_model/query/friend_query.dart'; -import '../../../_product/_model/query/friend_query_enum.dart'; -import '../../../_product/_utilty/service_helper.dart'; -import '../../../_product/enum/network_route_enum.dart'; -import '../model/social_user_model.dart'; -import 'ISocialService.dart'; - class SocailService extends ISocialServiceService with ServiceHelper { SocailService(INetworkManager manager, GlobalKey? scaffoldyKey) : super(manager, scaffoldyKey); @override Future fetchUser(id) async { final response = await manager.send(NetworkRoutes.FRIENDS.rawValue, - parseModel: SocialUser(), urlSuffix: '/$id', method: RequestType.GET); + parseModel: SocialUser(), urlSuffix: '/$id', method: RequestType.GET,); showMessage(scaffoldyKey, response.error); return response.data; } @@ -26,7 +24,7 @@ class SocailService extends ISocialServiceService with ServiceHelper { final response = await manager.send>(NetworkRoutes.FRIENDS.rawValue, parseModel: SocialUser(), queryParameters: {FriendQueryEnum.LIMIT.rawValue: query.limit, FriendQueryEnum.Q.rawValue: query.q}, - method: RequestType.GET); + method: RequestType.GET,); showMessage(scaffoldyKey, response.error); return response.data ?? []; } diff --git a/lib/view/home/social/view/social_view.dart b/lib/view/home/social/view/social_view.dart index aef4fbf..ed5efa9 100644 --- a/lib/view/home/social/view/social_view.dart +++ b/lib/view/home/social/view/social_view.dart @@ -1,16 +1,15 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; import 'package:fluttermvvmtemplate/core/init/network/vexana_manager.dart'; +import 'package:fluttermvvmtemplate/view/_product/_widgets/animation/social_card_animation.dart'; +import 'package:fluttermvvmtemplate/view/_product/_widgets/list-tile/friend_card.dart'; import 'package:fluttermvvmtemplate/view/home/social/service/socail_service.dart'; +import 'package:fluttermvvmtemplate/view/home/social/viewmodel/social_view_model.dart'; import 'package:kartal/kartal.dart'; -import '../../../../core/base/view/base_widget.dart'; -import '../../../../core/init/lang/locale_keys.g.dart'; -import '../../../_product/_widgets/animation/social_card_animation.dart'; -import '../../../_product/_widgets/list-tile/friend_card.dart'; -import '../viewmodel/social_view_model.dart'; - class SocialView extends StatelessWidget { final GlobalKey scaffoldKey = GlobalKey(); @@ -31,14 +30,16 @@ class SocialView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ buildTextFindFriends(context).tr(), - Spacer(flex: 2), + const Spacer(flex: 2), TextField( onChanged: (value) { viewModel.fetchAllSearchQuery(value); }, - decoration: InputDecoration(prefixIcon: Icon(Icons.search, color: context.colorScheme.onSecondary.withOpacity(0.2))), + decoration: InputDecoration( + prefixIcon: Icon(Icons.search, color: context.colorScheme.onSecondary.withOpacity(0.2)), + ), ), - Spacer(flex: 2), + const Spacer(flex: 2), Expanded(flex: 90, child: Observer(builder: (_) => buildListViewUser(viewModel))) ], ), @@ -51,17 +52,21 @@ class SocialView extends StatelessWidget { return AppBar( backgroundColor: Colors.transparent, elevation: 0, - leading: FlatButton(onPressed: () {}, padding: EdgeInsets.zero, child: Text(LocaleKeys.home_social_cancel).tr()), + leading: TextButton( + onPressed: () {}, + child: const Text(LocaleKeys.home_social_cancel).tr(), + ), actions: [ - FlatButton( - onPressed: () {}, - child: Text( - LocaleKeys.home_social_next, - style: context.textTheme.subtitle1!.copyWith( - fontWeight: FontWeight.w600, - color: context.appTheme.buttonTheme.colorScheme!.onError, - ), - ).tr()) + TextButton( + onPressed: () {}, + child: Text( + LocaleKeys.home_social_next, + style: context.textTheme.subtitle1!.copyWith( + fontWeight: FontWeight.w600, + color: context.appTheme.buttonTheme.colorScheme!.onError, + ), + ).tr(), + ) ], ); } diff --git a/lib/view/home/social/view/social_view_detial.dart b/lib/view/home/social/view/social_view_detial.dart index 1221655..c9cb0ff 100644 --- a/lib/view/home/social/view/social_view_detial.dart +++ b/lib/view/home/social/view/social_view_detial.dart @@ -1,23 +1,22 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/init/network/vexana_manager.dart'; +import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dart'; +import 'package:fluttermvvmtemplate/view/home/social/service/ISocialService.dart'; +import 'package:fluttermvvmtemplate/view/home/social/service/socail_service.dart'; import 'package:kartal/kartal.dart'; import 'package:vexana/vexana.dart'; -import '../../../../core/init/network/vexana_manager.dart'; -import '../model/social_user_model.dart'; -import '../service/ISocialService.dart'; -import '../service/socail_service.dart'; - class SocialUserViewDetail extends StatelessWidget { - final SocialUser? socialUser; - - final INetworkManager manager = VexanaManager.instance.networkManager; - - ISocialServiceService get socialServiceService => SocailService(manager, null); SocialUserViewDetail({ Key? key, this.socialUser, }) : super(key: key); + final SocialUser? socialUser; + + final INetworkManager manager = VexanaManager.instance.networkManager; + + ISocialServiceService get socialServiceService => SocailService(manager, null); @override Widget build(BuildContext context) { return Scaffold( @@ -26,11 +25,11 @@ class SocialUserViewDetail extends StatelessWidget { onSuccess: (data) { return Center(child: Image.network(data!.image!)); }, - loadingWidget: CircularProgressIndicator(), - notFoundWidget: Center( + loadingWidget: const CircularProgressIndicator(), + notFoundWidget: const Center( child: Text('Not Found'), ), - onError: Text('errro')), + onError: const Text('errro'),), ); } } diff --git a/lib/view/home/social/viewmodel/social_view_model.dart b/lib/view/home/social/viewmodel/social_view_model.dart index 9ef796f..633eb29 100644 --- a/lib/view/home/social/viewmodel/social_view_model.dart +++ b/lib/view/home/social/viewmodel/social_view_model.dart @@ -1,17 +1,17 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/view/_product/_model/query/friend_query.dart'; +import 'package:fluttermvvmtemplate/view/_product/_utilty/thorottle_helper.dart'; +import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dart'; +import 'package:fluttermvvmtemplate/view/home/social/service/ISocialService.dart'; import 'package:mobx/mobx.dart'; -import '../../../../core/base/model/base_view_model.dart'; -import '../../../_product/_model/query/friend_query.dart'; -import '../../../_product/_utilty/thorottle_helper.dart'; -import '../model/social_user_model.dart'; -import '../service/ISocialService.dart'; - part 'social_view_model.g.dart'; class SocialViewModel = _SocialViewModelBase with _$SocialViewModel; abstract class _SocialViewModelBase with Store, BaseViewModel { + _SocialViewModelBase(this._socialService); final ISocialServiceService _socialService; int _page = 0; String? _query = ''; @@ -28,10 +28,8 @@ abstract class _SocialViewModelBase with Store, BaseViewModel { @observable bool isPageLoadingLazyLoad = false; - _SocialViewModelBase(this._socialService); - @override - void setContext(BuildContext? context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; @override void init() { _throttleStringHelper = ThrottleStringHelper(); diff --git a/lib/view/home/social/viewmodel/social_view_model.g.dart b/lib/view/home/social/viewmodel/social_view_model.g.dart index f3b1d93..545e7e6 100644 --- a/lib/view/home/social/viewmodel/social_view_model.g.dart +++ b/lib/view/home/social/viewmodel/social_view_model.g.dart @@ -6,11 +6,11 @@ part of 'social_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$SocialViewModel on _SocialViewModelBase, Store { - final _$socialUserListAtom = - Atom(name: '_SocialViewModelBase.socialUserList'); + late final _$socialUserListAtom = + Atom(name: '_SocialViewModelBase.socialUserList', context: context); @override List get socialUserList { @@ -25,7 +25,8 @@ mixin _$SocialViewModel on _SocialViewModelBase, Store { }); } - final _$isPageLoadingAtom = Atom(name: '_SocialViewModelBase.isPageLoading'); + late final _$isPageLoadingAtom = + Atom(name: '_SocialViewModelBase.isPageLoading', context: context); @override bool get isPageLoading { @@ -40,8 +41,8 @@ mixin _$SocialViewModel on _SocialViewModelBase, Store { }); } - final _$isPageLoadingLazyLoadAtom = - Atom(name: '_SocialViewModelBase.isPageLoadingLazyLoad'); + late final _$isPageLoadingLazyLoadAtom = Atom( + name: '_SocialViewModelBase.isPageLoadingLazyLoad', context: context); @override bool get isPageLoadingLazyLoad { @@ -57,16 +58,16 @@ mixin _$SocialViewModel on _SocialViewModelBase, Store { }); } - final _$_fetchAllUserAsyncAction = - AsyncAction('_SocialViewModelBase._fetchAllUser'); + late final _$_fetchAllUserAsyncAction = + AsyncAction('_SocialViewModelBase._fetchAllUser', context: context); @override Future _fetchAllUser() { return _$_fetchAllUserAsyncAction.run(() => super._fetchAllUser()); } - final _$fetchAllUserLoadingAsyncAction = - AsyncAction('_SocialViewModelBase.fetchAllUserLoading'); + late final _$fetchAllUserLoadingAsyncAction = + AsyncAction('_SocialViewModelBase.fetchAllUserLoading', context: context); @override Future fetchAllUserLoading(int index) { @@ -74,8 +75,8 @@ mixin _$SocialViewModel on _SocialViewModelBase, Store { .run(() => super.fetchAllUserLoading(index)); } - final _$_SocialViewModelBaseActionController = - ActionController(name: '_SocialViewModelBase'); + late final _$_SocialViewModelBaseActionController = + ActionController(name: '_SocialViewModelBase', context: context); @override void fetchAllSearchQuery(String text) { diff --git a/lib/view/settings/model/settings_dynamic.dart b/lib/view/settings/model/settings_dynamic.dart index b93289d..4f57900 100644 --- a/lib/view/settings/model/settings_dynamic.dart +++ b/lib/view/settings/model/settings_dynamic.dart @@ -1,12 +1,10 @@ class SettingsDynamicModel { - final String? url; - final String title; SettingsDynamicModel(this.title, {this.url}); factory SettingsDynamicModel.fakeArchitecturePR() { return SettingsDynamicModel('Project Contributors', - url: 'https://github.com/VB10/flutter-architecture-template/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc'); + url: 'https://github.com/VB10/flutter-architecture-template/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc',); } factory SettingsDynamicModel.fakeNull() { @@ -14,4 +12,6 @@ class SettingsDynamicModel { 'Project Contributors', ); } + final String? url; + final String title; } diff --git a/lib/view/settings/view/settings_view.dart b/lib/view/settings/view/settings_view.dart index b9d96f2..9724b3b 100644 --- a/lib/view/settings/view/settings_view.dart +++ b/lib/view/settings/view/settings_view.dart @@ -1,18 +1,17 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:fluttermvvmtemplate/core/base/view/base_widget.dart'; +import 'package:fluttermvvmtemplate/core/constants/enums/app_theme_enum.dart'; +import 'package:fluttermvvmtemplate/core/extension/widget_extension.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/language_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/locale_keys.g.dart'; +import 'package:fluttermvvmtemplate/core/init/notifier/theme_notifer.dart'; +import 'package:fluttermvvmtemplate/product/enum/lottie_path_enum.dart'; +import 'package:fluttermvvmtemplate/view/settings/viewmodel/settings_view_model.dart'; import 'package:kartal/kartal.dart'; import 'package:provider/provider.dart'; -import '../../../core/base/view/base_widget.dart'; -import '../../../core/constants/enums/app_theme_enum.dart'; -import '../../../core/extension/widget_extension.dart'; -import '../../../core/init/lang/language_manager.dart'; -import '../../../core/init/lang/locale_keys.g.dart'; -import '../../../core/init/notifier/theme_notifer.dart'; -import '../../../product/enum/lottie_path_enum.dart'; -import '../viewmodel/settings_view_model.dart'; - class SettingsView extends StatelessWidget { @override Widget build(BuildContext context) { @@ -37,7 +36,7 @@ class SettingsView extends StatelessWidget { buildCardAbout(context, viewModel).toSliver, context.emptySizedHeightBoxNormal.toSliver, Text( - '${''.version}', + ''.version, textAlign: TextAlign.center, style: context.textTheme.headline6?.copyWith(fontWeight: FontWeight.w100), ).toSliver, @@ -55,19 +54,19 @@ class SettingsView extends StatelessWidget { child: ListTile( onTap: viewModel.navigateToOnBoard, title: Text(LocaleKeys.home_setting_applicationTour.tr()), - trailing: Icon(Icons.arrow_right), - )); + trailing: const Icon(Icons.arrow_right), + ),); } TextButton buildTextButtonLogOut(BuildContext context, SettingsViewModel viewModel) { return TextButton.icon( style: ButtonStyle( - shape: MaterialStateProperty.all(StadiumBorder()), + shape: MaterialStateProperty.all(const StadiumBorder()), padding: MaterialStateProperty.all(context.paddingNormal), - backgroundColor: MaterialStateProperty.all(context.colorScheme.onError.withOpacity(0.7))), + backgroundColor: MaterialStateProperty.all(context.colorScheme.onError.withOpacity(0.7)),), onPressed: viewModel.logutApp, - icon: Icon(Icons.exit_to_app), - label: Text(LocaleKeys.home_setting_exit.tr())); + icon: const Icon(Icons.exit_to_app), + label: Text(LocaleKeys.home_setting_exit.tr()),); } Widget buildBuildCardHeaderProjectCore(BuildContext context, SettingsViewModel viewModel) { @@ -76,27 +75,27 @@ class SettingsView extends StatelessWidget { title: Text(LocaleKeys.home_setting_core_themeTitle.tr()), trailing: IconButton( icon: context.watch().currenThemeEnum == AppThemes.LIGHT ? LottiePathEnum.MOON.toWidget : LottiePathEnum.SUNNY.toWidget, - onPressed: viewModel.changeAppTheme), - subtitle: Text(LocaleKeys.home_setting_core_themeDesc), + onPressed: viewModel.changeAppTheme,), + subtitle: const Text(LocaleKeys.home_setting_core_themeDesc), ), ListTile( title: Text(LocaleKeys.home_setting_core_langTitle.tr()), trailing: Observer(builder: (_) { return DropdownButton(items: [ - DropdownMenuItem(child: Text(LanguageManager.instance.trLocale.countryCode!.toUpperCase()), value: LanguageManager.instance.trLocale), - DropdownMenuItem(child: Text(LanguageManager.instance.enLocale.countryCode!.toUpperCase()), value: LanguageManager.instance.enLocale), - ], onChanged: viewModel.changeAppLocalization, value: viewModel.appLocale); - }), + DropdownMenuItem(value: LanguageManager.instance.trLocale, child: Text(LanguageManager.instance.trLocale.countryCode!.toUpperCase())), + DropdownMenuItem(value: LanguageManager.instance.enLocale, child: Text(LanguageManager.instance.enLocale.countryCode!.toUpperCase())), + ], onChanged: viewModel.changeAppLocalization, value: viewModel.appLocale,); + },), subtitle: Text(LocaleKeys.home_setting_core_langDesc.tr()), ), - ]); + ],); } Widget buildCardHeader(BuildContext context, SettingsViewModel viewModel, {required String title, required List children}) { return Card( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [Padding(padding: context.paddingLow, child: Text(title.tr(), style: context.textTheme.headline5)), Divider(), ...children], + children: [Padding(padding: context.paddingLow, child: Text(title.tr(), style: context.textTheme.headline5)), const Divider(), ...children], ), ); } @@ -105,17 +104,17 @@ class SettingsView extends StatelessWidget { return buildCardHeader(context, viewModel, title: LocaleKeys.home_setting_about_title, children: [ ListTile( onTap: viewModel.navigateToContribution, - leading: Icon(Icons.favorite), + leading: const Icon(Icons.favorite), title: Text(LocaleKeys.home_setting_about_contribitions.tr()), - trailing: Icon(Icons.keyboard_arrow_right_outlined), + trailing: const Icon(Icons.keyboard_arrow_right_outlined), ), ListTile( onTap: viewModel.navigateToFakeContribution, - leading: Icon(Icons.home), - title: Text('Home Page'), - trailing: Icon(Icons.keyboard_arrow_right_outlined), + leading: const Icon(Icons.home), + title: const Text('Home Page'), + trailing: const Icon(Icons.keyboard_arrow_right_outlined), ) - ]); + ],); } Card buildCardUser(BuildContext context, SettingsViewModel viewModel) { @@ -124,10 +123,10 @@ class SettingsView extends StatelessWidget { padding: context.paddingLow, child: Row( children: [ - CircleAvatar(child: Text(viewModel.userModel.shortName), radius: 30), - Spacer(), + CircleAvatar(radius: 30, child: Text(viewModel.userModel.shortName)), + const Spacer(), Text(viewModel.userModel.fullName), - Spacer(flex: 5), + const Spacer(flex: 5), ], ), ), @@ -139,7 +138,7 @@ class SettingsView extends StatelessWidget { headerSliverBuilder: (context, innerBoxIsScrolled) { return [buildSliverAppBar(context)]; }, - body: Column()); + body: Column(),); } SliverAppBar buildSliverAppBar(BuildContext context) { diff --git a/lib/view/settings/view/subview/settings_dynamic_view.dart b/lib/view/settings/view/subview/settings_dynamic_view.dart index e336a61..83ed60c 100644 --- a/lib/view/settings/view/subview/settings_dynamic_view.dart +++ b/lib/view/settings/view/subview/settings_dynamic_view.dart @@ -1,14 +1,13 @@ import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/constants/app/app_constants.dart'; +import 'package:fluttermvvmtemplate/view/settings/model/settings_dynamic.dart'; import 'package:kartal/kartal.dart'; import 'package:webview_flutter/webview_flutter.dart'; -import '../../../../core/constants/app/app_constants.dart'; -import '../../model/settings_dynamic.dart'; - class SettingsDynamicView extends StatelessWidget { - final SettingsDynamicModel model; const SettingsDynamicView({Key? key, required this.model}) : super(key: key); + final SettingsDynamicModel model; @override Widget build(BuildContext context) { return Scaffold( diff --git a/lib/view/settings/viewmodel/settings_view_model.dart b/lib/view/settings/viewmodel/settings_view_model.dart index 174586a..3ee765d 100644 --- a/lib/view/settings/viewmodel/settings_view_model.dart +++ b/lib/view/settings/viewmodel/settings_view_model.dart @@ -1,15 +1,14 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:fluttermvvmtemplate/core/base/model/base_view_model.dart'; +import 'package:fluttermvvmtemplate/core/constants/navigation/navigation_constants.dart'; +import 'package:fluttermvvmtemplate/core/init/lang/language_manager.dart'; +import 'package:fluttermvvmtemplate/core/init/notifier/theme_notifer.dart'; +import 'package:fluttermvvmtemplate/product/model/user.dart'; +import 'package:fluttermvvmtemplate/view/settings/model/settings_dynamic.dart'; import 'package:mobx/mobx.dart'; import 'package:provider/provider.dart'; -import '../../../core/base/model/base_view_model.dart'; -import '../../../core/constants/navigation/navigation_constants.dart'; -import '../../../core/init/lang/language_manager.dart'; -import '../../../core/init/notifier/theme_notifer.dart'; -import '../../../product/model/user.dart'; -import '../model/settings_dynamic.dart'; - part 'settings_view_model.g.dart'; part 'subviewmodel/about_view_model.dart'; @@ -18,7 +17,7 @@ class SettingsViewModel = _SettingsViewModelBase with _$SettingsViewModel; abstract class _SettingsViewModelBase with Store, BaseViewModel { final userModel = UserModel.fake(); @override - void setContext(BuildContext context) => this.context = context; + void setContext(BuildContext context) => viewModelContext = context; @observable Locale? appLocale = LanguageManager.instance.enLocale; @@ -27,16 +26,14 @@ abstract class _SettingsViewModelBase with Store, BaseViewModel { void init() {} void changeAppTheme() { - if (context != null) { - context!.read().changeTheme(); - } + viewModelContext.read().changeTheme(); } @action void changeAppLocalization(Locale? locale) { if (locale != null) { appLocale = locale; - context?.setLocale(locale); + viewModelContext.setLocale(locale); } } diff --git a/lib/view/settings/viewmodel/settings_view_model.g.dart b/lib/view/settings/viewmodel/settings_view_model.g.dart index b193383..79b181d 100644 --- a/lib/view/settings/viewmodel/settings_view_model.g.dart +++ b/lib/view/settings/viewmodel/settings_view_model.g.dart @@ -6,10 +6,11 @@ part of 'settings_view_model.dart'; // StoreGenerator // ************************************************************************** -// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic +// ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic, no_leading_underscores_for_local_identifiers mixin _$SettingsViewModel on _SettingsViewModelBase, Store { - final _$appLocaleAtom = Atom(name: '_SettingsViewModelBase.appLocale'); + late final _$appLocaleAtom = + Atom(name: '_SettingsViewModelBase.appLocale', context: context); @override Locale? get appLocale { @@ -24,8 +25,8 @@ mixin _$SettingsViewModel on _SettingsViewModelBase, Store { }); } - final _$_SettingsViewModelBaseActionController = - ActionController(name: '_SettingsViewModelBase'); + late final _$_SettingsViewModelBaseActionController = + ActionController(name: '_SettingsViewModelBase', context: context); @override void changeAppLocalization(Locale? locale) { diff --git a/module/all_of_template/.vscode/settings.json b/module/all_of_template/.vscode/settings.json new file mode 100644 index 0000000..3a15aca --- /dev/null +++ b/module/all_of_template/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "kartal" + ] +} \ No newline at end of file diff --git a/module/all_of_template/analysis_options.yaml b/module/all_of_template/analysis_options.yaml new file mode 100644 index 0000000..df989ed --- /dev/null +++ b/module/all_of_template/analysis_options.yaml @@ -0,0 +1,17 @@ +include: package:very_good_analysis/analysis_options.yaml + + +analyzer: + exclude: + - "**/*.g.dart" + - "**/*.freezed.dart" + - "test/.test_coverage.dart" + - "bin/cache/**" + - "lib/generated_plugin_registrant.dart" + - test + - assets/translations + +linter: + rules: + public_member_api_docs: false + library_private_types_in_public_api: false \ No newline at end of file diff --git a/module/all_of_template/lib/features/buy_view.dart b/module/all_of_template/lib/features/buy_view.dart index 077b3ac..89ab74a 100644 --- a/module/all_of_template/lib/features/buy_view.dart +++ b/module/all_of_template/lib/features/buy_view.dart @@ -26,9 +26,9 @@ class _BuyViewState extends State { TextButton goNextPage() { return TextButton( onPressed: () { - context.navigateToPage(NextPage()); + context.navigateToPage(const NextPage()); }, - child: Text('Go'), + child: const Text('Go'), ); } @@ -37,7 +37,7 @@ class _BuyViewState extends State { onPressed: () { Navigator.of(context).pop(); }, - child: Icon(Icons.arrow_back), + child: const Icon(Icons.arrow_back), ); } diff --git a/module/all_of_template/pubspec.lock b/module/all_of_template/pubspec.lock index b1c6d44..c7b8b77 100644 --- a/module/all_of_template/pubspec.lock +++ b/module/all_of_template/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" boolean_selector: dependency: transitive description: @@ -21,28 +21,21 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" - charcode: - dependency: transitive - description: - name: charcode - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.1" + version: "1.2.1" clock: dependency: transitive description: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0" + version: "1.16.0" device_info: dependency: transitive description: @@ -63,7 +56,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.1" flutter: dependency: "direct main" description: flutter @@ -85,7 +78,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3" + version: "0.6.4" kartal: dependency: "direct main" description: @@ -106,14 +99,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: @@ -134,7 +134,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.2" pedantic: dependency: transitive description: @@ -167,7 +167,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.9.0" stack_trace: dependency: transitive description: @@ -188,28 +188,21 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.3" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" + version: "0.4.12" url_launcher: dependency: transitive description: @@ -258,7 +251,14 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" + very_good_analysis: + dependency: "direct dev" + description: + name: very_good_analysis + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" sdks: - dart: ">=2.14.0 <3.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=2.0.0" diff --git a/module/all_of_template/pubspec.yaml b/module/all_of_template/pubspec.yaml index 65ceff3..3f356ba 100644 --- a/module/all_of_template/pubspec.yaml +++ b/module/all_of_template/pubspec.yaml @@ -1,7 +1,7 @@ name: all_of_template description: A new Flutter package project. version: 0.0.1 -homepage: +homepage: home environment: sdk: ">=2.12.0 <3.0.0" @@ -16,6 +16,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + + very_good_analysis: ^3.1.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/module/architecture_widgets/analysis_options.yaml b/module/architecture_widgets/analysis_options.yaml new file mode 100644 index 0000000..df989ed --- /dev/null +++ b/module/architecture_widgets/analysis_options.yaml @@ -0,0 +1,17 @@ +include: package:very_good_analysis/analysis_options.yaml + + +analyzer: + exclude: + - "**/*.g.dart" + - "**/*.freezed.dart" + - "test/.test_coverage.dart" + - "bin/cache/**" + - "lib/generated_plugin_registrant.dart" + - test + - assets/translations + +linter: + rules: + public_member_api_docs: false + library_private_types_in_public_api: false \ No newline at end of file diff --git a/module/architecture_widgets/lib/src/button/icon_button.dart b/module/architecture_widgets/lib/src/button/icon_button.dart index 2f6c539..7b3f322 100644 --- a/module/architecture_widgets/lib/src/button/icon_button.dart +++ b/module/architecture_widgets/lib/src/button/icon_button.dart @@ -1,12 +1,13 @@ +import 'package:architecture_widgets/src/button/normal_button.dart'; import 'package:flutter/material.dart'; -import 'normal_button.dart'; - class IconNormalButton extends StatelessWidget { + const IconNormalButton({Key? key, this.onPressed, required this.icon}) + : super( + key: key, + ); final VoidCallback? onPressed; final IconData icon; - - const IconNormalButton({Key? key, this.onPressed, required this.icon}) : super(key: key); @override Widget build(BuildContext context) { return NormalButton( diff --git a/module/architecture_widgets/lib/src/button/normal_button.dart b/module/architecture_widgets/lib/src/button/normal_button.dart index f3db31c..a969a9b 100644 --- a/module/architecture_widgets/lib/src/button/normal_button.dart +++ b/module/architecture_widgets/lib/src/button/normal_button.dart @@ -1,16 +1,15 @@ import 'package:flutter/material.dart'; class NormalButton extends StatelessWidget { + const NormalButton({Key? key, this.child, this.onPressed}) : super(key: key); final Widget? child; final VoidCallback? onPressed; - - const NormalButton({Key? key, this.child, this.onPressed}) : super(key: key); @override Widget build(BuildContext context) { return ElevatedButton( style: ButtonStyle( - padding: MaterialStateProperty.all(EdgeInsets.all(15)), + padding: MaterialStateProperty.all(const EdgeInsets.all(15)), elevation: MaterialStateProperty.all(10), ), onPressed: onPressed, diff --git a/module/architecture_widgets/lib/src/button/title_text_button.dart b/module/architecture_widgets/lib/src/button/title_text_button.dart index a918f5a..99dd13e 100644 --- a/module/architecture_widgets/lib/src/button/title_text_button.dart +++ b/module/architecture_widgets/lib/src/button/title_text_button.dart @@ -1,12 +1,13 @@ +import 'package:architecture_widgets/src/button/normal_button.dart'; import 'package:flutter/material.dart'; -import 'normal_button.dart'; - class TitleTextButton extends StatelessWidget { + const TitleTextButton({Key? key, this.onPressed, required this.text}) + : super( + key: key, + ); final VoidCallback? onPressed; final String text; - - const TitleTextButton({Key? key, this.onPressed, required this.text}) : super(key: key); @override Widget build(BuildContext context) { return NormalButton( diff --git a/module/architecture_widgets/lib/src/card/not_found_navigation_widget.dart b/module/architecture_widgets/lib/src/card/not_found_navigation_widget.dart index d01e7e1..3f63ed9 100644 --- a/module/architecture_widgets/lib/src/card/not_found_navigation_widget.dart +++ b/module/architecture_widgets/lib/src/card/not_found_navigation_widget.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; class NotFoundNavigationWidget extends StatelessWidget { + const NotFoundNavigationWidget({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { - return Scaffold( + return const Scaffold( body: Text('Not Found'), ); } diff --git a/module/architecture_widgets/lib/src/column/form_column.dart b/module/architecture_widgets/lib/src/column/form_column.dart index 535e665..2d64e75 100644 --- a/module/architecture_widgets/lib/src/column/form_column.dart +++ b/module/architecture_widgets/lib/src/column/form_column.dart @@ -1,21 +1,20 @@ import 'package:flutter/material.dart'; class FormColumn extends StatelessWidget { - final List? children; - const FormColumn({Key? key, this.children}) : super(key: key); + final List? children; @override Widget build(BuildContext context) { return Row( children: [ - Spacer(flex: 1), + const Spacer(), Expanded( flex: 8, child: Column( children: children!, ), ), - Spacer(flex: 1), + const Spacer(), ], ); } diff --git a/module/architecture_widgets/lib/src/container/random_color_container.dart b/module/architecture_widgets/lib/src/container/random_color_container.dart index 4cd47e5..bebc948 100644 --- a/module/architecture_widgets/lib/src/container/random_color_container.dart +++ b/module/architecture_widgets/lib/src/container/random_color_container.dart @@ -3,8 +3,10 @@ import 'dart:math'; import 'package:flutter/material.dart'; class RandomColorContainer extends StatelessWidget { + const RandomColorContainer({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { - return Container(color: Colors.primaries[Random().nextInt(17)]); + return ColoredBox(color: Colors.primaries[Random().nextInt(17)]); } } diff --git a/module/architecture_widgets/lib/src/decoration/circle_decoration.dart b/module/architecture_widgets/lib/src/decoration/circle_decoration.dart index 79a0be9..1794681 100644 --- a/module/architecture_widgets/lib/src/decoration/circle_decoration.dart +++ b/module/architecture_widgets/lib/src/decoration/circle_decoration.dart @@ -1,28 +1,30 @@ import 'package:flutter/material.dart'; class CircleDecoration extends Decoration { - final BoxPainter _painter; - CircleDecoration({required Color color, required double radius}) : _painter = _CirclePainter(color, radius); + final BoxPainter _painter; @override BoxPainter createBoxPainter([VoidCallback? onChanged]) => _painter; } class _CirclePainter extends BoxPainter { - final Paint _paint; - final double radius; - - late Offset circleOffset; - _CirclePainter(Color color, this.radius) : _paint = Paint() ..color = color ..isAntiAlias = true; + final Paint _paint; + final double radius; + + late Offset circleOffset; @override void paint(Canvas canvas, Offset offset, ImageConfiguration cfg) { - circleOffset = offset + Offset(cfg.size!.width / 2, cfg.size!.height - radius - 5); + circleOffset = offset + + Offset( + cfg.size!.width / 2, + cfg.size!.height - radius - 5, + ); canvas.drawCircle(circleOffset, radius, _paint); } } diff --git a/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart b/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart index 8db33b3..c67b52c 100644 --- a/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart +++ b/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart @@ -1,28 +1,25 @@ import 'package:flutter/material.dart'; class IndactorListView extends StatelessWidget { + const IndactorListView({Key? key, this.itemCount, this.onListItem, this.currentIndex}) : super(key: key); final int? itemCount; final int? currentIndex; final Widget Function(int index)? onListItem; - - const IndactorListView( - {Key? key, this.itemCount, this.onListItem, this.currentIndex}) - : super(key: key); @override Widget build(BuildContext context) { return ListView.builder( scrollDirection: Axis.horizontal, itemCount: itemCount, shrinkWrap: true, - itemBuilder: (context, index) => buildPadding(context, index), + itemBuilder: buildPadding, ); } Padding buildPadding(BuildContext context, int index) { return Padding( - padding: EdgeInsets.all(5), + padding: const EdgeInsets.all(5), child: buildCircleAvatar(index, context), ); } @@ -30,12 +27,10 @@ class IndactorListView extends StatelessWidget { CircleAvatar buildCircleAvatar(int index, BuildContext context) { return CircleAvatar( backgroundColor: isCurrentIndex(index) ? Colors.black12 : Colors.blue, - radius: isCurrentIndex(index) - ? _pageWidth(context) * 0.03 - : _pageWidth(context) * 0.015, + radius: isCurrentIndex(index) ? _pageWidth(context) * 0.03 : _pageWidth(context) * 0.015, child: AnimatedOpacity( opacity: opacityValue(index), - duration: Duration(seconds: 1), + duration: const Duration(seconds: 1), child: onListItem!(index), ), ); diff --git a/module/architecture_widgets/lib/src/slider/range_price_slider.dart b/module/architecture_widgets/lib/src/slider/range_price_slider.dart index b16198c..3dff734 100644 --- a/module/architecture_widgets/lib/src/slider/range_price_slider.dart +++ b/module/architecture_widgets/lib/src/slider/range_price_slider.dart @@ -1,12 +1,11 @@ import 'package:flutter/material.dart'; class RangePriceSLider extends StatefulWidget { + const RangePriceSLider({Key? key, required this.min, required this.max, required this.onCompleted}) : super(key: key); final double min; final double max; final void Function(RangeValues values) onCompleted; - - const RangePriceSLider({Key? key, required this.min, required this.max, required this.onCompleted}) : super(key: key); @override _RangePriceSLiderState createState() => _RangePriceSLiderState(); } diff --git a/module/architecture_widgets/lib/src/text/auto_locale_text.dart b/module/architecture_widgets/lib/src/text/auto_locale_text.dart index a8c23a1..4c9c73d 100644 --- a/module/architecture_widgets/lib/src/text/auto_locale_text.dart +++ b/module/architecture_widgets/lib/src/text/auto_locale_text.dart @@ -4,13 +4,10 @@ import 'package:flutter/material.dart'; import 'package:fluttermvvmtemplate/core/extension/string_extension.dart'; class AutoLocaleText extends StatelessWidget { + const AutoLocaleText({Key? key, required this.value, this.textAlign, this.style}) : super(key: key); final String value; final TextAlign? textAlign; final TextStyle? style; - - const AutoLocaleText( - {Key? key, required this.value, this.textAlign, this.style}) - : super(key: key); @override Widget build(BuildContext context) { return AutoSizeText( diff --git a/module/architecture_widgets/pubspec.lock b/module/architecture_widgets/pubspec.lock index a6f474c..a92ef3a 100644 --- a/module/architecture_widgets/pubspec.lock +++ b/module/architecture_widgets/pubspec.lock @@ -1,6 +1,13 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.6" all_of_template: dependency: transitive description: @@ -37,21 +44,21 @@ packages: name: args url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.3.1" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" auto_size_text: dependency: transitive description: name: auto_size_text url: "https://pub.dartlang.org" source: hosted - version: "3.0.0-nullsafety.0" + version: "3.0.0" boolean_selector: dependency: transitive description: @@ -72,7 +79,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: @@ -86,14 +93,70 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "5.8.3" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0" + version: "1.16.0" + connectivity_plus: + dependency: transitive + description: + name: connectivity_plus + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.9" + connectivity_plus_linux: + dependency: transitive + description: + name: connectivity_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + connectivity_plus_macos: + dependency: transitive + description: + name: connectivity_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.6" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.3" + connectivity_plus_web: + dependency: transitive + description: + name: connectivity_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.5" + connectivity_plus_windows: + dependency: transitive + description: + name: connectivity_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.2" crypto: dependency: transitive description: @@ -108,6 +171,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.3" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.4" device_info: dependency: transitive description: @@ -128,14 +198,14 @@ packages: name: dio url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.6" easy_localization: dependency: transitive description: name: easy_localization url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" easy_logger: dependency: transitive description: @@ -143,13 +213,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.2" + equatable: + dependency: transitive + description: + name: equatable + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.1" ffi: dependency: transitive description: @@ -170,42 +247,42 @@ packages: name: firebase_analytics url: "https://pub.dartlang.org" source: hosted - version: "9.0.5" + version: "10.0.3" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.3.11" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web url: "https://pub.dartlang.org" source: hosted - version: "0.4.0+5" + version: "0.5.1+2" firebase_core: dependency: transitive description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.11.0" + version: "2.1.1" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.2.3" + version: "4.5.2" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "1.5.3" + version: "2.0.1" flutter: dependency: "direct main" description: flutter @@ -250,7 +327,7 @@ packages: name: flutter_svg url: "https://pub.dartlang.org" source: hosted - version: "0.21.0+1" + version: "1.1.6" flutter_test: dependency: "direct dev" description: flutter @@ -295,7 +372,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3" + version: "0.6.4" kartal: dependency: transitive description: @@ -316,7 +393,7 @@ packages: name: lottie url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.4.3" mask_text_input_formatter: dependency: transitive description: @@ -330,14 +407,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: @@ -359,6 +443,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" octo_image: dependency: transitive description: @@ -379,21 +470,21 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing url: "https://pub.dartlang.org" source: hosted - version: "0.5.1" + version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing url: "https://pub.dartlang.org" source: hosted - version: "0.2.1" + version: "1.0.1" path_provider: dependency: transitive description: @@ -442,7 +533,7 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "5.1.0" platform: dependency: transitive description: @@ -456,7 +547,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.1.3" process: dependency: transitive description: @@ -470,7 +561,14 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "5.0.0" + version: "6.0.4" + retry: + dependency: transitive + description: + name: retry + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" rxdart: dependency: transitive description: @@ -552,7 +650,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.9.0" sqflite: dependency: transitive description: @@ -587,7 +685,7 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" synchronized: dependency: transitive description: @@ -601,14 +699,14 @@ packages: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.3" + version: "0.4.12" typed_data: dependency: transitive description: @@ -671,21 +769,49 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" + very_good_analysis: + dependency: "direct dev" + description: + name: very_good_analysis + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" vexana: dependency: transitive description: name: vexana url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "3.0.1" webview_flutter: dependency: transitive description: name: webview_flutter url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "3.0.4" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.10.4" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.5" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.5" win32: dependency: transitive description: @@ -706,7 +832,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.1.2" + version: "6.1.0" sdks: - dart: ">=2.14.0 <3.0.0" - flutter: ">=2.0.0" + dart: ">=2.18.0 <3.0.0" + flutter: ">=3.3.0" diff --git a/module/architecture_widgets/pubspec.yaml b/module/architecture_widgets/pubspec.yaml index 61376fb..3e3bf75 100644 --- a/module/architecture_widgets/pubspec.yaml +++ b/module/architecture_widgets/pubspec.yaml @@ -1,7 +1,7 @@ name: architecture_widgets description: A new Flutter package project. version: 0.0.1 -homepage: +homepage: home environment: sdk: ">=2.12.0 <3.0.0" @@ -12,11 +12,13 @@ dependencies: sdk: flutter fluttermvvmtemplate: - path: ../../ + path: ../../ dev_dependencies: flutter_test: sdk: flutter + very_good_analysis: ^3.1.0 + flutter: \ No newline at end of file diff --git a/module/architecture_widgets/test/architecture_widgets_test.dart b/module/architecture_widgets/test/architecture_widgets_test.dart index e47ea77..835f8c7 100644 --- a/module/architecture_widgets/test/architecture_widgets_test.dart +++ b/module/architecture_widgets/test/architecture_widgets_test.dart @@ -1,6 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:architecture_widgets/architecture_widgets.dart'; void main() { test('adds one to input values', () { diff --git a/pubspec.lock b/pubspec.lock index 7be11d6..65db1d8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "20.0.0" + version: "47.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.6" all_of_template: dependency: "direct main" description: @@ -21,7 +28,7 @@ packages: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "1.4.0" + version: "4.7.0" animations: dependency: "direct main" description: @@ -58,14 +65,14 @@ packages: name: args url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.3.1" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" auto_size_text: dependency: "direct main" description: @@ -86,56 +93,56 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.3.1" build_config: dependency: transitive description: name: build_config url: "https://pub.dartlang.org" source: hosted - version: "0.4.7" + version: "1.1.1" build_daemon: dependency: transitive description: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "2.1.10" + version: "3.1.0" build_resolvers: dependency: transitive description: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.10" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "1.12.2" + version: "2.3.2" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "6.1.12" + version: "7.2.7" built_collection: dependency: transitive description: name: built_collection url: "https://pub.dartlang.org" source: hosted - version: "4.3.2" + version: "5.1.1" built_value: dependency: transitive description: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "8.4.2" cached_network_image: dependency: "direct main" description: @@ -149,7 +156,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: @@ -164,34 +171,83 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.1" - cli_util: + clock: dependency: transitive description: - name: cli_util + name: clock url: "https://pub.dartlang.org" source: hosted - version: "0.3.0" - clock: + version: "1.1.1" + cloud_firestore_platform_interface: dependency: transitive description: - name: clock + name: cloud_firestore_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "5.8.3" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.3" code_builder: dependency: transitive description: name: code_builder url: "https://pub.dartlang.org" source: hosted - version: "3.7.0" + version: "4.3.0" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0" + version: "1.16.0" + connectivity_plus: + dependency: transitive + description: + name: connectivity_plus + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.9" + connectivity_plus_linux: + dependency: transitive + description: + name: connectivity_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + connectivity_plus_macos: + dependency: transitive + description: + name: connectivity_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.6" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.3" + connectivity_plus_web: + dependency: transitive + description: + name: connectivity_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.5" + connectivity_plus_windows: + dependency: transitive + description: + name: connectivity_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.2" convert: dependency: transitive description: @@ -219,7 +275,14 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.2.4" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.4" device_info: dependency: transitive description: @@ -240,14 +303,14 @@ packages: name: dio url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.6" easy_localization: dependency: "direct main" description: name: easy_localization url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" easy_logger: dependency: transitive description: @@ -255,20 +318,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.2" + equatable: + dependency: "direct main" + description: + name: equatable + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" fake_async: dependency: transitive description: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.1" ffi: dependency: transitive description: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.2.1" file: dependency: transitive description: @@ -282,49 +352,49 @@ packages: name: firebase_analytics url: "https://pub.dartlang.org" source: hosted - version: "9.0.5" + version: "10.0.3" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.3.11" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web url: "https://pub.dartlang.org" source: hosted - version: "0.4.0+5" + version: "0.5.1+2" firebase_core: dependency: "direct main" description: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.11.0" + version: "2.1.1" firebase_core_platform_interface: dependency: transitive description: name: firebase_core_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "4.2.3" + version: "4.5.2" firebase_core_web: dependency: transitive description: name: firebase_core_web url: "https://pub.dartlang.org" source: hosted - version: "1.5.3" + version: "2.0.1" fixnum: dependency: transitive description: name: fixnum url: "https://pub.dartlang.org" source: hosted - version: "0.10.11" + version: "1.0.1" flutter: dependency: "direct main" description: flutter @@ -369,7 +439,7 @@ packages: name: flutter_svg url: "https://pub.dartlang.org" source: hosted - version: "0.21.0+1" + version: "1.1.6" flutter_test: dependency: "direct dev" description: flutter @@ -380,6 +450,13 @@ packages: description: flutter source: sdk version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" glob: dependency: transitive description: @@ -393,7 +470,7 @@ packages: name: graphs url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "2.2.0" http: dependency: transitive description: @@ -407,7 +484,7 @@ packages: name: http_multi_server url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "3.2.1" http_parser: dependency: transitive description: @@ -421,7 +498,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.2.2" intl: dependency: transitive description: @@ -435,28 +512,28 @@ packages: name: io url: "https://pub.dartlang.org" source: hosted - version: "0.3.4" + version: "1.0.3" js: dependency: transitive description: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3" + version: "0.6.4" json_annotation: dependency: "direct dev" description: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.7.0" json_serializable: dependency: "direct dev" description: name: json_serializable url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "6.5.4" kartal: dependency: "direct main" description: @@ -484,7 +561,7 @@ packages: name: lottie url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.4.3" mask_text_input_formatter: dependency: transitive description: @@ -498,14 +575,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: @@ -519,21 +603,21 @@ packages: name: mobx url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.1.1" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen url: "https://pub.dartlang.org" source: hosted - version: "2.0.1+3" + version: "2.0.7+3" mockito: dependency: "direct dev" description: name: mockito url: "https://pub.dartlang.org" source: hosted - version: "5.0.7" + version: "5.3.2" nested: dependency: transitive description: @@ -541,6 +625,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" + nm: + dependency: transitive + description: + name: nm + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.0" octo_image: dependency: transitive description: @@ -568,21 +659,21 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing url: "https://pub.dartlang.org" source: hosted - version: "0.5.0" + version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "1.0.1" path_provider: dependency: transitive description: @@ -619,7 +710,7 @@ packages: source: hosted version: "2.0.0" pedantic: - dependency: "direct dev" + dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" @@ -631,7 +722,7 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "5.1.0" platform: dependency: transitive description: @@ -645,7 +736,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.3" pool: dependency: transitive description: @@ -666,7 +757,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "5.0.0" + version: "6.0.4" pub_semver: dependency: transitive description: @@ -681,13 +772,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.0" - quiver: + retry: dependency: transitive description: - name: quiver + name: retry url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "3.1.0" rxdart: dependency: transitive description: @@ -783,14 +874,21 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.2.6" + source_helper: + dependency: transitive + description: + name: source_helper + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.3" source_span: dependency: transitive description: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.9.0" sqflite: dependency: transitive description: @@ -832,7 +930,7 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" synchronized: dependency: transitive description: @@ -846,14 +944,14 @@ packages: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.3" + version: "0.4.12" timing: dependency: transitive description: @@ -923,14 +1021,21 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" + very_good_analysis: + dependency: "direct dev" + description: + name: very_good_analysis + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" vexana: dependency: "direct main" description: name: vexana url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "3.0.1" watcher: dependency: transitive description: @@ -951,7 +1056,28 @@ packages: name: webview_flutter url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "3.0.4" + webview_flutter_android: + dependency: transitive + description: + name: webview_flutter_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.10.4" + webview_flutter_platform_interface: + dependency: transitive + description: + name: webview_flutter_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.5" + webview_flutter_wkwebview: + dependency: transitive + description: + name: webview_flutter_wkwebview + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.5" win32: dependency: transitive description: @@ -972,7 +1098,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.1.0" + version: "6.1.0" yaml: dependency: transitive description: @@ -981,5 +1107,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=2.14.0 <3.0.0" - flutter: ">=1.24.0-10.2.pre" + dart: ">=2.18.0 <3.0.0" + flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index 9c9604e..c5c2434 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,11 +15,12 @@ dependencies: # state management flutter_mobx: ^2.0.0 mobx: ^2.0.1 - provider: ^5.0.0 + provider: ^6.0.4 + # network # dio: ^4.0.0-prev3 - vexana: ^2.2.0 + vexana: ^3.0.1 # database shared_preferences: ^2.0.5 @@ -28,21 +29,22 @@ dependencies: easy_localization: ^3.0.0 # firebase - firebase_core: ^1.11.0 + firebase_core: ^2.1.1 firebase_analytics: any # core utilities kartal: ^2.1.0 logger: ^1.0.0 - webview_flutter: ^2.0.4 + webview_flutter: ^3.0.4 + equatable: ^2.0.5 # ui utilities animations: ^2.0.0 - auto_size_text: ^3.0.0-nullsafety.0 + auto_size_text: ^3.0.0 cached_network_image: ^3.0.0-nullsafety cupertino_icons: ^1.0.2 flutter_rating_bar: ^4.0.0 - flutter_svg: ^0.21.0-nullsafety.0 + flutter_svg: ^1.1.6 lottie: ^1.0.1 shimmer: ^2.0.0-nullsafety.0 @@ -57,12 +59,12 @@ dev_dependencies: flutter_test: sdk: flutter - build_runner: ^1.10.0 + build_runner: ^2.3.2 json_annotation: ^4.0.1 - json_serializable: ^4.1.0 + json_serializable: ^6.5.4 mobx_codegen: ^2.0.1+3 mockito: any - pedantic: ^1.11.0 + very_good_analysis: ^3.1.0 flutter: uses-material-design: true From 4995dc92b23e007f763dce334bc7dce41d8f49e8 Mon Sep 17 00:00:00 2001 From: Veli Bacik Date: Tue, 1 Nov 2022 04:01:13 +0300 Subject: [PATCH 2/2] updated at all --- android/.gitignore | 2 + android/Gemfile | 6 - android/Gemfile.lock | 182 ------------- android/app/build.gradle | 43 ++- android/app/src/debug/AndroidManifest.xml | 2 +- android/app/src/main/AndroidManifest.xml | 14 +- .../sample}/MainActivity.kt | 2 +- .../res/drawable-v21/launch_background.xml | 12 + .../app/src/main/res/drawable/circle_hwa.png | Bin 29144 -> 0 bytes .../main/res/drawable/launch_background.xml | 10 +- .../app/src/main/res/values-night/styles.xml | 18 ++ android/app/src/main/res/values/color.xml | 19 -- android/app/src/main/res/values/styles.xml | 8 +- android/app/src/profile/AndroidManifest.xml | 2 +- android/build.gradle | 7 +- android/fastlane/Appfile | 2 - android/fastlane/Fastfile | 82 ------ android/fastlane/Pluginfile | 5 - android/fastlane/README.md | 29 --- android/fastlane/report.xml | 18 -- android/gradle.properties | 1 - .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 4 - ios/Flutter/AppFrameworkInfo.plist | 2 +- ios/Podfile | 18 +- ios/Podfile.lock | 180 +++++++++++-- ios/Runner.xcodeproj/project.pbxproj | 8 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- ios/Runner/Info.plist | 2 + lib/core/base/model/base_error.dart | 3 +- lib/core/base/view/base_widget.dart | 13 +- lib/core/constants/app/app_constants.dart | 2 + .../navigation/navigation_constants.dart | 2 + .../init/analytics/analytics_manager.dart | 8 +- lib/core/init/cache/locale_manager.dart | 7 +- .../init/navigation/navigation_route.dart | 12 +- .../init/navigation/navigation_service.dart | 1 - lib/core/init/network/network_manager.dart | 7 +- lib/core/init/notifier/provider_list.dart | 1 - lib/main.dart | 20 +- lib/product/widget/card/burger_card.dart | 18 +- lib/product/widget/card/game_card.dart | 1 - lib/product/widget/grid/game_grid_view.dart | 1 - lib/product/widget/pageview/game_slider.dart | 4 +- .../_product/_constants/image_path_svg.dart | 1 - .../_product/_utilty/decoration_helper.dart | 3 +- .../_widgets/avatar/on_board_circle.dart | 4 +- .../_widgets/button/face_book_button.dart | 4 +- .../_widgets/button/login_button.dart | 3 +- .../_widgets/card/build_user_card.dart | 22 +- .../_widgets/listview/on_board_indicator.dart | 4 +- .../login/service/ILoginService.dart | 1 - .../login/service/login_service.dart | 8 +- .../onboard/view/on_board_view.dart | 66 +++-- .../splash/service/splash_service.dart | 26 +- .../authenticate/splash/view/splash_view.dart | 76 +++--- .../authenticate/test/view/test_view.dart | 9 +- .../build/feed/service/IBuildFeedService.dart | 1 - .../feed/service/build_feed_service.dart | 7 +- .../home/build/feed/view/build_feed_view.dart | 111 +++++--- .../home/burger/service/burger_serivce.dart | 45 +++- lib/view/home/burger/view/burgers_view.dart | 152 ++++++----- lib/view/home/game/model/game_view_state.dart | 2 + lib/view/home/game/service/IGameService.dart | 1 - lib/view/home/game/service/game_service.dart | 15 +- lib/view/home/game/view/game_view.dart | 57 ++-- .../game/view/subview/game_view_cards.dart | 69 ++--- .../home/social/service/ISocialService.dart | 1 - .../home/social/service/socail_service.dart | 18 +- lib/view/home/social/view/social_view.dart | 2 + .../home/social/view/social_view_detial.dart | 18 +- lib/view/settings/view/settings_view.dart | 150 +++++++---- .../view/subview/settings_dynamic_view.dart | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 14 + .../src/list-view/indicator_list_view.dart | 7 +- .../lib/src/text/auto_locale_text.dart | 5 +- module/architecture_widgets/pubspec.yaml | 1 + pubspec.lock | 244 ++++++++++++------ 78 files changed, 1004 insertions(+), 926 deletions(-) delete mode 100644 android/Gemfile delete mode 100644 android/Gemfile.lock rename android/app/src/main/kotlin/com/{hwa/fluttermvvmtemplate => example/sample}/MainActivity.kt (72%) create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml delete mode 100644 android/app/src/main/res/drawable/circle_hwa.png create mode 100644 android/app/src/main/res/values-night/styles.xml delete mode 100644 android/app/src/main/res/values/color.xml delete mode 100644 android/fastlane/Appfile delete mode 100644 android/fastlane/Fastfile delete mode 100644 android/fastlane/Pluginfile delete mode 100644 android/fastlane/README.md delete mode 100644 android/fastlane/report.xml diff --git a/android/.gitignore b/android/.gitignore index 0a741cb..6f56801 100644 --- a/android/.gitignore +++ b/android/.gitignore @@ -9,3 +9,5 @@ GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app key.properties +**/*.keystore +**/*.jks diff --git a/android/Gemfile b/android/Gemfile deleted file mode 100644 index cdd3a6b..0000000 --- a/android/Gemfile +++ /dev/null @@ -1,6 +0,0 @@ -source "https://rubygems.org" - -gem "fastlane" - -plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') -eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/android/Gemfile.lock b/android/Gemfile.lock deleted file mode 100644 index 21e614e..0000000 --- a/android/Gemfile.lock +++ /dev/null @@ -1,182 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.2) - addressable (2.7.0) - public_suffix (>= 2.0.2, < 5.0) - atomos (0.1.3) - aws-eventstream (1.1.0) - aws-partitions (1.363.0) - aws-sdk-core (3.105.0) - aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.239.0) - aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.37.0) - aws-sdk-core (~> 3, >= 3.99.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.79.1) - aws-sdk-core (~> 3, >= 3.104.3) - aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.2) - aws-eventstream (~> 1, >= 1.0.2) - babosa (1.0.3) - claide (1.0.3) - colored (1.2) - colored2 (3.1.2) - commander-fastlane (4.4.6) - highline (~> 1.7.2) - declarative (0.0.20) - declarative-option (0.1.0) - digest-crc (0.6.1) - rake (~> 13.0) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.6) - emoji_regex (3.0.0) - excon (0.76.0) - faraday (1.0.1) - multipart-post (>= 1.2, < 3) - faraday-cookie_jar (0.0.6) - faraday (>= 0.7.4) - http-cookie (~> 1.0.0) - faraday_middleware (1.0.0) - faraday (~> 1.0) - fastimage (2.2.0) - fastlane (2.157.2) - CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.3, < 3.0.0) - aws-sdk-s3 (~> 1.0) - babosa (>= 1.0.3, < 2.0.0) - bundler (>= 1.12.0, < 3.0.0) - colored - commander-fastlane (>= 4.4.6, < 5.0.0) - dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (>= 0.1, < 4.0) - excon (>= 0.71.0, < 1.0.0) - faraday (~> 1.0) - faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 1.0) - fastimage (>= 2.1.0, < 3.0.0) - gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.37.0, < 0.39.0) - google-cloud-storage (>= 1.15.0, < 2.0.0) - highline (>= 1.7.2, < 2.0.0) - json (< 3.0.0) - jwt (>= 2.1.0, < 3) - mini_magick (>= 4.9.4, < 5.0.0) - multipart-post (~> 2.0.0) - plist (>= 3.1.0, < 4.0.0) - rubyzip (>= 2.0.0, < 3.0.0) - security (= 0.1.3) - simctl (~> 1.6.3) - slack-notifier (>= 2.0.0, < 3.0.0) - terminal-notifier (>= 2.0.0, < 3.0.0) - terminal-table (>= 1.4.5, < 2.0.0) - tty-screen (>= 0.6.3, < 1.0.0) - tty-spinner (>= 0.8.0, < 1.0.0) - word_wrap (~> 1.0.0) - xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) - xcpretty-travis-formatter (>= 0.0.3) - fastlane-plugin-properties (1.1.2) - java-properties - gh_inspector (1.1.3) - google-api-client (0.38.0) - addressable (~> 2.5, >= 2.5.1) - googleauth (~> 0.9) - httpclient (>= 2.8.1, < 3.0) - mini_mime (~> 1.0) - representable (~> 3.0) - retriable (>= 2.0, < 4.0) - signet (~> 0.12) - google-cloud-core (1.5.0) - google-cloud-env (~> 1.0) - google-cloud-errors (~> 1.0) - google-cloud-env (1.3.3) - faraday (>= 0.17.3, < 2.0) - google-cloud-errors (1.0.1) - google-cloud-storage (1.28.0) - addressable (~> 2.5) - digest-crc (~> 0.4) - google-api-client (~> 0.33) - google-cloud-core (~> 1.2) - googleauth (~> 0.9) - mini_mime (~> 1.0) - googleauth (0.13.1) - faraday (>= 0.17.3, < 2.0) - jwt (>= 1.4, < 3.0) - memoist (~> 0.16) - multi_json (~> 1.11) - os (>= 0.9, < 2.0) - signet (~> 0.14) - highline (1.7.10) - http-cookie (1.0.3) - domain_name (~> 0.5) - httpclient (2.8.3) - java-properties (0.2.1) - jmespath (1.4.0) - json (2.3.1) - jwt (2.2.2) - memoist (0.16.2) - mini_magick (4.10.1) - mini_mime (1.0.2) - multi_json (1.15.0) - multipart-post (2.0.0) - nanaimo (0.3.0) - naturally (2.2.0) - os (1.1.1) - plist (3.5.0) - public_suffix (4.0.5) - rake (13.0.1) - representable (3.0.4) - declarative (< 0.1.0) - declarative-option (< 0.2.0) - uber (< 0.2.0) - retriable (3.1.2) - rouge (2.0.7) - rubyzip (2.3.0) - security (0.1.3) - signet (0.14.0) - addressable (~> 2.3) - faraday (>= 0.17.3, < 2.0) - jwt (>= 1.5, < 3.0) - multi_json (~> 1.10) - simctl (1.6.8) - CFPropertyList - naturally - slack-notifier (2.3.2) - terminal-notifier (2.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - tty-cursor (0.7.1) - tty-screen (0.8.1) - tty-spinner (0.9.3) - tty-cursor (~> 0.7) - uber (0.1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.7.7) - unicode-display_width (1.7.0) - word_wrap (1.0.0) - xcodeproj (1.18.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - xcpretty (0.3.0) - rouge (~> 2.0.7) - xcpretty-travis-formatter (1.0.0) - xcpretty (~> 0.2, >= 0.0.7) - -PLATFORMS - ruby - -DEPENDENCIES - fastlane - fastlane-plugin-properties - -BUNDLED WITH - 2.1.4 diff --git a/android/app/build.gradle b/android/app/build.gradle index ab1298c..a2edb70 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -24,46 +24,37 @@ if (flutterVersionName == null) { apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" -apply plugin: 'com.google.gms.google-services' - -def keystoreProperties = new Properties() -def keystorePropertiesFile = rootProject.file('key.properties') -if (keystorePropertiesFile.exists()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} android { - compileSdkVersion 28 + compileSdkVersion 30 - sourceSets { - main.java.srcDirs += 'src/main/kotlin' + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' } - lintOptions { - disable 'InvalidPackage' + sourceSets { + main.java.srcDirs += 'src/main/kotlin' } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.hwa.fluttermvvmtemplate" - minSdkVersion 19 - targetSdkVersion 29 + applicationId "com.example.sample" + minSdkVersion 16 + targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } - signingConfigs { - release { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null - storePassword keystoreProperties['storePassword'] - } - } - buildTypes { release { - signingConfig signingConfigs.release + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug } } } @@ -74,6 +65,4 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation platform('com.google.firebase:firebase-bom:29.0.3') - implementation 'com.google.firebase:firebase-analytics' } diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 087c88a..ea27fed 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.example.sample"> diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b3109d8..a0902b1 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,16 +1,10 @@ - - + + + + + + + + diff --git a/android/app/src/main/res/drawable/circle_hwa.png b/android/app/src/main/res/drawable/circle_hwa.png deleted file mode 100644 index 648c07d5b93b1c7c6d0ce3f76ab4509f4f1059b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29144 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 - - + + + + diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..449a9f9 --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/color.xml b/android/app/src/main/res/values/color.xml deleted file mode 100644 index 8cc3f65..0000000 --- a/android/app/src/main/res/values/color.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - #FFFFFF - #FFFF00 - #FF00FF - #FF0000 - #C0C0C0 - #808080 - #808000 - #800080 - #800000 - #00FFFF - #00FF00 - #008080 - #008000 - #0000FF - #000080 - #000000 - \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 1f83a33..d74aa35 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ - - diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index 087c88a..ea27fed 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.example.sample"> diff --git a/android/build.gradle b/android/build.gradle index 7b77fc7..ed45c65 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,28 +2,25 @@ buildscript { ext.kotlin_version = '1.3.50' repositories { google() - jcenter() + mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.gms:google-services:4.3.10' } } allprojects { repositories { google() - jcenter() + mavenCentral() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { project.evaluationDependsOn(':app') } diff --git a/android/fastlane/Appfile b/android/fastlane/Appfile deleted file mode 100644 index e680c17..0000000 --- a/android/fastlane/Appfile +++ /dev/null @@ -1,2 +0,0 @@ -json_key_file("secret/api-5970835861059463279-389763-87711522f0cb.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one -package_name("com.hwa.fluttermvvmtemplate") # e.g. com.krausefx.app diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile deleted file mode 100644 index 9ac0127..0000000 --- a/android/fastlane/Fastfile +++ /dev/null @@ -1,82 +0,0 @@ -# This file contains the fastlane.tools configuration -# You can find the documentation at https://docs.fastlane.tools -# -# For a list of all available actions, check out -# -# https://docs.fastlane.tools/actions -# -# For a list of all available plugins, check out -# -# https://docs.fastlane.tools/plugins/available-plugins -# - -# Uncomment the line if you want fastlane to automatically update itself -# update_fastlane - -default_platform(:android) - -ENV_PATH = "../asset/app/.env" -ANDROID_VERSION_NAME = "androidVersionName" -APP_BUNDLE_PATH = "../build/app/outputs/bundle/release/app-release.aab" -INTERNAL = "internal" - -platform :android do - desc "Deploy to internal test application" - lane :internal do |options| - versionNumberArrayLength = google_play_track_version_codes(track:INTERNAL) - versionNumber = (versionNumberArrayLength.length > 0 ? versionNumberArrayLength[0] : 0).to_i + 1 - incerementVersion version: options[:version] - setVersionNumber versionNumber: options[:versionNumber] - versionName = getVersionName() - flutter_build(versionName,versionNumber) - buildStore(INTERNAL) - end - - private_lane :setVersionNumber do |options| - if options[:versionNumber] != nil - set_properties_value( - key: ANDROID_VERSION_NAME, - path: ENV_PATH, - value: options[:versionNumber] - ) - end - end - - def buildStore(track) - upload_to_play_store( - track: track, - aab: APP_BUNDLE_PATH - ) - end - - private_lane :incerementVersion do |options| - if options[:version] != nil - increment_version_name_in_properties_file( - key: ANDROID_VERSION_NAME, - path: ENV_PATH, - update_type: options[:version] - ) - end - end - - def getVersionName - return get_properties_value( - key: ANDROID_VERSION_NAME, - path: ENV_PATH - ) - end - - def flutter_build(versionName,number) - - Dir.chdir '../../' do - sh('flutter', 'packages', 'get') - sh('flutter', 'clean') - sh( - "flutter build appbundle --build-name=#{ - versionName - } --build-number=#{number.to_s}" - ) - end - end - -end diff --git a/android/fastlane/Pluginfile b/android/fastlane/Pluginfile deleted file mode 100644 index e735758..0000000 --- a/android/fastlane/Pluginfile +++ /dev/null @@ -1,5 +0,0 @@ -# Autogenerated by fastlane -# -# Ensure this file is checked in to source control! - -gem 'fastlane-plugin-properties' diff --git a/android/fastlane/README.md b/android/fastlane/README.md deleted file mode 100644 index 69d8103..0000000 --- a/android/fastlane/README.md +++ /dev/null @@ -1,29 +0,0 @@ -fastlane documentation -================ -# Installation - -Make sure you have the latest version of the Xcode command line tools installed: - -``` -xcode-select --install -``` - -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew install fastlane` - -# Available Actions -## Android -### android internal -``` -fastlane android internal -``` -Deploy to internal test application - ----- - -This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/android/fastlane/report.xml b/android/fastlane/report.xml deleted file mode 100644 index e02b38f..0000000 --- a/android/fastlane/report.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/android/gradle.properties b/android/gradle.properties index 38c8d45..94adc3a 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,4 +1,3 @@ org.gradle.jvmargs=-Xmx1536M -android.enableR8=true android.useAndroidX=true android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 90f271d..bc6a58a 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index d3b6a40..44e62bc 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,7 +1,3 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - include ':app' def localPropertiesFile = new File(rootProject.projectDir, "local.properties") diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f7..4f8d4d2 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 11.0 diff --git a/ios/Podfile b/ios/Podfile index 1e8c3c9..bd78433 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,17 +1,17 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' +ENV["COCOAPODS_DISABLE_STATS"] = "true" -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, +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__) + 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 @@ -23,11 +23,11 @@ def flutter_root 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) +require File.expand_path(File.join("packages", "flutter_tools", "bin", "podhelper"), flutter_root) flutter_ios_podfile_setup -target 'Runner' do +target "Runner" do use_frameworks! use_modular_headers! diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 69b339b..82c022e 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,73 +1,197 @@ PODS: + - connectivity_plus (0.0.1): + - Flutter + - ReachabilitySwift - device_info (0.0.1): - Flutter + - Firebase/Analytics (10.0.0): + - Firebase/Core + - Firebase/Core (10.0.0): + - Firebase/CoreOnly + - FirebaseAnalytics (~> 10.0.0) + - Firebase/CoreOnly (10.0.0): + - FirebaseCore (= 10.0.0) + - firebase_analytics (10.0.3): + - Firebase/Analytics (= 10.0.0) + - firebase_core + - Flutter + - firebase_core (2.1.1): + - Firebase/CoreOnly (= 10.0.0) + - Flutter + - FirebaseAnalytics (10.0.0): + - FirebaseAnalytics/AdIdSupport (= 10.0.0) + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/MethodSwizzler (~> 7.8) + - GoogleUtilities/Network (~> 7.8) + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (10.0.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleAppMeasurement (= 10.0.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/MethodSwizzler (~> 7.8) + - GoogleUtilities/Network (~> 7.8) + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseCore (10.0.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/Logger (~> 7.8) + - FirebaseCoreInternal (10.1.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseInstallations (10.1.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) - Flutter (1.0.0) - FMDB (2.7.5): - FMDB/standard (= 2.7.5) - FMDB/standard (2.7.5) - - package_info (0.0.1): + - GoogleAppMeasurement (10.0.0): + - GoogleAppMeasurement/AdIdSupport (= 10.0.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/MethodSwizzler (~> 7.8) + - GoogleUtilities/Network (~> 7.8) + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (10.0.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 10.0.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/MethodSwizzler (~> 7.8) + - GoogleUtilities/Network (~> 7.8) + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (10.0.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/MethodSwizzler (~> 7.8) + - GoogleUtilities/Network (~> 7.8) + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleUtilities/AppDelegateSwizzler (7.8.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (7.8.0): + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.8.0): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (7.8.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (7.8.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.8.0)" + - GoogleUtilities/Reachability (7.8.0): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (7.8.0): + - GoogleUtilities/Logger + - nanopb (2.30909.0): + - nanopb/decode (= 2.30909.0) + - nanopb/encode (= 2.30909.0) + - nanopb/decode (2.30909.0) + - nanopb/encode (2.30909.0) + - package_info_plus (0.4.5): - Flutter - - path_provider (0.0.1): + - path_provider_ios (0.0.1): - Flutter + - PromisesObjC (2.1.1) + - ReachabilitySwift (5.0.0) - share (0.0.1): - Flutter - - shared_preferences (0.0.1): + - shared_preferences_ios (0.0.1): - Flutter - sqflite (0.0.2): - Flutter - FMDB (>= 2.7.5) - - url_launcher (0.0.1): + - url_launcher_ios (0.0.1): - Flutter - - webview_flutter (0.0.1): + - webview_flutter_wkwebview (0.0.1): - Flutter DEPENDENCIES: + - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - device_info (from `.symlinks/plugins/device_info/ios`) + - firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - Flutter (from `Flutter`) - - package_info (from `.symlinks/plugins/package_info/ios`) - - path_provider (from `.symlinks/plugins/path_provider/ios`) + - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) + - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - share (from `.symlinks/plugins/share/ios`) - - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) + - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) - sqflite (from `.symlinks/plugins/sqflite/ios`) - - url_launcher (from `.symlinks/plugins/url_launcher/ios`) - - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`) SPEC REPOS: trunk: + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations - FMDB + - GoogleAppMeasurement + - GoogleUtilities + - nanopb + - PromisesObjC + - ReachabilitySwift EXTERNAL SOURCES: + connectivity_plus: + :path: ".symlinks/plugins/connectivity_plus/ios" device_info: :path: ".symlinks/plugins/device_info/ios" + firebase_analytics: + :path: ".symlinks/plugins/firebase_analytics/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" Flutter: :path: Flutter - package_info: - :path: ".symlinks/plugins/package_info/ios" - path_provider: - :path: ".symlinks/plugins/path_provider/ios" + package_info_plus: + :path: ".symlinks/plugins/package_info_plus/ios" + path_provider_ios: + :path: ".symlinks/plugins/path_provider_ios/ios" share: :path: ".symlinks/plugins/share/ios" - shared_preferences: - :path: ".symlinks/plugins/shared_preferences/ios" + shared_preferences_ios: + :path: ".symlinks/plugins/shared_preferences_ios/ios" sqflite: :path: ".symlinks/plugins/sqflite/ios" - url_launcher: - :path: ".symlinks/plugins/url_launcher/ios" - webview_flutter: - :path: ".symlinks/plugins/webview_flutter/ios" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + webview_flutter_wkwebview: + :path: ".symlinks/plugins/webview_flutter_wkwebview/ios" SPEC CHECKSUMS: + connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e device_info: d7d233b645a32c40dfdc212de5cf646ca482f175 - Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c + Firebase: 1b810f3d0c0532e27a48f1961f8c0400a668a2cf + firebase_analytics: ed8e5198c08a3ec3f5e1dd150dd4db07d7871e5b + firebase_core: 5c0bb0ca7d0e70480a68a6e9ad9bf55d1edd5305 + FirebaseAnalytics: 9921a52739f4ab66099da31b6e0243db78a3ac0a + FirebaseCore: 97f48a3a567a72b8d4daa0f03c3aadb78df4e995 + FirebaseCoreInternal: 96d75228e10fd369564da51bd898414eb0f54df5 + FirebaseInstallations: 99d24bac0243cf8b0e96cf5426340d211f0bcc80 + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a - package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c + GoogleAppMeasurement: 7e48a3249792ac35d6f18f107f63f199a7e9d0ce + GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7 + nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431 + package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e + path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 + PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb + ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 share: 0b2c3e82132f5888bccca3351c504d0003b3b410 - shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d + shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904 - url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef - webview_flutter: 9f491a9b5a66f2573946a389b2677987b0ff8c0b + url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de + webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f -PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c +PODFILE CHECKSUM: d593491b71aba1c29d8ba5ad656bfb19f7093630 -COCOAPODS: 1.10.1 +COCOAPODS: 1.11.3 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 62fb9ef..83a1ef9 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -155,7 +155,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -339,7 +339,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -429,7 +429,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -478,7 +478,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140c..3db53b6 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ en tr + CADisableMinimumFrameDurationOnPhone + diff --git a/lib/core/base/model/base_error.dart b/lib/core/base/model/base_error.dart index 04e488e..e058e4e 100644 --- a/lib/core/base/model/base_error.dart +++ b/lib/core/base/model/base_error.dart @@ -1,7 +1,6 @@ import 'package:fluttermvvmtemplate/core/init/network/IResponseModel.dart'; -class BaseError extends IErrorModel { - +class BaseError extends IErrorModel { BaseError(this.message); final String message; } diff --git a/lib/core/base/view/base_widget.dart b/lib/core/base/view/base_widget.dart index 322bc64..bdfe340 100644 --- a/lib/core/base/view/base_widget.dart +++ b/lib/core/base/view/base_widget.dart @@ -2,11 +2,16 @@ import 'package:flutter/material.dart'; import 'package:mobx/mobx.dart'; class BaseView extends StatefulWidget { - - const BaseView({Key? key, required this.viewModel, required this.onPageBuilder, required this.onModelReady, this.onDispose}) : super(key: key); + const BaseView({ + Key? key, + required this.viewModel, + required this.onPageBuilder, + required this.onModelReady, + this.onDispose, + }) : super(key: key); final Widget Function(BuildContext context, T value) onPageBuilder; final T viewModel; - final Function(T model) onModelReady; + final void Function(T model) onModelReady; final VoidCallback? onDispose; @override @@ -25,7 +30,7 @@ class _BaseViewState extends State> { @override void dispose() { super.dispose(); - if (widget.onDispose != null) widget.onDispose!(); + if (widget.onDispose != null) widget.onDispose?.call(); } @override diff --git a/lib/core/constants/app/app_constants.dart b/lib/core/constants/app/app_constants.dart index 044dc60..daa94ad 100644 --- a/lib/core/constants/app/app_constants.dart +++ b/lib/core/constants/app/app_constants.dart @@ -1,3 +1,5 @@ +// ignore_for_file: constant_identifier_names + class ApplicationConstants { static const COMPANY_NAME = 'HWA'; diff --git a/lib/core/constants/navigation/navigation_constants.dart b/lib/core/constants/navigation/navigation_constants.dart index 75bac31..b33b232 100644 --- a/lib/core/constants/navigation/navigation_constants.dart +++ b/lib/core/constants/navigation/navigation_constants.dart @@ -1,3 +1,5 @@ +// ignore_for_file: constant_identifier_names + class NavigationConstants { static const TEST_VIEW = '/test'; static const DEFAULT = '/'; diff --git a/lib/core/init/analytics/analytics_manager.dart b/lib/core/init/analytics/analytics_manager.dart index 2395116..0d34b25 100644 --- a/lib/core/init/analytics/analytics_manager.dart +++ b/lib/core/init/analytics/analytics_manager.dart @@ -2,12 +2,12 @@ import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:flutter/material.dart'; import 'package:fluttermvvmtemplate/core/constants/app/app_constants.dart'; -class AnalytcisManager { - AnalytcisManager._init() { +class AnalyticsManager { + AnalyticsManager._init() { init(); } - static final AnalytcisManager _instance = AnalytcisManager._init(); - static AnalytcisManager get instance => _instance; + static final AnalyticsManager _instance = AnalyticsManager._init(); + static AnalyticsManager get instance => _instance; static final _analytics = FirebaseAnalytics.instance; diff --git a/lib/core/init/cache/locale_manager.dart b/lib/core/init/cache/locale_manager.dart index 13f8b55..bdd81bc 100644 --- a/lib/core/init/cache/locale_manager.dart +++ b/lib/core/init/cache/locale_manager.dart @@ -2,7 +2,6 @@ import 'package:fluttermvvmtemplate/core/constants/enums/locale_keys_enum.dart'; import 'package:shared_preferences/shared_preferences.dart'; class LocaleManager { - LocaleManager._init() { SharedPreferences.getInstance().then((value) { _preferences = value; @@ -35,9 +34,7 @@ class LocaleManager { await _preferences!.setBool(key.toString(), value); } - String getStringValue(PreferencesKeys key) => - _preferences?.getString(key.toString()) ?? ''; + String getStringValue(PreferencesKeys key) => _preferences?.getString(key.toString()) ?? ''; - bool getBoolValue(PreferencesKeys key) => - _preferences!.getBool(key.toString()) ?? false; + bool getBoolValue(PreferencesKeys key) => _preferences!.getBool(key.toString()) ?? false; } diff --git a/lib/core/init/navigation/navigation_route.dart b/lib/core/init/navigation/navigation_route.dart index cdbfc74..5644208 100644 --- a/lib/core/init/navigation/navigation_route.dart +++ b/lib/core/init/navigation/navigation_route.dart @@ -10,7 +10,6 @@ import 'package:fluttermvvmtemplate/view/settings/model/settings_dynamic.dart'; import 'package:fluttermvvmtemplate/view/settings/view/subview/settings_dynamic_view.dart'; class NavigationRoute { - NavigationRoute._init(); static final NavigationRoute _instance = NavigationRoute._init(); static NavigationRoute get instance => _instance; @@ -27,7 +26,7 @@ class NavigationRoute { return normalNavigate(const BuyView(), NavigationConstants.BUY_VIEW); case NavigationConstants.ON_BOARD: - return normalNavigate(OnBoardView(), NavigationConstants.ON_BOARD); + return normalNavigate(const OnBoardView(), NavigationConstants.ON_BOARD); case NavigationConstants.SETTINGS_WEB_VIEW: if (args.arguments is SettingsDynamicModel) { @@ -40,15 +39,16 @@ class NavigationRoute { default: return MaterialPageRoute( - builder: (context) => NotFoundNavigationWidget(), + builder: (context) => const NotFoundNavigationWidget(), ); } } MaterialPageRoute normalNavigate(Widget widget, String pageName) { return MaterialPageRoute( - builder: (context) => widget, - //analytciste görülecek olan sayfa ismi için pageName veriyoruz - settings: RouteSettings(name: pageName),); + builder: (context) => widget, + //analytciste görülecek olan sayfa ismi için pageName veriyoruz + settings: RouteSettings(name: pageName), + ); } } diff --git a/lib/core/init/navigation/navigation_service.dart b/lib/core/init/navigation/navigation_service.dart index 85cc5c3..11613ed 100644 --- a/lib/core/init/navigation/navigation_service.dart +++ b/lib/core/init/navigation/navigation_service.dart @@ -3,7 +3,6 @@ import 'package:flutter/cupertino.dart'; import 'package:fluttermvvmtemplate/core/init/navigation/INavigationService.dart'; class NavigationService implements INavigationService { - NavigationService._init(); static final NavigationService _instance = NavigationService._init(); static NavigationService get instance => _instance; diff --git a/lib/core/init/network/network_manager.dart b/lib/core/init/network/network_manager.dart index 98b8329..a57853c 100644 --- a/lib/core/init/network/network_manager.dart +++ b/lib/core/init/network/network_manager.dart @@ -6,10 +6,11 @@ import 'package:fluttermvvmtemplate/core/init/network/ICoreDio.dart'; import 'package:fluttermvvmtemplate/core/init/network/core_dio.dart'; class NetworkManager { - NetworkManager._init() { - final baseOptions = - BaseOptions(baseUrl: 'https://jsonplaceholder.typicode.com/', headers: {'val': LocaleManager.instance.getStringValue(PreferencesKeys.TOKEN)}); + final baseOptions = BaseOptions( + baseUrl: 'https://jsonplaceholder.typicode.com/', + headers: {'val': LocaleManager.instance.getStringValue(PreferencesKeys.TOKEN)}, + ); // _dio = Dio(baseOptions); coreDio = CoreDio(baseOptions); diff --git a/lib/core/init/notifier/provider_list.dart b/lib/core/init/notifier/provider_list.dart index 0d2e54a..528d3bc 100644 --- a/lib/core/init/notifier/provider_list.dart +++ b/lib/core/init/notifier/provider_list.dart @@ -4,7 +4,6 @@ import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; class ApplicationProvider { - ApplicationProvider._init(); static ApplicationProvider? _instance; static ApplicationProvider get instance { diff --git a/lib/main.dart b/lib/main.dart index 3ca425d..506a49c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,15 +12,17 @@ import 'package:provider/provider.dart'; Future main() async { await _init(); - runApp(MultiProvider( - providers: [...ApplicationProvider.instance.dependItems], - child: EasyLocalization( - supportedLocales: LanguageManager.instance.supportedLocales, - path: ApplicationConstants.LANG_ASSET_PATH, - startLocale: LanguageManager.instance.enLocale, - child: MyApp(), + runApp( + MultiProvider( + providers: [...ApplicationProvider.instance.dependItems], + child: EasyLocalization( + supportedLocales: LanguageManager.instance.supportedLocales, + path: ApplicationConstants.LANG_ASSET_PATH, + startLocale: LanguageManager.instance.enLocale, + child: MyApp(), + ), ), - ),); + ); } Future _init() async { @@ -40,7 +42,7 @@ class MyApp extends StatelessWidget { locale: context.locale, onGenerateRoute: NavigationRoute.instance.generateRoute, navigatorKey: NavigationService.instance.navigatorKey, - navigatorObservers: AnalytcisManager.instance.observer, + navigatorObservers: AnalyticsManager.instance.observer, ); } } diff --git a/lib/product/widget/card/burger_card.dart b/lib/product/widget/card/burger_card.dart index 2cb94cc..8e98c04 100644 --- a/lib/product/widget/card/burger_card.dart +++ b/lib/product/widget/card/burger_card.dart @@ -4,20 +4,20 @@ import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:fluttermvvmtemplate/view/home/burger/model/burger_model.dart'; class BurgerCard extends StatelessWidget { - const BurgerCard({Key? key, this.model}) : super(key: key); final BurgerModel? model; @override Widget build(BuildContext context) { return Card( - child: Column( - children: [ - Expanded(child: Image.network(model?.image ?? '')), - Text('${model?.name}'), - buildRatingBar(), - Text('${model?.price} \$'), - ], - ),); + child: Column( + children: [ + Expanded(child: Image.network(model?.image ?? '')), + Text('${model?.name}'), + buildRatingBar(), + Text('${model?.price} \$'), + ], + ), + ); } RatingBar buildRatingBar() { diff --git a/lib/product/widget/card/game_card.dart b/lib/product/widget/card/game_card.dart index 3700be9..996537f 100644 --- a/lib/product/widget/card/game_card.dart +++ b/lib/product/widget/card/game_card.dart @@ -4,7 +4,6 @@ import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; class GameCard extends StatelessWidget { - const GameCard({Key? key, this.model, this.onPressed}) : super(key: key); final GameModel? model; final VoidCallback? onPressed; diff --git a/lib/product/widget/grid/game_grid_view.dart b/lib/product/widget/grid/game_grid_view.dart index 878c511..9bcb579 100644 --- a/lib/product/widget/grid/game_grid_view.dart +++ b/lib/product/widget/grid/game_grid_view.dart @@ -3,7 +3,6 @@ import 'package:fluttermvvmtemplate/product/widget/card/game_card.dart'; import 'package:fluttermvvmtemplate/view/home/game/model/game_model.dart'; class GameGrid extends StatelessWidget { - const GameGrid({Key? key, this.models, this.onPressed}) : super(key: key); final List? models; final void Function(GameModel item, int indx)? onPressed; diff --git a/lib/product/widget/pageview/game_slider.dart b/lib/product/widget/pageview/game_slider.dart index 3857e7a..29ffa4d 100644 --- a/lib/product/widget/pageview/game_slider.dart +++ b/lib/product/widget/pageview/game_slider.dart @@ -4,7 +4,6 @@ import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; import 'package:kartal/kartal.dart'; class GameSlider extends StatefulWidget { - const GameSlider({Key? key, this.sliderModel}) : super(key: key); final List? sliderModel; @@ -45,7 +44,8 @@ class _GameSliderState extends State { itemBuilder: (context, index) => Padding( padding: EdgeInsets.all(context.dynamicWidth(0.01)), child: CircleAvatar( - backgroundColor: _selectedValueIndex == index ? context.colorScheme.onError : context.colorScheme.onError.withOpacity(0.1), + backgroundColor: + _selectedValueIndex == index ? context.colorScheme.onError : context.colorScheme.onError.withOpacity(0.1), radius: 10, ), ), diff --git a/lib/view/_product/_constants/image_path_svg.dart b/lib/view/_product/_constants/image_path_svg.dart index 7395528..04b551b 100644 --- a/lib/view/_product/_constants/image_path_svg.dart +++ b/lib/view/_product/_constants/image_path_svg.dart @@ -1,7 +1,6 @@ import 'package:fluttermvvmtemplate/core/extension/string_extension.dart'; class SVGImagePaths { - SVGImagePaths._init(); static SVGImagePaths? _instace; static SVGImagePaths get instance { diff --git a/lib/view/_product/_utilty/decoration_helper.dart b/lib/view/_product/_utilty/decoration_helper.dart index b4d26e9..d6489e0 100644 --- a/lib/view/_product/_utilty/decoration_helper.dart +++ b/lib/view/_product/_utilty/decoration_helper.dart @@ -8,6 +8,5 @@ class DecorationHelper { }); BuildContext? context; - Decoration get circleDecoriaton => - CircleDecoration(color: context!.colors.surface, radius: 3); + Decoration get circleDecoriaton => CircleDecoration(color: context!.colors.surface, radius: 3); } diff --git a/lib/view/_product/_widgets/avatar/on_board_circle.dart b/lib/view/_product/_widgets/avatar/on_board_circle.dart index 7591dce..d897eb2 100644 --- a/lib/view/_product/_widgets/avatar/on_board_circle.dart +++ b/lib/view/_product/_widgets/avatar/on_board_circle.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:fluttermvvmtemplate/core/extension/context_extension.dart'; class OnBoardCircle extends StatelessWidget { - const OnBoardCircle({Key? key, required this.isSelected}) : super(key: key); final bool isSelected; @override @@ -11,8 +10,7 @@ class OnBoardCircle extends StatelessWidget { return Padding( padding: context.paddingLow, child: CircleAvatar( - backgroundColor: - context.colors.onError.withOpacity(isSelected ? 1 : 0.2), + backgroundColor: context.colors.onError.withOpacity(isSelected ? 1 : 0.2), radius: isSelected ? context.width * 0.015 : context.width * 0.01, ), ); diff --git a/lib/view/_product/_widgets/button/face_book_button.dart b/lib/view/_product/_widgets/button/face_book_button.dart index 39e909b..ff7c7e7 100644 --- a/lib/view/_product/_widgets/button/face_book_button.dart +++ b/lib/view/_product/_widgets/button/face_book_button.dart @@ -2,9 +2,8 @@ import 'package:architecture_widgets/src/button/title_text_button.dart'; import 'package:flutter/material.dart'; class FaceBookButton extends StatelessWidget { - const FaceBookButton({Key? key, this.onComplete}) : super(key: key); - final Function(FaceBookModel? data, {String? errorMessage})? onComplete; + final void Function(FaceBookModel? data, {String? errorMessage})? onComplete; @override Widget build(BuildContext context) { @@ -24,7 +23,6 @@ class FaceBookButton extends StatelessWidget { } class FaceBookModel { - FaceBookModel(this.token, this.mail); final String token; final String mail; diff --git a/lib/view/_product/_widgets/button/login_button.dart b/lib/view/_product/_widgets/button/login_button.dart index 2954dd4..f472944 100644 --- a/lib/view/_product/_widgets/button/login_button.dart +++ b/lib/view/_product/_widgets/button/login_button.dart @@ -2,9 +2,8 @@ import 'package:architecture_widgets/src/button/icon_button.dart'; import 'package:flutter/material.dart'; class MVVMLoginButton extends StatelessWidget { - const MVVMLoginButton({Key? key, this.onComplete}) : super(key: key); - final Function(String data)? onComplete; + final ValueChanged? onComplete; @override Widget build(BuildContext context) { return IconNormalButton( diff --git a/lib/view/_product/_widgets/card/build_user_card.dart b/lib/view/_product/_widgets/card/build_user_card.dart index f58ab86..6294ee5 100644 --- a/lib/view/_product/_widgets/card/build_user_card.dart +++ b/lib/view/_product/_widgets/card/build_user_card.dart @@ -4,7 +4,6 @@ import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart' import 'package:kartal/kartal.dart'; class BuildUserCard extends StatelessWidget { - const BuildUserCard({Key? key, required this.model, this.onPressedLikeId, this.isLiked = false}) : super(key: key); final HouseModel model; final bool isLiked; @@ -30,7 +29,11 @@ class BuildUserCard extends StatelessWidget { Widget buildWrap(BuildContext context) { return Column( children: [ - AutoSizeText(model.title!, style: context.textTheme.headline6!.copyWith(fontWeight: FontWeight.w600), maxLines: 1), + AutoSizeText( + model.title!, + style: context.textTheme.headline6!.copyWith(fontWeight: FontWeight.w600), + maxLines: 1, + ), Text(model.description!), ], ); @@ -38,12 +41,13 @@ class BuildUserCard extends StatelessWidget { IconButton buildIconButton() { return IconButton( - icon: Icon( - Icons.favorite, - color: isLiked ? Colors.pink : Colors.black12, - ), - onPressed: () { - onPressedLikeId!(model.id); - },); + icon: Icon( + Icons.favorite, + color: isLiked ? Colors.pink : Colors.black12, + ), + onPressed: () { + onPressedLikeId!(model.id); + }, + ); } } diff --git a/lib/view/_product/_widgets/listview/on_board_indicator.dart b/lib/view/_product/_widgets/listview/on_board_indicator.dart index 0dd5f74..e93ec42 100644 --- a/lib/view/_product/_widgets/listview/on_board_indicator.dart +++ b/lib/view/_product/_widgets/listview/on_board_indicator.dart @@ -2,9 +2,7 @@ import 'package:architecture_widgets/src/list-view/indicator_list_view.dart'; import 'package:flutter/material.dart'; class OnBoardIndcator extends StatelessWidget { - - const OnBoardIndcator({Key? key, this.itemCount, this.currentIndex}) - : super(key: key); + const OnBoardIndcator({Key? key, this.itemCount, this.currentIndex}) : super(key: key); final int? itemCount; final int? currentIndex; @override diff --git a/lib/view/authenticate/login/service/ILoginService.dart b/lib/view/authenticate/login/service/ILoginService.dart index 10b7db5..a3a050f 100644 --- a/lib/view/authenticate/login/service/ILoginService.dart +++ b/lib/view/authenticate/login/service/ILoginService.dart @@ -3,7 +3,6 @@ import 'package:fluttermvvmtemplate/view/authenticate/login/model/login_response import 'package:vexana/vexana.dart'; abstract class ILoginService { - ILoginService(this.manager); final INetworkManager manager; diff --git a/lib/view/authenticate/login/service/login_service.dart b/lib/view/authenticate/login/service/login_service.dart index df87af7..a0e866f 100644 --- a/lib/view/authenticate/login/service/login_service.dart +++ b/lib/view/authenticate/login/service/login_service.dart @@ -9,8 +9,12 @@ class LoginService extends ILoginService { @override Future fetchUserControl(LoginModel model) async { - final response = await manager.send(NetworkRoutes.LOGIN.rawValue, - parseModel: LoginResponseModel(), method: RequestType.POST, data: model,); + final response = await manager.send( + NetworkRoutes.LOGIN.rawValue, + parseModel: LoginResponseModel(), + method: RequestType.POST, + data: model, + ); if (response.data is LoginResponseModel) { return response.data; diff --git a/lib/view/authenticate/onboard/view/on_board_view.dart b/lib/view/authenticate/onboard/view/on_board_view.dart index a376d98..f852f5c 100644 --- a/lib/view/authenticate/onboard/view/on_board_view.dart +++ b/lib/view/authenticate/onboard/view/on_board_view.dart @@ -9,6 +9,8 @@ import 'package:fluttermvvmtemplate/view/authenticate/onboard/model/on_board_mod import 'package:fluttermvvmtemplate/view/authenticate/onboard/viewModel/on_board_view_model.dart'; class OnBoardView extends StatelessWidget { + const OnBoardView({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { return BaseView( @@ -17,8 +19,7 @@ class OnBoardView extends StatelessWidget { model.setContext(context); model.init(); }, - onPageBuilder: (BuildContext context, OnBoardViewModel viewModel) => - Scaffold( + onPageBuilder: (BuildContext context, OnBoardViewModel viewModel) => Scaffold( body: Padding( padding: context.paddingNormalHorizontal, child: Column( @@ -35,12 +36,12 @@ class OnBoardView extends StatelessWidget { PageView buildPageView(OnBoardViewModel viewModel) { return PageView.builder( - itemCount: viewModel.onBoardItems.length, - onPageChanged: (value) { - viewModel.changeCurrentIndex(value); - }, - itemBuilder: (context, index) => - buildColumnBody(context, viewModel.onBoardItems[index]),); + itemCount: viewModel.onBoardItems.length, + onPageChanged: (value) { + viewModel.changeCurrentIndex(value); + }, + itemBuilder: (context, index) => buildColumnBody(context, viewModel.onBoardItems[index]), + ); } Row buildRowFooter(OnBoardViewModel viewModel, BuildContext context) { @@ -48,10 +49,18 @@ class OnBoardView extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ buildListViewCircles(viewModel), - Expanded(child: Center(child: Observer(builder: (_) { - return Visibility( - visible: viewModel.isLoading, child: const CircularProgressIndicator(),); - },),),), + Expanded( + child: Center( + child: Observer( + builder: (_) { + return Visibility( + visible: viewModel.isLoading, + child: const CircularProgressIndicator(), + ); + }, + ), + ), + ), buildFloatingActionButtonSkip(context, viewModel) ], ); @@ -63,17 +72,21 @@ class OnBoardView extends StatelessWidget { shrinkWrap: true, scrollDirection: Axis.horizontal, itemBuilder: (context, index) { - return Observer(builder: (_) { - return OnBoardCircle( - isSelected: viewModel.currentIndex == index, - ); - },); + return Observer( + builder: (_) { + return OnBoardCircle( + isSelected: viewModel.currentIndex == index, + ); + }, + ); }, ); } FloatingActionButton buildFloatingActionButtonSkip( - BuildContext context, OnBoardViewModel viewModel,) { + BuildContext context, + OnBoardViewModel viewModel, + ) { return FloatingActionButton( backgroundColor: context.colors.secondaryContainer, child: Icon( @@ -98,23 +111,30 @@ class OnBoardView extends StatelessWidget { children: [ buildAutoLocaleTextTitle(model, context), Padding( - padding: context.paddingMediumHorizontal, - child: buildAutoLocaleTextDescription(model, context),) + padding: context.paddingMediumHorizontal, + child: buildAutoLocaleTextDescription(model, context), + ) ], ); } AutoLocaleText buildAutoLocaleTextTitle( - OnBoardModel model, BuildContext context,) { + OnBoardModel model, + BuildContext context, + ) { return AutoLocaleText( value: model.title, style: Theme.of(context).textTheme.headline3!.copyWith( - fontWeight: FontWeight.bold, color: context.colors.onSecondary,), + fontWeight: FontWeight.bold, + color: context.colors.onSecondary, + ), ); } AutoLocaleText buildAutoLocaleTextDescription( - OnBoardModel model, BuildContext context,) { + OnBoardModel model, + BuildContext context, + ) { return AutoLocaleText( value: model.description, textAlign: TextAlign.center, diff --git a/lib/view/authenticate/splash/service/splash_service.dart b/lib/view/authenticate/splash/service/splash_service.dart index 75ec0cd..92f9280 100644 --- a/lib/view/authenticate/splash/service/splash_service.dart +++ b/lib/view/authenticate/splash/service/splash_service.dart @@ -2,12 +2,13 @@ import 'package:fluttermvvmtemplate/view/authenticate/splash/model/force_update_ import 'package:vexana/vexana.dart'; abstract class ISplashService { - ISplashService(this.networkManager); final INetworkManager networkManager; - Future checkDeviceVersion( - {required String version, required String platform,}); + Future checkDeviceVersion({ + required String version, + required String platform, + }); } enum SplashServiceQuery { VERSION, PLATFORM } @@ -28,17 +29,20 @@ class SplashService extends ISplashService { final String _path = 'version'; @override - Future checkDeviceVersion( - {required String version, required String platform,}) async { - final response = - await networkManager.send( + Future checkDeviceVersion({ + required String version, + required String platform, + }) async { + final response = await networkManager.send( _path, parseModel: ForceUpdateModel(), method: RequestType.GET, - queryParameters: Map.fromEntries([ - SplashServiceQuery.VERSION.toMapValue(version), - SplashServiceQuery.PLATFORM.toMapValue(platform) - ]), + queryParameters: Map.fromEntries( + [ + SplashServiceQuery.VERSION.toMapValue(version), + SplashServiceQuery.PLATFORM.toMapValue(platform), + ], + ), ); return response.data; } diff --git a/lib/view/authenticate/splash/view/splash_view.dart b/lib/view/authenticate/splash/view/splash_view.dart index e8ac753..9b0c84c 100644 --- a/lib/view/authenticate/splash/view/splash_view.dart +++ b/lib/view/authenticate/splash/view/splash_view.dart @@ -26,46 +26,58 @@ class SplashView extends StatelessWidget { return Scaffold( backgroundColor: context.colorScheme.onSurface, body: SafeArea( - child: Stack( - children: [ - buildCenterTextWelcome(context, viewModel), - buildAnimatedAlignIcon(viewModel, context), - ], - ),), + child: Stack( + children: [ + buildCenterTextWelcome(context, viewModel), + buildAnimatedAlignIcon(viewModel, context), + ], + ), + ), ); } Center buildCenterTextWelcome( - BuildContext context, SplashViewModel viewModel,) { - return Center(child: Observer(builder: (_) { - return AnimatedOpacity( - duration: context.durationNormal, - opacity: viewModel.isFirstInit ? 0 : 1, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - LocaleKeys.splash_welcome.tr(), - style: context.textTheme.headline4?.copyWith( - fontWeight: FontWeight.w700, - color: context.colorScheme.primaryContainer,), - textAlign: TextAlign.center, + BuildContext context, + SplashViewModel viewModel, + ) { + return Center( + child: Observer( + builder: (_) { + return AnimatedOpacity( + duration: context.durationNormal, + opacity: viewModel.isFirstInit ? 0 : 1, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + LocaleKeys.splash_welcome.tr(), + style: context.textTheme.headline4?.copyWith( + fontWeight: FontWeight.w700, + color: context.colorScheme.primaryContainer, + ), + textAlign: TextAlign.center, + ), + const CircularProgressIndicator.adaptive() + ], ), - const CircularProgressIndicator.adaptive() - ], - ), - ); - },),); + ); + }, + ), + ); } Widget buildAnimatedAlignIcon( - SplashViewModel viewModel, BuildContext context,) { - return Observer(builder: (_) { - return AnimatedAlign( - alignment: - viewModel.isFirstInit ? Alignment.center : Alignment.bottomCenter, + SplashViewModel viewModel, + BuildContext context, + ) { + return Observer( + builder: (_) { + return AnimatedAlign( + alignment: viewModel.isFirstInit ? Alignment.center : Alignment.bottomCenter, duration: context.durationLow, - child: Image.asset(ImageConstants.instance.projeIcon),); - },); + child: Image.asset(ImageConstants.instance.projeIcon), + ); + }, + ); } } diff --git a/lib/view/authenticate/test/view/test_view.dart b/lib/view/authenticate/test/view/test_view.dart index e15e91a..8511945 100644 --- a/lib/view/authenticate/test/view/test_view.dart +++ b/lib/view/authenticate/test/view/test_view.dart @@ -46,10 +46,11 @@ class _TestsViewState extends BaseState { IconButton iconButtonChangeTheme() { return IconButton( - icon: const Icon(Icons.change_history), - onPressed: () { - context.setLocale(LanguageManager.instance.enLocale); - },); + icon: const Icon(Icons.change_history), + onPressed: () { + context.setLocale(LanguageManager.instance.enLocale); + }, + ); } Widget get textNumber { diff --git a/lib/view/home/build/feed/service/IBuildFeedService.dart b/lib/view/home/build/feed/service/IBuildFeedService.dart index b3dbc5d..811bdf8 100644 --- a/lib/view/home/build/feed/service/IBuildFeedService.dart +++ b/lib/view/home/build/feed/service/IBuildFeedService.dart @@ -3,7 +3,6 @@ import 'package:fluttermvvmtemplate/view/home/build/feed/model/house_model.dart' import 'package:vexana/vexana.dart'; abstract class IBuildFeedService { - IBuildFeedService(this.manager, this.scaffoldyKey); final INetworkManager manager; final GlobalKey scaffoldyKey; diff --git a/lib/view/home/build/feed/service/build_feed_service.dart b/lib/view/home/build/feed/service/build_feed_service.dart index 25db8ba..b161cd6 100644 --- a/lib/view/home/build/feed/service/build_feed_service.dart +++ b/lib/view/home/build/feed/service/build_feed_service.dart @@ -10,8 +10,11 @@ class BuildFeedService extends IBuildFeedService with ServiceHelper { @override Future?> fetchUserHouseList() async { - final response = - await manager.send>(NetworkRoutes.BUILD_HOME.rawValue, parseModel: HouseModel(), method: RequestType.GET); + final response = await manager.send>( + NetworkRoutes.BUILD_HOME.rawValue, + parseModel: HouseModel(), + method: RequestType.GET, + ); showMessage(scaffoldyKey, response.error); return response.data; } diff --git a/lib/view/home/build/feed/view/build_feed_view.dart b/lib/view/home/build/feed/view/build_feed_view.dart index f4e4a02..a0e85b2 100644 --- a/lib/view/home/build/feed/view/build_feed_view.dart +++ b/lib/view/home/build/feed/view/build_feed_view.dart @@ -9,6 +9,8 @@ import 'package:fluttermvvmtemplate/view/home/build/feed/viewmodel/build_feed_vi import 'package:kartal/kartal.dart'; class BuildFeedView extends StatelessWidget { + const BuildFeedView({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { return BaseView( @@ -22,26 +24,37 @@ class BuildFeedView extends StatelessWidget { key: viewModel.scaffoldKey, appBar: buildAppBar(), body: DefaultTabController( - length: 4, - child: Observer(builder: (_) { + length: 4, + child: Observer( + builder: (_) { return viewModel.isLoaindg ? buildCenter() : viewModel.houseModels == null || viewModel.houseModels!.isEmpty ? const Center(child: Text('Not Found')) : buildListViewRecommended(viewModel, context); - },),), + }, + ), + ), ), ); } - ListView buildListViewRecommended(BuildFeedViewModel viewModel, BuildContext context) { + ListView buildListViewRecommended( + BuildFeedViewModel viewModel, + BuildContext context, + ) { return ListView( padding: context.paddingLow, children: [ buildTabBar(viewModel), buildSizedBoxLAtestPageView(context, viewModel), context.emptySizedHeightBoxLow, - Text(LocaleKeys.home_build_subTitle.tr(), style: context.textTheme.headline5!.copyWith(fontWeight: FontWeight.w600)), + Text( + LocaleKeys.home_build_subTitle.tr(), + style: context.textTheme.headline5!.copyWith( + fontWeight: FontWeight.w600, + ), + ), context.emptySizedHeightBoxLow, buildListBottom(viewModel) ], @@ -52,35 +65,41 @@ class BuildFeedView extends StatelessWidget { return ListView.builder( physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) => SizedBox( - height: context.dynamicHeight(0.15), - child: Card( - child: Row( - children: [ - Expanded(flex: 3, child: Image.network(viewModel.houseModels![index].image!)), - Expanded(flex: 9, child: buildObserver(viewModel, index)), - ], - ), - ),), + height: context.dynamicHeight(0.15), + child: Card( + child: Row( + children: [ + Expanded(flex: 3, child: Image.network(viewModel.houseModels![index].image!)), + Expanded(flex: 9, child: buildObserver(viewModel, index)), + ], + ), + ), + ), itemCount: 3, shrinkWrap: true, ); } Observer buildObserver(BuildFeedViewModel viewModel, int index) { - return Observer(builder: (_) { - return BuildUserCard( - model: viewModel.houseModels![index], - isLiked: viewModel.likeItems.contains(viewModel.houseModels![index].id), - onPressedLikeId: (id) { - if (id != null) { - viewModel.onLikeItemPressed(id); - } - }, - ); - },); + return Observer( + builder: (_) { + return BuildUserCard( + model: viewModel.houseModels![index], + isLiked: viewModel.likeItems.contains(viewModel.houseModels![index].id), + onPressedLikeId: (id) { + if (id != null) { + viewModel.onLikeItemPressed(id); + } + }, + ); + }, + ); } - SizedBox buildSizedBoxLAtestPageView(BuildContext context, BuildFeedViewModel viewModel) { + SizedBox buildSizedBoxLAtestPageView( + BuildContext context, + BuildFeedViewModel viewModel, + ) { return SizedBox( height: context.dynamicHeight(0.3), child: PageView.builder( @@ -92,12 +111,16 @@ class BuildFeedView extends StatelessWidget { } TabBar buildTabBar(BuildFeedViewModel viewModel) { - return TabBar(indicator: viewModel.helper.circleDecoriaton, indicatorSize: TabBarIndicatorSize.label, tabs: [ - Tab(text: LocaleKeys.home_build_tabbar_tab1.tr()), - Tab(text: LocaleKeys.home_build_tabbar_tab2.tr()), - Tab(text: LocaleKeys.home_build_tabbar_tab3.tr()), - Tab(text: LocaleKeys.home_build_tabbar_tab4.tr()), - ],); + return TabBar( + indicator: viewModel.helper.circleDecoriaton, + indicatorSize: TabBarIndicatorSize.label, + tabs: [ + Tab(text: LocaleKeys.home_build_tabbar_tab1.tr()), + Tab(text: LocaleKeys.home_build_tabbar_tab2.tr()), + Tab(text: LocaleKeys.home_build_tabbar_tab3.tr()), + Tab(text: LocaleKeys.home_build_tabbar_tab4.tr()), + ], + ); } Center buildCenter() => const Center(child: CircularProgressIndicator()); @@ -127,17 +150,19 @@ class BuildFeedView extends StatelessWidget { return Card( child: Padding( padding: context.paddingLow, - child: Observer(builder: (_) { - return BuildUserCard( - model: model, - isLiked: viewModel.likeItems.contains(model.id), - onPressedLikeId: (id) { - if (id != null) { - viewModel.onLikeItemPressed(id); - } - }, - ); - },), + child: Observer( + builder: (_) { + return BuildUserCard( + model: model, + isLiked: viewModel.likeItems.contains(model.id), + onPressedLikeId: (id) { + if (id != null) { + viewModel.onLikeItemPressed(id); + } + }, + ); + }, + ), ), ); } diff --git a/lib/view/home/burger/service/burger_serivce.dart b/lib/view/home/burger/service/burger_serivce.dart index 108d624..ba3cc9a 100644 --- a/lib/view/home/burger/service/burger_serivce.dart +++ b/lib/view/home/burger/service/burger_serivce.dart @@ -4,14 +4,16 @@ import 'package:fluttermvvmtemplate/view/home/burger/model/burger_model.dart'; import 'package:vexana/vexana.dart'; abstract class IBurgerService { - IBurgerService(this.manager); final INetworkManager manager; Future> fetchFavoriteBurgers(); Future> fetchBurgersLimited({double? max = 50, double? min = 0}); - Future> fetchBurgersSorted({required BurgerSortValues sort, BurgerSortValuesType types = BurgerSortValuesType.ASC}); + Future> fetchBurgersSorted({ + required BurgerSortValues sort, + BurgerSortValuesType types = BurgerSortValuesType.ASC, + }); } class BurgerService extends IBurgerService with NetworkHelper { @@ -19,29 +21,44 @@ class BurgerService extends IBurgerService with NetworkHelper { @override Future> fetchBurgersLimited({double? max = 50, double? min = 0}) async { - final response = await manager.send>(BurgerNetworkPath.PRICE.rawValue, - parseModel: BurgerModel(), - method: RequestType.GET, - queryParameters: Map.fromEntries([BurgerQueryParamaters.MIN.rawValue(min?.toInt()), BurgerQueryParamaters.MAX.rawValue(max?.toInt())]),); + final response = await manager.send>( + BurgerNetworkPath.PRICE.rawValue, + parseModel: BurgerModel(), + method: RequestType.GET, + queryParameters: Map.fromEntries( + [BurgerQueryParamaters.MIN.rawValue(min?.toInt()), BurgerQueryParamaters.MAX.rawValue(max?.toInt())], + ), + ); return response.data ?? []; } @override - Future> fetchBurgersSorted({required BurgerSortValues sort, BurgerSortValuesType types = BurgerSortValuesType.ASC}) async { - final response = await manager.send>(BurgerNetworkPath.MAIN.rawValue, - parseModel: BurgerModel(), - method: RequestType.GET, - queryParameters: - Map.fromEntries([BurgerQueryParamaters.SORT.rawValue(sort.rawValue), BurgerQueryParamaters.SORT_TYPE.rawValue(types.rawValue)]),); + Future> fetchBurgersSorted({ + required BurgerSortValues sort, + BurgerSortValuesType types = BurgerSortValuesType.ASC, + }) async { + final response = await manager.send>( + BurgerNetworkPath.MAIN.rawValue, + parseModel: BurgerModel(), + method: RequestType.GET, + queryParameters: Map.fromEntries([ + BurgerQueryParamaters.SORT.rawValue(sort.rawValue), + BurgerQueryParamaters.SORT_TYPE.rawValue(types.rawValue) + ]), + ); return response.data ?? []; } @override Future> fetchFavoriteBurgers() async { - final response = await manager.send>(BurgerNetworkPath.MAIN.rawValue, - parseModel: BurgerModel(), method: RequestType.GET, queryParameters: Map.fromEntries([BurgerQueryParamaters.FAVORITE.rawValue(true)]),); + final response = await manager.send>( + BurgerNetworkPath.MAIN.rawValue, + parseModel: BurgerModel(), + method: RequestType.GET, + queryParameters: Map.fromEntries([BurgerQueryParamaters.FAVORITE.rawValue(true)]), + ); showLog(response); return response.data ?? []; } diff --git a/lib/view/home/burger/view/burgers_view.dart b/lib/view/home/burger/view/burgers_view.dart index 88c5ddb..5f548b3 100644 --- a/lib/view/home/burger/view/burgers_view.dart +++ b/lib/view/home/burger/view/burgers_view.dart @@ -11,26 +11,21 @@ import 'package:fluttermvvmtemplate/view/home/burger/service/burger_serivce.dart import 'package:fluttermvvmtemplate/view/home/burger/viewmodel/burger_view_model.dart'; import 'package:kartal/kartal.dart'; -enum _BurgerViews { - BEST_SELL_TITLE, - BURGER_FOVORITE, - NORMAL_TITLE, - BURGER_VIEW -} +enum _BurgerViews { BEST_SELL_TITLE, BURGER_FOVORITE, NORMAL_TITLE, BURGER_VIEW } class BurgersView extends StatelessWidget { - final _title = 'VB BURGER'; + const BurgersView({Key? key}) : super(key: key); + + final String _title = 'VB BURGER'; @override Widget build(BuildContext context) { return BaseView( - viewModel: - BurgerViewModel(BurgerService(VexanaManager.instance.networkManager)), + viewModel: BurgerViewModel(BurgerService(VexanaManager.instance.networkManager)), onModelReady: (model) { model.setContext(context); model.init(); }, - onPageBuilder: (BuildContext context, BurgerViewModel viewModel) => - Scaffold( + onPageBuilder: (BuildContext context, BurgerViewModel viewModel) => Scaffold( appBar: buildAppBar(context, viewModel), body: buildObserverBuildbody(viewModel, context), ), @@ -38,16 +33,20 @@ class BurgersView extends StatelessWidget { } Observer buildObserverBuildbody( - BurgerViewModel viewModel, BuildContext context,) { - return Observer(builder: (_) { - return viewModel.isLoading - ? buildCenterLoading() - : buildPaddingListView(context, viewModel); - },); + BurgerViewModel viewModel, + BuildContext context, + ) { + return Observer( + builder: (_) { + return viewModel.isLoading ? buildCenterLoading() : buildPaddingListView(context, viewModel); + }, + ); } Padding buildPaddingListView( - BuildContext context, BurgerViewModel viewModel,) { + BuildContext context, + BurgerViewModel viewModel, + ) { return Padding( padding: context.paddingLow, child: ListView.builder( @@ -74,26 +73,30 @@ class BurgersView extends StatelessWidget { title: Text( _title, style: context.textTheme.headline5?.copyWith( - fontWeight: FontWeight.w600, color: context.colorScheme.onError,), + fontWeight: FontWeight.w600, + color: context.colorScheme.onError, + ), ), centerTitle: false, - leading: - Icon(Icons.food_bank_outlined, color: context.colorScheme.onError), + leading: Icon(Icons.food_bank_outlined, color: context.colorScheme.onError), actions: [ IconButton( - onPressed: () { - showModalBottomSheet( - context: context, - builder: (context) => - buildBottomSheetBody(context, viewModel),); - }, - icon: const Icon(Icons.filter_alt),) + onPressed: () { + showModalBottomSheet( + context: context, + builder: (context) => buildBottomSheetBody(context, viewModel), + ); + }, + icon: const Icon(Icons.filter_alt), + ) ], ); } Widget buildBottomSheetBody( - BuildContext context, BurgerViewModel viewModel,) => + BuildContext context, + BurgerViewModel viewModel, + ) => Padding( padding: context.paddingLow, child: Column( @@ -113,10 +116,11 @@ class BurgersView extends StatelessWidget { ), ), IconButton( - onPressed: () { - viewModel.fetchMinMax(); - }, - icon: const Icon(Icons.check_box_outline_blank),) + onPressed: () { + viewModel.fetchMinMax(); + }, + icon: const Icon(Icons.check_box_outline_blank), + ) ], ), Card( @@ -125,22 +129,27 @@ class BurgersView extends StatelessWidget { Wrap( spacing: 10, children: BurgerSortValues.values - .map((e) => IconButton( + .map( + (e) => IconButton( padding: EdgeInsets.zero, onPressed: () { viewModel.fetchSort(e); }, - icon: Text(e.rawValue, maxLines: 1),),) + icon: Text(e.rawValue, maxLines: 1), + ), + ) .toList(), ), Row( children: [ IconButton( - onPressed: () => viewModel.changeAscending(true), - icon: const Icon(Icons.plus_one),), + onPressed: () => viewModel.changeAscending(true), + icon: const Icon(Icons.plus_one), + ), IconButton( - onPressed: () => viewModel.changeAscending(true), - icon: const Icon(Icons.design_services_rounded),), + onPressed: () => viewModel.changeAscending(true), + icon: const Icon(Icons.design_services_rounded), + ), ], ), ], @@ -153,8 +162,10 @@ class BurgersView extends StatelessWidget { Padding buildPaddingNormalTitle(BuildContext context) { return Padding( padding: context.verticalPaddingLow, - child: Text(LocaleKeys.home_burgers_normalProducts.tr(), - style: context.textTheme.headline5,), + child: Text( + LocaleKeys.home_burgers_normalProducts.tr(), + style: context.textTheme.headline5, + ), ); } @@ -162,41 +173,52 @@ class BurgersView extends StatelessWidget { return Text( LocaleKeys.home_burgers_favoriteProducts.tr(), style: context.textTheme.headline3?.copyWith( - color: context.colorScheme.onSecondary, fontWeight: FontWeight.bold,), + color: context.colorScheme.onSecondary, + fontWeight: FontWeight.bold, + ), ); } - Center buildCenterLoading() => - const Center(child: CircularProgressIndicator.adaptive()); + Center buildCenterLoading() => const Center(child: CircularProgressIndicator.adaptive()); SizedBox buildSizedBoxFavorite( - BuildContext context, BurgerViewModel viewModel,) => + BuildContext context, + BurgerViewModel viewModel, + ) => SizedBox( - height: context.dynamicHeight(0.3), - child: const BurgerCard().buildList(viewModel.favoriteBurgerModel),); + height: context.dynamicHeight(0.3), + child: const BurgerCard().buildList(viewModel.favoriteBurgerModel), + ); Widget buildSizedBoxNormalBurgers( - BurgerViewModel viewModel, BuildContext context,) { + BurgerViewModel viewModel, + BuildContext context, + ) { viewModel.fetchNormalItems(); return SizedBox( - child: Observer(builder: (_) { - return viewModel.isLoadingMain - ? SizedBox( - height: context.dynamicHeight(0.1), child: buildCenterLoading(),) - : GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2,), - itemBuilder: (context, index) { - return BurgerCard( - model: viewModel.mainBurgerModel[index], - ); - }, - itemCount: viewModel.mainBurgerModel.length, - ); - },), + child: Observer( + builder: (_) { + return viewModel.isLoadingMain + ? SizedBox( + height: context.dynamicHeight(0.1), + child: buildCenterLoading(), + ) + : GridView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + ), + itemBuilder: (context, index) { + return BurgerCard( + model: viewModel.mainBurgerModel[index], + ); + }, + itemCount: viewModel.mainBurgerModel.length, + ); + }, + ), ); } } diff --git a/lib/view/home/game/model/game_view_state.dart b/lib/view/home/game/model/game_view_state.dart index 392c7f3..5708814 100644 --- a/lib/view/home/game/model/game_view_state.dart +++ b/lib/view/home/game/model/game_view_state.dart @@ -1,3 +1,5 @@ +// ignore_for_file: constant_identifier_names + enum GameViewItems { SEARCH_BAR, TABBAR, diff --git a/lib/view/home/game/service/IGameService.dart b/lib/view/home/game/service/IGameService.dart index c8c5828..4e14b95 100644 --- a/lib/view/home/game/service/IGameService.dart +++ b/lib/view/home/game/service/IGameService.dart @@ -5,7 +5,6 @@ import 'package:fluttermvvmtemplate/view/home/game/model/slider_model.dart'; import 'package:vexana/vexana.dart'; abstract class IGameService { - IGameService(this.manager, this.scaffoldyKey); final INetworkManager manager; final GlobalKey scaffoldyKey; diff --git a/lib/view/home/game/service/game_service.dart b/lib/view/home/game/service/game_service.dart index bb1a2a6..7d7338a 100644 --- a/lib/view/home/game/service/game_service.dart +++ b/lib/view/home/game/service/game_service.dart @@ -12,8 +12,12 @@ class GameService extends IGameService with ServiceHelper { @override Future?> fetchGameItems(GameEnum type) async { - final response = await manager.send>(NetworkRoutes.GAME.rawValue, - urlSuffix: '/${type.index + 1}', parseModel: GameModel(), method: RequestType.GET,); + final response = await manager.send>( + NetworkRoutes.GAME.rawValue, + urlSuffix: '/${type.index + 1}', + parseModel: GameModel(), + method: RequestType.GET, + ); showMessage(scaffoldyKey, response.error); await Future.delayed(const Duration(seconds: 5)); @@ -22,8 +26,11 @@ class GameService extends IGameService with ServiceHelper { @override Future?> fetchSliderItems() async { - final response = - await manager.send>(NetworkRoutes.SLIDER.rawValue, parseModel: SliderModel(), method: RequestType.GET); + final response = await manager.send>( + NetworkRoutes.SLIDER.rawValue, + parseModel: SliderModel(), + method: RequestType.GET, + ); showMessage(scaffoldyKey, response.error); return response.data; } diff --git a/lib/view/home/game/view/game_view.dart b/lib/view/home/game/view/game_view.dart index 84b4988..3502373 100644 --- a/lib/view/home/game/view/game_view.dart +++ b/lib/view/home/game/view/game_view.dart @@ -18,25 +18,29 @@ import 'package:shimmer/shimmer.dart'; part './subview/game_view_cards.dart'; class GameView extends StatelessWidget { - final GlobalKey _scaffoldyKey = GlobalKey(); + final GlobalKey _scaffoldKey = GlobalKey(); @override Widget build(BuildContext context) { return BaseView( - viewModel: GameViewModel(GameService(VexanaManager.instance.networkManager, _scaffoldyKey)), + viewModel: GameViewModel(GameService( + VexanaManager.instance.networkManager, + _scaffoldKey, + )), onModelReady: (model) { model.setContext(context); model.init(); }, onPageBuilder: (BuildContext context, GameViewModel value) => Scaffold( - key: _scaffoldyKey, + key: _scaffoldKey, appBar: buildAppBar(context), - body: Observer(builder: (_) { - return value.isLoading - ? const Center(child: CircularProgressIndicator()) - : DefaultTabController( - length: value.gameTabItems.length, - child: ListView.builder( + body: Observer( + builder: (_) { + return value.isLoading + ? const Center(child: CircularProgressIndicator()) + : DefaultTabController( + length: value.gameTabItems.length, + child: ListView.builder( itemCount: GameViewItems.values.length, itemBuilder: (context, index) { switch (GameViewItems.values[index]) { @@ -45,17 +49,21 @@ class GameView extends StatelessWidget { case GameViewItems.TABBAR: return buildTabBar(context, value); case GameViewItems.SLIDER: - return buildSizedBoxSlider(context, value.sliderItems); + return buildSizedBoxSlider( + context, + value.sliderItems, + ); case GameViewItems.NEW_UPDATE_GAMES_CARD: return buildColumnNewCard(value); case GameViewItems.TOP_UPDATE_GAMES_CARD: return buildColumnUpdate(value); - default: - throw Exception('STATE NOT FOUND'); // return Card(child: Text("data")); } - },),); - },), + }, + ), + ); + }, + ), ), ); } @@ -73,15 +81,18 @@ class GameView extends StatelessWidget { TabBar buildTabBar(BuildContext context, GameViewModel value) { return TabBar( - isScrollable: true, - indicatorColor: context.colorScheme.onError, - labelPadding: EdgeInsets.zero, - indicatorWeight: 3, - tabs: value.gameTabItems - .map((e) => Tab( - child: Padding(padding: context.paddingLow, child: Text(e.tr())), - ),) - .toList(),); + isScrollable: true, + indicatorColor: context.colorScheme.onError, + labelPadding: EdgeInsets.zero, + indicatorWeight: 3, + tabs: value.gameTabItems + .map( + (e) => Tab( + child: Padding(padding: context.paddingLow, child: Text(e.tr())), + ), + ) + .toList(), + ); } Widget buildSizedBoxSlider(BuildContext context, List? items) { diff --git a/lib/view/home/game/view/subview/game_view_cards.dart b/lib/view/home/game/view/subview/game_view_cards.dart index d98e8d3..9495592 100644 --- a/lib/view/home/game/view/subview/game_view_cards.dart +++ b/lib/view/home/game/view/subview/game_view_cards.dart @@ -2,43 +2,46 @@ part of '../game_view.dart'; extension _GameViewGamesCard on GameView { Widget buildColumnNewCard(GameViewModel viewModel) { - return viewModel.onNewsGameItems().toBuild?>( - onSuccess: (data) { - return Column( - children: [const HeaderButton(titleText: LocaleKeys.home_game_newUpdate), GameGrid(models: data)], - ); - }, - loadingWidget: SizedBox( - height: 200, - width: 100, - child: Shimmer.fromColors( - baseColor: Colors.grey, - highlightColor: Colors.grey[200]!, - child: const ListTile( - leading: CircleAvatar(), - title: Text('data'), - subtitle: Text('data'), + return viewModel.onNewsGameItems().toBuild( + onSuccess: (data) { + return Column( + children: [const HeaderButton(titleText: LocaleKeys.home_game_newUpdate), GameGrid(models: data)], + ); + }, + loadingWidget: SizedBox( + height: 200, + width: 100, + child: Shimmer.fromColors( + baseColor: Colors.grey, + highlightColor: Colors.grey[200]!, + child: const ListTile( + leading: CircleAvatar(), + title: Text('data'), + subtitle: Text('data'), + ), ), ), - ), - notFoundWidget: const Text('data'), - onError: const Text('data'),); + data: [], + notFoundWidget: const Text('data'), + onError: const Text('data'), + ); } Widget buildColumnUpdate(GameViewModel viewModel) { - return viewModel.onNewsGameItems().toBuild?>( - onSuccess: (data) { - return Column( - children: [ - const HeaderButton(titleText: LocaleKeys.home_game_topDownload), - GameGrid( - models: data, - ) - ], - ); - }, - loadingWidget: const CircularProgressIndicator(), - notFoundWidget: const Text('data'), - onError: const Text('data'),); + return viewModel.onNewsGameItems().toBuild( + onSuccess: (data) { + return Column( + children: [ + const HeaderButton(titleText: LocaleKeys.home_game_topDownload), + GameGrid( + models: data, + ) + ], + ); + }, + loadingWidget: const CircularProgressIndicator(), + notFoundWidget: const Text('data'), + onError: const Text('data'), + ); } } diff --git a/lib/view/home/social/service/ISocialService.dart b/lib/view/home/social/service/ISocialService.dart index e16ea66..892d888 100644 --- a/lib/view/home/social/service/ISocialService.dart +++ b/lib/view/home/social/service/ISocialService.dart @@ -4,7 +4,6 @@ import 'package:fluttermvvmtemplate/view/home/social/model/social_user_model.dar import 'package:vexana/vexana.dart'; abstract class ISocialServiceService { - ISocialServiceService(this.manager, this.scaffoldyKey); final INetworkManager manager; final GlobalKey? scaffoldyKey; diff --git a/lib/view/home/social/service/socail_service.dart b/lib/view/home/social/service/socail_service.dart index fb5e8df..4e3fac9 100644 --- a/lib/view/home/social/service/socail_service.dart +++ b/lib/view/home/social/service/socail_service.dart @@ -13,18 +13,24 @@ class SocailService extends ISocialServiceService with ServiceHelper { @override Future fetchUser(id) async { - final response = await manager.send(NetworkRoutes.FRIENDS.rawValue, - parseModel: SocialUser(), urlSuffix: '/$id', method: RequestType.GET,); + final response = await manager.send( + NetworkRoutes.FRIENDS.rawValue, + parseModel: SocialUser(), + urlSuffix: '/$id', + method: RequestType.GET, + ); showMessage(scaffoldyKey, response.error); return response.data; } @override Future> fetchUserHouseList(FriendQuery query) async { - final response = await manager.send>(NetworkRoutes.FRIENDS.rawValue, - parseModel: SocialUser(), - queryParameters: {FriendQueryEnum.LIMIT.rawValue: query.limit, FriendQueryEnum.Q.rawValue: query.q}, - method: RequestType.GET,); + final response = await manager.send>( + NetworkRoutes.FRIENDS.rawValue, + parseModel: SocialUser(), + queryParameters: {FriendQueryEnum.LIMIT.rawValue: query.limit, FriendQueryEnum.Q.rawValue: query.q}, + method: RequestType.GET, + ); showMessage(scaffoldyKey, response.error); return response.data ?? []; } diff --git a/lib/view/home/social/view/social_view.dart b/lib/view/home/social/view/social_view.dart index ed5efa9..645253c 100644 --- a/lib/view/home/social/view/social_view.dart +++ b/lib/view/home/social/view/social_view.dart @@ -11,6 +11,8 @@ import 'package:fluttermvvmtemplate/view/home/social/viewmodel/social_view_model import 'package:kartal/kartal.dart'; class SocialView extends StatelessWidget { + SocialView({Key? key}) : super(key: key); + final GlobalKey scaffoldKey = GlobalKey(); @override diff --git a/lib/view/home/social/view/social_view_detial.dart b/lib/view/home/social/view/social_view_detial.dart index c9cb0ff..7816072 100644 --- a/lib/view/home/social/view/social_view_detial.dart +++ b/lib/view/home/social/view/social_view_detial.dart @@ -7,7 +7,6 @@ import 'package:kartal/kartal.dart'; import 'package:vexana/vexana.dart'; class SocialUserViewDetail extends StatelessWidget { - SocialUserViewDetail({ Key? key, this.socialUser, @@ -21,15 +20,16 @@ class SocialUserViewDetail extends StatelessWidget { Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), - body: socialServiceService.fetchUser(socialUser!.id).toBuild( - onSuccess: (data) { - return Center(child: Image.network(data!.image!)); - }, - loadingWidget: const CircularProgressIndicator(), - notFoundWidget: const Center( - child: Text('Not Found'), + body: socialServiceService.fetchUser(socialUser!.id).toBuild( + onSuccess: (data) { + return Center(child: Image.network(data!.image!)); + }, + loadingWidget: const CircularProgressIndicator(), + notFoundWidget: const Center( + child: Text('Not Found'), + ), + onError: const Text('errro'), ), - onError: const Text('errro'),), ); } } diff --git a/lib/view/settings/view/settings_view.dart b/lib/view/settings/view/settings_view.dart index 9724b3b..41300c3 100644 --- a/lib/view/settings/view/settings_view.dart +++ b/lib/view/settings/view/settings_view.dart @@ -13,6 +13,8 @@ import 'package:kartal/kartal.dart'; import 'package:provider/provider.dart'; class SettingsView extends StatelessWidget { + const SettingsView({Key? key}) : super(key: key); + @override Widget build(BuildContext context) { return BaseView( @@ -38,7 +40,9 @@ class SettingsView extends StatelessWidget { Text( ''.version, textAlign: TextAlign.center, - style: context.textTheme.headline6?.copyWith(fontWeight: FontWeight.w100), + style: context.textTheme.headline6?.copyWith( + fontWeight: FontWeight.w100, + ), ).toSliver, context.emptySizedHeightBoxNormal.toSliver, buildTextButtonLogOut(context, viewModel).toSliver, @@ -51,70 +55,111 @@ class SettingsView extends StatelessWidget { Card buildCardNavigationTour(SettingsViewModel viewModel) { return Card( - child: ListTile( - onTap: viewModel.navigateToOnBoard, - title: Text(LocaleKeys.home_setting_applicationTour.tr()), - trailing: const Icon(Icons.arrow_right), - ),); + child: ListTile( + onTap: viewModel.navigateToOnBoard, + title: Text(LocaleKeys.home_setting_applicationTour.tr()), + trailing: const Icon(Icons.arrow_right), + ), + ); } TextButton buildTextButtonLogOut(BuildContext context, SettingsViewModel viewModel) { return TextButton.icon( - style: ButtonStyle( - shape: MaterialStateProperty.all(const StadiumBorder()), - padding: MaterialStateProperty.all(context.paddingNormal), - backgroundColor: MaterialStateProperty.all(context.colorScheme.onError.withOpacity(0.7)),), - onPressed: viewModel.logutApp, - icon: const Icon(Icons.exit_to_app), - label: Text(LocaleKeys.home_setting_exit.tr()),); + style: ButtonStyle( + shape: MaterialStateProperty.all(const StadiumBorder()), + padding: MaterialStateProperty.all(context.paddingNormal), + backgroundColor: MaterialStateProperty.all(context.colorScheme.onError.withOpacity(0.7)), + ), + onPressed: viewModel.logutApp, + icon: const Icon(Icons.exit_to_app), + label: Text(LocaleKeys.home_setting_exit.tr()), + ); } Widget buildBuildCardHeaderProjectCore(BuildContext context, SettingsViewModel viewModel) { - return buildCardHeader(context, viewModel, title: LocaleKeys.home_setting_core_title, children: [ - ListTile( - title: Text(LocaleKeys.home_setting_core_themeTitle.tr()), - trailing: IconButton( - icon: context.watch().currenThemeEnum == AppThemes.LIGHT ? LottiePathEnum.MOON.toWidget : LottiePathEnum.SUNNY.toWidget, - onPressed: viewModel.changeAppTheme,), - subtitle: const Text(LocaleKeys.home_setting_core_themeDesc), - ), - ListTile( - title: Text(LocaleKeys.home_setting_core_langTitle.tr()), - trailing: Observer(builder: (_) { - return DropdownButton(items: [ - DropdownMenuItem(value: LanguageManager.instance.trLocale, child: Text(LanguageManager.instance.trLocale.countryCode!.toUpperCase())), - DropdownMenuItem(value: LanguageManager.instance.enLocale, child: Text(LanguageManager.instance.enLocale.countryCode!.toUpperCase())), - ], onChanged: viewModel.changeAppLocalization, value: viewModel.appLocale,); - },), - subtitle: Text(LocaleKeys.home_setting_core_langDesc.tr()), - ), - ],); + return buildCardHeader( + context, + viewModel, + title: LocaleKeys.home_setting_core_title, + children: [ + ListTile( + title: Text(LocaleKeys.home_setting_core_themeTitle.tr()), + trailing: IconButton( + icon: context.watch().currenThemeEnum == AppThemes.LIGHT + ? LottiePathEnum.MOON.toWidget + : LottiePathEnum.SUNNY.toWidget, + onPressed: viewModel.changeAppTheme, + ), + subtitle: const Text(LocaleKeys.home_setting_core_themeDesc), + ), + ListTile( + title: Text(LocaleKeys.home_setting_core_langTitle.tr()), + trailing: Observer( + builder: (_) { + return DropdownButton( + items: [ + DropdownMenuItem( + value: LanguageManager.instance.trLocale, + child: Text( + LanguageManager.instance.trLocale.countryCode?.toUpperCase() ?? '', + ), + ), + DropdownMenuItem( + value: LanguageManager.instance.enLocale, + child: Text( + LanguageManager.instance.enLocale.countryCode?.toUpperCase() ?? '', + ), + ), + ], + onChanged: viewModel.changeAppLocalization, + value: viewModel.appLocale, + ); + }, + ), + subtitle: Text(LocaleKeys.home_setting_core_langDesc.tr()), + ), + ], + ); } - Widget buildCardHeader(BuildContext context, SettingsViewModel viewModel, {required String title, required List children}) { + Widget buildCardHeader( + BuildContext context, + SettingsViewModel viewModel, { + required String title, + required List children, + }) { return Card( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [Padding(padding: context.paddingLow, child: Text(title.tr(), style: context.textTheme.headline5)), const Divider(), ...children], + children: [ + Padding(padding: context.paddingLow, child: Text(title.tr(), style: context.textTheme.headline5)), + const Divider(), + ...children + ], ), ); } Widget buildCardAbout(BuildContext context, SettingsViewModel viewModel) { - return buildCardHeader(context, viewModel, title: LocaleKeys.home_setting_about_title, children: [ - ListTile( - onTap: viewModel.navigateToContribution, - leading: const Icon(Icons.favorite), - title: Text(LocaleKeys.home_setting_about_contribitions.tr()), - trailing: const Icon(Icons.keyboard_arrow_right_outlined), - ), - ListTile( - onTap: viewModel.navigateToFakeContribution, - leading: const Icon(Icons.home), - title: const Text('Home Page'), - trailing: const Icon(Icons.keyboard_arrow_right_outlined), - ) - ],); + return buildCardHeader( + context, + viewModel, + title: LocaleKeys.home_setting_about_title, + children: [ + ListTile( + onTap: viewModel.navigateToContribution, + leading: const Icon(Icons.favorite), + title: Text(LocaleKeys.home_setting_about_contribitions.tr()), + trailing: const Icon(Icons.keyboard_arrow_right_outlined), + ), + ListTile( + onTap: viewModel.navigateToFakeContribution, + leading: const Icon(Icons.home), + title: const Text('Home Page'), + trailing: const Icon(Icons.keyboard_arrow_right_outlined), + ) + ], + ); } Card buildCardUser(BuildContext context, SettingsViewModel viewModel) { @@ -135,10 +180,11 @@ class SettingsView extends StatelessWidget { NestedScrollView buildNestedScrollView() { return NestedScrollView( - headerSliverBuilder: (context, innerBoxIsScrolled) { - return [buildSliverAppBar(context)]; - }, - body: Column(),); + headerSliverBuilder: (context, innerBoxIsScrolled) { + return [buildSliverAppBar(context)]; + }, + body: Column(), + ); } SliverAppBar buildSliverAppBar(BuildContext context) { diff --git a/lib/view/settings/view/subview/settings_dynamic_view.dart b/lib/view/settings/view/subview/settings_dynamic_view.dart index 83ed60c..cf08072 100644 --- a/lib/view/settings/view/subview/settings_dynamic_view.dart +++ b/lib/view/settings/view/subview/settings_dynamic_view.dart @@ -5,7 +5,6 @@ import 'package:kartal/kartal.dart'; import 'package:webview_flutter/webview_flutter.dart'; class SettingsDynamicView extends StatelessWidget { - const SettingsDynamicView({Key? key, required this.model}) : super(key: key); final SettingsDynamicModel model; @override diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 287b6a9..da6ff49 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,8 +5,22 @@ import FlutterMacOS import Foundation +import connectivity_plus_macos +import firebase_analytics +import firebase_core +import package_info_plus_macos +import path_provider_macos import shared_preferences_macos +import sqflite +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin")) + FLTFirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAnalyticsPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart b/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart index c67b52c..e63d917 100644 --- a/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart +++ b/module/architecture_widgets/lib/src/list-view/indicator_list_view.dart @@ -1,7 +1,12 @@ import 'package:flutter/material.dart'; class IndactorListView extends StatelessWidget { - const IndactorListView({Key? key, this.itemCount, this.onListItem, this.currentIndex}) : super(key: key); + const IndactorListView({ + Key? key, + this.itemCount, + this.onListItem, + this.currentIndex, + }) : super(key: key); final int? itemCount; final int? currentIndex; diff --git a/module/architecture_widgets/lib/src/text/auto_locale_text.dart b/module/architecture_widgets/lib/src/text/auto_locale_text.dart index 4c9c73d..da7d6b5 100644 --- a/module/architecture_widgets/lib/src/text/auto_locale_text.dart +++ b/module/architecture_widgets/lib/src/text/auto_locale_text.dart @@ -4,7 +4,10 @@ import 'package:flutter/material.dart'; import 'package:fluttermvvmtemplate/core/extension/string_extension.dart'; class AutoLocaleText extends StatelessWidget { - const AutoLocaleText({Key? key, required this.value, this.textAlign, this.style}) : super(key: key); + const AutoLocaleText({Key? key, required this.value, this.textAlign, this.style}) + : super( + key: key, + ); final String value; final TextAlign? textAlign; final TextStyle? style; diff --git a/module/architecture_widgets/pubspec.yaml b/module/architecture_widgets/pubspec.yaml index 3e3bf75..cabef7b 100644 --- a/module/architecture_widgets/pubspec.yaml +++ b/module/architecture_widgets/pubspec.yaml @@ -2,6 +2,7 @@ name: architecture_widgets description: A new Flutter package project. version: 0.0.1 homepage: home +publish_to: none environment: sdk: ">=2.12.0 <3.0.0" diff --git a/pubspec.lock b/pubspec.lock index 65db1d8..88b0eb9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -35,7 +35,7 @@ packages: name: animations url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.7" architecture_theme: dependency: "direct main" description: @@ -58,7 +58,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.1.2" + version: "3.3.2" args: dependency: transitive description: @@ -79,7 +79,7 @@ packages: name: auto_size_text url: "https://pub.dartlang.org" source: hosted - version: "3.0.0-nullsafety.0" + version: "3.0.0" boolean_selector: dependency: transitive description: @@ -149,21 +149,28 @@ packages: name: cached_network_image url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" - characters: + version: "3.2.2" + cached_network_image_platform_interface: dependency: transitive description: - name: characters + name: cached_network_image_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" - charcode: + version: "2.0.0" + cached_network_image_web: dependency: transitive description: - name: charcode + name: cached_network_image_web url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.0.2" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" checked_yaml: dependency: transitive description: @@ -254,21 +261,21 @@ packages: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.1.1" crypto: dependency: transitive description: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.5" dart_style: dependency: transitive description: @@ -282,14 +289,14 @@ packages: name: dbus url: "https://pub.dartlang.org" source: hosted - version: "0.7.4" + version: "0.7.8" device_info: dependency: transitive description: name: device_info url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.3" device_info_platform_interface: dependency: transitive description: @@ -297,6 +304,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.1" + diacritic: + dependency: transitive + description: + name: diacritic + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.3" dio: dependency: transitive description: @@ -338,14 +352,14 @@ packages: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "2.0.1" file: dependency: transitive description: name: file url: "https://pub.dartlang.org" source: hosted - version: "6.1.0" + version: "6.1.4" firebase_analytics: dependency: "direct main" description: @@ -406,14 +420,14 @@ packages: name: flutter_blurhash url: "https://pub.dartlang.org" source: hosted - version: "0.6.0" + version: "0.7.0" flutter_cache_manager: dependency: transitive description: name: flutter_cache_manager url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.3.0" flutter_localizations: dependency: transitive description: flutter @@ -425,14 +439,14 @@ packages: name: flutter_mobx url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.6+4" flutter_rating_bar: dependency: "direct main" description: name: flutter_rating_bar url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.1" flutter_svg: dependency: "direct main" description: @@ -463,7 +477,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.1.0" graphs: dependency: transitive description: @@ -477,7 +491,7 @@ packages: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.13.1" + version: "0.13.5" http_multi_server: dependency: transitive description: @@ -491,14 +505,7 @@ packages: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" - image: - dependency: transitive - description: - name: image - url: "https://pub.dartlang.org" - source: hosted - version: "3.2.2" + version: "4.0.2" intl: dependency: transitive description: @@ -540,21 +547,21 @@ packages: name: kartal url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.5.1" logger: dependency: "direct main" description: name: logger url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.1.0" logging: dependency: transitive description: name: logging url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.1.0" lottie: dependency: "direct main" description: @@ -568,7 +575,7 @@ packages: name: mask_text_input_formatter url: "https://pub.dartlang.org" source: hosted - version: "2.0.0-nullsafety.2" + version: "2.4.0" matcher: dependency: transitive description: @@ -596,7 +603,7 @@ packages: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.2" mobx: dependency: "direct main" description: @@ -638,21 +645,56 @@ packages: name: octo_image url: "https://pub.dartlang.org" source: hosted - version: "1.0.0+1" + version: "1.0.2" package_config: dependency: transitive description: name: package_config url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" - package_info: + version: "2.1.0" + package_info_plus: dependency: transitive description: - name: package_info + name: package_info_plus url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "1.4.3+1" + package_info_plus_linux: + dependency: transitive + description: + name: package_info_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + package_info_plus_macos: + dependency: transitive + description: + name: package_info_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + package_info_plus_web: + dependency: transitive + description: + name: package_info_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.6" + package_info_plus_windows: + dependency: transitive + description: + name: package_info_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" path: dependency: transitive description: @@ -680,42 +722,56 @@ packages: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.11" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.21" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.7" path_provider_macos: dependency: transitive description: name: path_provider_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.5" path_provider_windows: dependency: transitive description: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.3" pedantic: dependency: transitive description: name: pedantic url: "https://pub.dartlang.org" source: hosted - version: "1.11.0" + version: "1.11.1" petitparser: dependency: transitive description: @@ -729,7 +785,7 @@ packages: name: platform url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.1.0" plugin_platform_interface: dependency: transitive description: @@ -743,14 +799,14 @@ packages: name: pool url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: name: process url: "https://pub.dartlang.org" source: hosted - version: "4.2.1" + version: "4.2.4" provider: dependency: "direct main" description: @@ -764,14 +820,14 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.2" pubspec_parse: dependency: transitive description: name: pubspec_parse url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.2.1" retry: dependency: transitive description: @@ -785,77 +841,91 @@ packages: name: rxdart url: "https://pub.dartlang.org" source: hosted - version: "0.26.0" + version: "0.27.5" sembast: dependency: transitive description: name: sembast url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.3.1" share: dependency: transitive description: name: share url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.4" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.15" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.14" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.1" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.4" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.4" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.1.1" shelf: dependency: transitive description: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.4.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" shimmer: dependency: "direct main" description: @@ -895,14 +965,14 @@ packages: name: sqflite url: "https://pub.dartlang.org" source: hosted - version: "2.0.0+3" + version: "2.2.0+2" sqflite_common: dependency: transitive description: name: sqflite_common url: "https://pub.dartlang.org" source: hosted - version: "2.0.0+2" + version: "2.4.0+2" stack_trace: dependency: transitive description: @@ -923,7 +993,7 @@ packages: name: stream_transform url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" string_scanner: dependency: transitive description: @@ -937,7 +1007,7 @@ packages: name: synchronized url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.0+3" term_glyph: dependency: transitive description: @@ -965,56 +1035,70 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" url_launcher: dependency: transitive description: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.0.3" + version: "6.1.6" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.21" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.17" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "3.0.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "3.0.1" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.1" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.13" url_launcher_windows: dependency: transitive description: name: url_launcher_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "3.0.1" uuid: dependency: transitive description: name: uuid url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.0.6" vector_math: dependency: transitive description: @@ -1042,14 +1126,14 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.2.0" webview_flutter: dependency: "direct main" description: @@ -1084,14 +1168,14 @@ packages: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "3.0.1" xdg_directories: dependency: transitive description: name: xdg_directories url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.2.0+2" xml: dependency: transitive description: @@ -1105,7 +1189,7 @@ packages: name: yaml url: "https://pub.dartlang.org" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: dart: ">=2.18.0 <3.0.0" flutter: ">=3.3.0"