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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 195 additions & 1 deletion analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -1 +1,195 @@
include: package:flutter_lints/flutter.yaml
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
# include: package:flutter_lints/flutter.yaml

linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
- always_declare_return_types
- always_put_required_named_parameters_first
- always_require_non_null_named_parameters
- always_use_package_imports
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
- avoid_catching_errors
- avoid_double_and_int_checks
- avoid_dynamic_calls
- avoid_empty_else
- avoid_escaping_inner_quotes
- avoid_field_initializers_in_const_classes
# We are already using the `parameter_assignments` lint.
# Adding final to parameters has the same effect as `parameter_assignments`
# so it doesn't make sense to use final parameters with `parameter_assignments`.
- avoid_final_parameters
- avoid_function_literals_in_foreach_calls
- avoid_implementing_value_types
- avoid_init_to_null
- avoid_multiple_declarations_per_line
- avoid_null_checks_in_equality_operators
- avoid_positional_boolean_parameters
- avoid_print
- avoid_private_typedef_functions
- avoid_redundant_argument_values
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null_for_future
- avoid_returning_null_for_void
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_type_to_string
- avoid_types_as_parameter_names
- avoid_unnecessary_containers
- avoid_unused_constructor_parameters
- avoid_void_async
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
# Similar to avoid-non-null-assertion, which is already used,
# basically it suggests to not ignore possible null value
- cast_nullable_to_non_nullable
- close_sinks
- comment_references
- conditional_uri_does_not_exist
- constant_identifier_names
- control_flow_in_finally
- curly_braces_in_flow_control_structures
- depend_on_referenced_packages
- deprecated_consistency
# - diagnostic_describe_all_properties
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- eol_at_end_of_file
- exhaustive_cases
- file_names
- hash_and_equals
- implementation_imports
- join_return_with_assignment
- leading_newlines_in_multiline_strings
- library_names
- library_prefixes
- lines_longer_than_80_chars
- literal_only_boolean_expressions
- no_adjacent_strings_in_list
- no_duplicate_case_values
- no_leading_underscores_for_library_prefixes
- no_leading_underscores_for_local_identifiers
- no_logic_in_create_state
- no_runtimeType_toString
- non_constant_identifier_names
- noop_primitive_operations
- null_check_on_nullable_type_parameter
- overridden_fields
- package_names
- package_prefixed_library_names
- parameter_assignments
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_constructors_over_static_methods
- prefer_contains
# These two are incompatible, and one should be selected depending on your project's style.
# - prefer_double_quotes
- prefer_single_quotes
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
- prefer_foreach
- prefer_for_elements_to_map_fromIterable
- prefer_function_declarations_over_variables
- prefer_generic_function_type_aliases
- prefer_if_elements_to_conditional_expressions
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_null_aware_method_calls
- prefer_null_aware_operators
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- prefer_void_to_null
- provide_deprecation_message
# - public_member_api_docs
- recursive_getters
- require_trailing_commas
- secure_pubspec_urls
- sized_box_for_whitespace
- sized_box_shrink_expand
- slash_for_doc_comments
- sort_child_properties_last
- sort_constructors_first
- sort_pub_dependencies
- sort_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally
- tighten_type_of_initializing_formals
- type_annotate_public_apis
- type_init_formals
- unawaited_futures
- unnecessary_await_in_return
- unnecessary_brace_in_string_interps
- unnecessary_breaks
- unnecessary_const
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_checks
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_raw_strings
- unnecessary_statements
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unnecessary_to_list_in_spreads
- unrelated_type_equality_checks
- unsafe_html
- use_build_context_synchronously
- use_colored_box
- use_decorated_box
- use_full_hex_values_for_flutter_colors
- use_function_type_syntax_for_parameters
- use_if_null_to_convert_nulls_to_bools
- use_is_even_rather_than_modulo
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
# - use_setters_to_change_properties
- use_string_buffers
- use_super_parameters
- use_test_throws_matchers
- valid_regexps
- void_checks
11 changes: 4 additions & 7 deletions lib/config/localisation/localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,10 @@ import 'package:flutter/services.dart';
import 'package:widgets_app/models/language_model.dart';
import 'package:widgets_app/models/locale_model.dart';

// import '../models/language_model.dart';
// import '../models/locale_model.dart';

class AppLocalizations {
final Locale locale;

AppLocalizations(this.locale);
final Locale locale;

static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
Expand All @@ -25,14 +22,14 @@ class AppLocalizations {

Future<AppLocalizations> load(Locale locale) async {
jsonContent = await rootBundle
.loadString("assets/locale/localization_${locale.languageCode}.json");
.loadString('assets/locale/localization_${locale.languageCode}.json');
_localizedValues = jsonDecode(jsonContent);

return this;
}

String text(String key) {
return _localizedValues![key] ?? "$key not found";
return _localizedValues![key] ?? '$key not found';
}

LocaleModel value() {
Expand All @@ -51,7 +48,7 @@ class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {

@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations appLocalizations = AppLocalizations(locale);
final AppLocalizations appLocalizations = AppLocalizations(locale);
await appLocalizations.load(locale);
return appLocalizations;
}
Expand Down
30 changes: 15 additions & 15 deletions lib/config/menu/menu_items.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import 'package:flutter/material.dart';

class MenuItem {
final String title;
final String subTitle;
final String link;
final IconData icon;

const MenuItem({
required this.title,
required this.subTitle,
required this.link,
required this.icon,
});
final String title;
final String subTitle;
final String link;
final IconData icon;
}

//
Expand All @@ -20,50 +20,50 @@ const List<MenuItem> appMenuItems = [
title: 'buttons',
subTitle: 'sub_buttons',
link: '/buttons',
icon: Icons.smart_button_outlined),
icon: Icons.smart_button_outlined,),
MenuItem(
title: 'cards',
subTitle: 'sub_cards',
link: '/cards',
icon: Icons.card_membership_outlined),
icon: Icons.card_membership_outlined,),
MenuItem(
title: 'progress_indicators',
subTitle: 'sub_proInd',
link: '/progress',
icon: Icons.refresh_rounded),
icon: Icons.refresh_rounded,),
MenuItem(
title: 'snackbars_dialogs',
subTitle: 'sub_snack_dia',
link: '/snackbars',
icon: Icons.info_outline),
icon: Icons.info_outline,),
MenuItem(
title: 'anim_contain',
subTitle: 'sub_anim_cont',
link: '/animated',
icon: Icons.check_box_outline_blank_outlined),
icon: Icons.check_box_outline_blank_outlined,),
MenuItem(
title: 'ui_cont_tiles',
subTitle: 'sub_ui_cont_tiles',
link: '/ui_controls',
icon: Icons.car_rental_sharp),
icon: Icons.car_rental_sharp,),
MenuItem(
title: 'app_intro',
subTitle: 'app_intro_sub',
link: '/tutorial',
icon: Icons.accessibility_new_rounded),
icon: Icons.accessibility_new_rounded,),
MenuItem(
title: 'infinite_scroll',
subTitle: "sub_infi_scroll",
subTitle: 'sub_infi_scroll',
link: '/infinite',
icon: Icons.list_alt_outlined),
icon: Icons.list_alt_outlined,),
MenuItem(
title: 'counter_sceen',
subTitle: 'sub_counter',
link: '/counter',
icon: Icons.numbers),
icon: Icons.numbers,),
MenuItem(
title: 'change_theme',
subTitle: 'change_apptheme',
link: '/theme_changer',
icon: Icons.color_lens_outlined),
icon: Icons.color_lens_outlined,),
];
6 changes: 3 additions & 3 deletions lib/config/theme/app_theme.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ const List<Color> colorList = [
];

class AppTheme {
final int selectedColor;
final bool isDarkMode;

AppTheme({this.isDarkMode = false, this.selectedColor = 0})
: assert(selectedColor >= 0, 'selectedColor must be greater then 0'),
assert(selectedColor < colorList.length,
'selectedColor must be less or equal than ${colorList.length}');
'selectedColor must be less or equal than ${colorList.length}',);
final int selectedColor;
final bool isDarkMode;

ThemeData getTheme() => ThemeData(
brightness: isDarkMode ? Brightness.dark : Brightness.light,
Expand Down
11 changes: 5 additions & 6 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:widgets_app/config/localisation/localizations.dart';
import 'package:widgets_app/config/router/app_router.dart';
import 'package:widgets_app/config/theme/app_theme.dart';
import 'package:widgets_app/models/language_model.dart';
import 'package:widgets_app/presentation/providers/language_provider.dart';
import 'package:widgets_app/presentation/providers/theme_provider.dart';

import 'config/localisation/localizations.dart';
import 'presentation/providers/language_provider.dart';

void main() {
runApp(
const ProviderScope(
Expand All @@ -21,7 +20,7 @@ class MainApp extends ConsumerWidget {
const MainApp({super.key});

@override
Widget build(BuildContext context, ref) {
Widget build(BuildContext context, WidgetRef ref) {
final LanguageEntity locale = ref.watch(localeProvider);
// final isDarkMode = ref.watch(isDarkModeProvider);
// final selectedColor = ref.watch(selectedColorProvider);
Expand All @@ -33,10 +32,10 @@ class MainApp extends ConsumerWidget {
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: const [Locale('en', 'IN'), Locale('es', "ES")],
supportedLocales: const [Locale('en', 'IN'), Locale('es', 'ES')],
localeResolutionCallback:
(Locale? locale, Iterable<Locale> supportedLocales) {
for (Locale supportedLocale in supportedLocales) {
for (final Locale supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale!.languageCode ||
supportedLocale.countryCode == locale.countryCode) {
return supportedLocale;
Expand Down
8 changes: 4 additions & 4 deletions lib/models/language_model.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
class LanguageEntity {

const LanguageEntity({required this.code, required this.value, this.text});
final String code;
final String value;
final String? text;

const LanguageEntity({required this.code, required this.value, this.text});
}

class Languages {
const Languages._();

// Languages supported
static const languages = [
LanguageEntity(code: 'en', value: 'IN', text: "English"),
LanguageEntity(code: 'es', value: 'ES', text: "Spanish"),
LanguageEntity(code: 'en', value: 'IN', text: 'English'),
LanguageEntity(code: 'es', value: 'ES', text: 'Spanish'),
];
}
Loading