diff --git a/mobile/packages/ui/analysis_options.yaml b/mobile/packages/ui/analysis_options.yaml index 609eb5d8aa..1bd78bc1b0 100644 --- a/mobile/packages/ui/analysis_options.yaml +++ b/mobile/packages/ui/analysis_options.yaml @@ -1,10 +1,72 @@ -include: package:flutter_lints/flutter.yaml +# For more linters, we can check https://dart-lang.github.io/linter/lints/index.html +# or https://pub.dev/packages/lint (Effective dart) +# use "flutter analyze ." or "dart analyze ." for running lint checks +include: package:flutter_lints/flutter.yaml linter: rules: - - always_declare_return_types - - always_put_required_named_parameters_first + # Ref https://github.com/flutter/packages/blob/master/packages/flutter_lints/lib/flutter.yaml + # Ref https://dart-lang.github.io/linter/lints/ - avoid_print + - avoid_unnecessary_containers + - avoid_web_libraries_in_flutter + - no_logic_in_create_state - prefer_const_constructors + - prefer_const_constructors_in_immutables + - prefer_const_declarations - prefer_const_literals_to_create_immutables + - prefer_final_locals + - require_trailing_commas + - sized_box_for_whitespace + - use_full_hex_values_for_flutter_colors - use_key_in_widget_constructors + - cancel_subscriptions + + + - avoid_empty_else + - exhaustive_cases + + # just style suggestions + - sort_pub_dependencies + - use_rethrow_when_possible + - prefer_double_quotes + - directives_ordering + - always_use_package_imports + - sort_child_properties_last + - unawaited_futures + +analyzer: + errors: + avoid_empty_else: error + exhaustive_cases: error + curly_braces_in_flow_control_structures: error + directives_ordering: error + require_trailing_commas: error + always_use_package_imports: warning + prefer_final_fields: error + unused_import: error + camel_case_types: error + prefer_is_empty: warning + use_rethrow_when_possible: info + unused_field: warning + use_key_in_widget_constructors: warning + sort_child_properties_last: warning + sort_pub_dependencies: warning + library_private_types_in_public_api: warning + constant_identifier_names: ignore + prefer_const_constructors: warning + prefer_const_declarations: warning + prefer_const_constructors_in_immutables: warning + prefer_final_locals: warning + unnecessary_const: error + cancel_subscriptions: error + unrelated_type_equality_checks: error + unnecessary_cast: info + + + unawaited_futures: warning # convert to warning after fixing existing issues + invalid_dependency: info + use_build_context_synchronously: ignore # experimental lint, requires many changes + prefer_interpolation_to_compose_strings: ignore # later too many warnings + prefer_double_quotes: ignore # too many warnings + avoid_renaming_method_parameters: ignore # incorrect warnings for `equals` overrides diff --git a/mobile/packages/ui/lib/components/buttons/button_widget.dart b/mobile/packages/ui/lib/components/buttons/button_widget.dart index 29efd4c99c..ea4255981c 100644 --- a/mobile/packages/ui/lib/components/buttons/button_widget.dart +++ b/mobile/packages/ui/lib/components/buttons/button_widget.dart @@ -8,9 +8,9 @@ import 'package:ente_ui/theme/colors.dart'; import 'package:ente_ui/theme/ente_theme.dart'; import 'package:ente_ui/theme/text_style.dart'; import 'package:ente_ui/utils/dialog_util.dart'; +import 'package:ente_utils/debouncer.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; -import 'package:ente_utils/debouncer.dart'; enum ButtonSize { small, large } diff --git a/mobile/packages/ui/lib/components/buttons/dynamic_fab.dart b/mobile/packages/ui/lib/components/buttons/dynamic_fab.dart index 1ff4aab191..0cb31406dd 100644 --- a/mobile/packages/ui/lib/components/buttons/dynamic_fab.dart +++ b/mobile/packages/ui/lib/components/buttons/dynamic_fab.dart @@ -64,10 +64,12 @@ class DynamicFAB extends StatelessWidget { child: OutlinedButton( onPressed: isFormValid! ? onPressedFunction as void Function()? : null, - child: Text(buttonText!, - style: isFormValid! - ? getEnteTextTheme(context).body - : getEnteTextTheme(context).bodyFaint), + child: Text( + buttonText!, + style: isFormValid! + ? getEnteTextTheme(context).body + : getEnteTextTheme(context).bodyFaint, + ), ), ); } diff --git a/mobile/packages/ui/lib/components/captioned_text_widget.dart b/mobile/packages/ui/lib/components/captioned_text_widget.dart index f4d6eb423a..bc9a9708d3 100644 --- a/mobile/packages/ui/lib/components/captioned_text_widget.dart +++ b/mobile/packages/ui/lib/components/captioned_text_widget.dart @@ -1,4 +1,4 @@ -import '../theme/ente_theme.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; import 'package:flutter/material.dart'; class CaptionedTextWidget extends StatelessWidget { diff --git a/mobile/packages/ui/lib/components/divider_widget.dart b/mobile/packages/ui/lib/components/divider_widget.dart index c4a3374abb..71d8165cf0 100644 --- a/mobile/packages/ui/lib/components/divider_widget.dart +++ b/mobile/packages/ui/lib/components/divider_widget.dart @@ -1,4 +1,4 @@ -import '../theme/ente_theme.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; import 'package:flutter/material.dart'; enum DividerType { diff --git a/mobile/packages/ui/lib/components/loading_widget.dart b/mobile/packages/ui/lib/components/loading_widget.dart index 999f0aa3c2..113d9e199f 100644 --- a/mobile/packages/ui/lib/components/loading_widget.dart +++ b/mobile/packages/ui/lib/components/loading_widget.dart @@ -1,4 +1,4 @@ -import '../theme/ente_theme.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; import 'package:flutter/material.dart'; class EnteLoadingWidget extends StatelessWidget { diff --git a/mobile/packages/ui/lib/components/title_bar_title_widget.dart b/mobile/packages/ui/lib/components/title_bar_title_widget.dart index 3af955fea3..184c5726a1 100644 --- a/mobile/packages/ui/lib/components/title_bar_title_widget.dart +++ b/mobile/packages/ui/lib/components/title_bar_title_widget.dart @@ -1,4 +1,4 @@ -import '../theme/ente_theme.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; import 'package:flutter/material.dart'; class TitleBarTitleWidget extends StatelessWidget { diff --git a/mobile/packages/ui/lib/components/title_bar_widget.dart b/mobile/packages/ui/lib/components/title_bar_widget.dart index 9517bc1749..ab60e0531c 100644 --- a/mobile/packages/ui/lib/components/title_bar_widget.dart +++ b/mobile/packages/ui/lib/components/title_bar_widget.dart @@ -1,5 +1,5 @@ -import '../theme/ente_theme.dart'; -import '../components/buttons/icon_button_widget.dart'; +import 'package:ente_ui/components/buttons/icon_button_widget.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; import 'package:flutter/material.dart'; class TitleBarWidget extends StatelessWidget { diff --git a/mobile/packages/ui/lib/pages/log_file_viewer.dart b/mobile/packages/ui/lib/pages/log_file_viewer.dart index d002556852..bfbfeda15a 100644 --- a/mobile/packages/ui/lib/pages/log_file_viewer.dart +++ b/mobile/packages/ui/lib/pages/log_file_viewer.dart @@ -1,8 +1,8 @@ import 'dart:io'; import 'package:ente_ui/components/loading_widget.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; class LogFileViewer extends StatefulWidget { final File file; diff --git a/mobile/packages/ui/lib/pages/web_page.dart b/mobile/packages/ui/lib/pages/web_page.dart index 10652d0e51..e93f8b153e 100644 --- a/mobile/packages/ui/lib/pages/web_page.dart +++ b/mobile/packages/ui/lib/pages/web_page.dart @@ -1,4 +1,4 @@ -import '../components/loading_widget.dart'; +import 'package:ente_ui/components/loading_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; diff --git a/mobile/packages/ui/lib/theme/ente_theme.dart b/mobile/packages/ui/lib/theme/ente_theme.dart index 25e16e705f..b8825bb70b 100644 --- a/mobile/packages/ui/lib/theme/ente_theme.dart +++ b/mobile/packages/ui/lib/theme/ente_theme.dart @@ -1,7 +1,7 @@ +import 'package:ente_ui/theme/colors.dart'; +import 'package:ente_ui/theme/effects.dart'; +import 'package:ente_ui/theme/text_style.dart'; import 'package:flutter/material.dart'; -import 'colors.dart'; -import 'effects.dart'; -import 'text_style.dart'; class EnteTheme { final EnteTextTheme textTheme; diff --git a/mobile/packages/ui/lib/theme/ente_theme_data.dart b/mobile/packages/ui/lib/theme/ente_theme_data.dart index 8e2448feb1..8c2cf18786 100644 --- a/mobile/packages/ui/lib/theme/ente_theme_data.dart +++ b/mobile/packages/ui/lib/theme/ente_theme_data.dart @@ -1,6 +1,6 @@ -import '../theme/colors.dart'; +import 'package:ente_ui/theme/colors.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; import 'package:flutter/material.dart'; -import '../theme/ente_theme.dart'; final lightThemeData = ThemeData( fontFamily: 'Inter', diff --git a/mobile/packages/ui/lib/theme/multi_app_demo.dart b/mobile/packages/ui/lib/theme/multi_app_demo.dart index 939cbe81bb..13f8cd9f70 100644 --- a/mobile/packages/ui/lib/theme/multi_app_demo.dart +++ b/mobile/packages/ui/lib/theme/multi_app_demo.dart @@ -1,10 +1,10 @@ // Demo: Complete working example showing multi-app theme compatibility // This file demonstrates how the reusable theme system works for different apps +import 'package:ente_ui/theme/colors.dart'; +import 'package:ente_ui/theme/ente_theme.dart'; +import 'package:ente_ui/theme/ente_theme_data.dart'; import 'package:flutter/material.dart'; -import 'colors.dart'; -import 'ente_theme_data.dart'; -import 'ente_theme.dart'; /// App 1: E-commerce app with blue theme class ECommerceApp { @@ -210,7 +210,8 @@ class DemoHomePage extends StatelessWidget { final isSelected = index == currentAppIndex; return FilterChip( label: Text( - ['E-commerce', 'Social', 'Finance', 'Gaming'][index]), + ['E-commerce', 'Social', 'Finance', 'Gaming'][index], + ), selected: isSelected, onSelected: (_) => onAppChanged(index), backgroundColor: colorScheme.fillFaint, diff --git a/mobile/packages/ui/lib/theme/text_style.dart b/mobile/packages/ui/lib/theme/text_style.dart index d6b69ca83f..f8b8caad7b 100644 --- a/mobile/packages/ui/lib/theme/text_style.dart +++ b/mobile/packages/ui/lib/theme/text_style.dart @@ -1,6 +1,6 @@ +import 'package:ente_ui/theme/colors.dart'; +import 'package:ente_ui/theme/platform_text_config.dart'; import 'package:flutter/material.dart'; -import '../theme/colors.dart'; -import '../theme/platform_text_config.dart'; const FontWeight _regularWeight = FontWeight.w500; const FontWeight _boldWeight = FontWeight.w600; diff --git a/mobile/packages/ui/lib/utils/toast_util.dart b/mobile/packages/ui/lib/utils/toast_util.dart index 8b03a1f778..336956232e 100644 --- a/mobile/packages/ui/lib/utils/toast_util.dart +++ b/mobile/packages/ui/lib/utils/toast_util.dart @@ -21,7 +21,7 @@ void showToast( fontSize: 16.0, ); } on MissingPluginException catch (_) { - Widget toast = Container( + final toast = Container( padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 12.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(25.0), diff --git a/mobile/packages/ui/pubspec.yaml b/mobile/packages/ui/pubspec.yaml index e501e11fad..15be90cfc2 100644 --- a/mobile/packages/ui/pubspec.yaml +++ b/mobile/packages/ui/pubspec.yaml @@ -8,8 +8,6 @@ environment: flutter: ">=1.17.0" dependencies: - flutter: - sdk: flutter dio: ^5.8.0+1 ente_base: path: ../../packages/base @@ -21,6 +19,8 @@ dependencies: path: ../../packages/strings ente_utils: path: ../../packages/utils + flutter: + sdk: flutter flutter_inappwebview: ^6.1.5 fluttertoast: ^8.1.1 modal_bottom_sheet: ^3.0.0 @@ -28,8 +28,8 @@ dependencies: window_manager: ^0.5.0 dev_dependencies: + flutter_lints: ^5.0.0 flutter_test: sdk: flutter - flutter_lints: ^5.0.0 flutter: