From c2e881c139eccbfd56e56f6b18de5d12d3ab8463 Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Thu, 7 Oct 2021 18:50:33 +0200 Subject: [PATCH 01/10] Minor changes --- lib/widgets/workouts/gym_mode.dart | 2 +- pubspec.lock | 18 +++++++++--------- test/nutritional_meal_form_test.dart | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/widgets/workouts/gym_mode.dart b/lib/widgets/workouts/gym_mode.dart index 68d88c447..d7c375c27 100644 --- a/lib/widgets/workouts/gym_mode.dart +++ b/lib/widgets/workouts/gym_mode.dart @@ -464,7 +464,7 @@ class _LogPageState extends State { ElevatedButton( child: (!_isSaving) ? Text(AppLocalizations.of(context).save) - : Container( + : SizedBox( height: 20, width: 20, child: CircularProgressIndicator( diff --git a/pubspec.lock b/pubspec.lock index 9667e9c60..c40a1ab8a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -56,7 +56,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" build_config: dependency: transitive description: @@ -70,7 +70,7 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" build_resolvers: dependency: transitive description: @@ -84,14 +84,14 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.4" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "7.2.2" built_collection: dependency: transitive description: @@ -224,7 +224,7 @@ packages: name: csslib url: "https://pub.dartlang.org" source: hosted - version: "0.17.0" + version: "0.17.1" cupertino_icons: dependency: "direct main" description: @@ -292,7 +292,7 @@ packages: name: flutter_html url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.5" flutter_keyboard_visibility: dependency: transitive description: @@ -419,7 +419,7 @@ packages: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.13.3" + version: "0.13.4" http_multi_server: dependency: transitive description: @@ -440,7 +440,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.0.7" + version: "3.0.8" image_picker: dependency: "direct main" description: @@ -977,7 +977,7 @@ packages: name: webview_flutter_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.2.0" webview_flutter_wkwebview: dependency: transitive description: diff --git a/test/nutritional_meal_form_test.dart b/test/nutritional_meal_form_test.dart index 0c74c145e..85d273264 100644 --- a/test/nutritional_meal_form_test.dart +++ b/test/nutritional_meal_form_test.dart @@ -88,7 +88,7 @@ void main() { ); expect( - find.text(('Initial Name 1')), + find.text('Initial Name 1'), findsOneWidget, reason: 'Time of existing meal is filled in', ); From 923b44ba97f0b6d80b5ab32dc6fd8a2f4a4d87f7 Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Thu, 7 Oct 2021 19:58:40 +0200 Subject: [PATCH 02/10] Marked as '@immutable' This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: WorkoutForm._plan --- lib/widgets/core/charts.dart | 4 ++-- lib/widgets/core/core.dart | 15 +++++---------- lib/widgets/gallery/forms.dart | 2 +- lib/widgets/measurements/forms.dart | 4 ++-- lib/widgets/nutrition/forms.dart | 6 +++--- lib/widgets/weight/forms.dart | 2 +- lib/widgets/workouts/day.dart | 6 +++--- lib/widgets/workouts/forms.dart | 15 ++++++++------- lib/widgets/workouts/gym_mode.dart | 6 +++--- 9 files changed, 28 insertions(+), 32 deletions(-) diff --git a/lib/widgets/core/charts.dart b/lib/widgets/core/charts.dart index 053966190..ccbba73f6 100644 --- a/lib/widgets/core/charts.dart +++ b/lib/widgets/core/charts.dart @@ -30,10 +30,10 @@ class MeasurementChartEntry { /// Weight chart widget class MeasurementChartWidget extends StatelessWidget { final List _entries; - late String unit; + final String unit; /// [_entries] is a list of [MeasurementChartEntry] - MeasurementChartWidget(this._entries, {this.unit = 'kg'}); + const MeasurementChartWidget(this._entries, {this.unit = 'kg'}); @override Widget build(BuildContext context) { diff --git a/lib/widgets/core/core.dart b/lib/widgets/core/core.dart index da52a78cb..d1f22dd2f 100644 --- a/lib/widgets/core/core.dart +++ b/lib/widgets/core/core.dart @@ -21,24 +21,19 @@ import 'package:wger/theme/theme.dart'; class MutedText extends StatelessWidget { final String _text; - TextAlign _textAlign = TextAlign.left; + final TextAlign textAlign; - MutedText( + const MutedText( this._text, { - Key? key, - TextAlign? textAlign, - }) : super(key: key) { - if (textAlign != null) { - _textAlign = textAlign; - } - } + this.textAlign = TextAlign.left, + }); @override Widget build(BuildContext context) { return Text( _text, style: TextStyle(color: wgerTextMuted), - textAlign: _textAlign, + textAlign: textAlign, ); } } diff --git a/lib/widgets/gallery/forms.dart b/lib/widgets/gallery/forms.dart index 9bce0ca49..bcffe5081 100644 --- a/lib/widgets/gallery/forms.dart +++ b/lib/widgets/gallery/forms.dart @@ -28,7 +28,7 @@ import 'package:wger/models/gallery/image.dart' as gallery; import 'package:wger/providers/gallery.dart'; class ImageForm extends StatefulWidget { - late gallery.Image _image; + late final gallery.Image _image; ImageForm([gallery.Image? image]) { _image = image ?? gallery.Image.emtpy(); diff --git a/lib/widgets/measurements/forms.dart b/lib/widgets/measurements/forms.dart index d5cf4a176..ee7bea3d3 100644 --- a/lib/widgets/measurements/forms.dart +++ b/lib/widgets/measurements/forms.dart @@ -32,7 +32,7 @@ class MeasurementCategoryForm extends StatelessWidget { final nameController = TextEditingController(); final unitController = TextEditingController(); - Map categoryData = {'id': null, 'name': '', 'unit': ''}; + final Map categoryData = {'id': null, 'name': '', 'unit': ''}; MeasurementCategoryForm([MeasurementCategory? category]) { //this._category = category ?? MeasurementCategory(); @@ -130,7 +130,7 @@ class MeasurementEntryForm extends StatelessWidget { final _dateController = TextEditingController(); final _notesController = TextEditingController(); - late Map _entryData; + late final Map _entryData; MeasurementEntryForm(this._categoryId, [MeasurementEntry? entry]) { _entryData = { diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index f87aa94eb..040e69cfd 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -31,7 +31,7 @@ import 'package:wger/providers/nutrition.dart'; import 'package:wger/screens/nutritional_plan_screen.dart'; class MealForm extends StatelessWidget { - late Meal _meal; + late final Meal _meal; final int _planId; final _form = GlobalKey(); @@ -114,7 +114,7 @@ class MealForm extends StatelessWidget { class MealItemForm extends StatelessWidget { final Meal _meal; - late MealItem _mealItem; + late final MealItem _mealItem; MealItemForm(this._meal, [mealItem]) { _mealItem = mealItem ?? MealItem.empty(); @@ -210,7 +210,7 @@ class MealItemForm extends StatelessWidget { class PlanForm extends StatelessWidget { final _form = GlobalKey(); final _descriptionController = TextEditingController(); - late NutritionalPlan _plan; + late final NutritionalPlan _plan; PlanForm([NutritionalPlan? plan]) { _plan = plan ?? NutritionalPlan.empty(); diff --git a/lib/widgets/weight/forms.dart b/lib/widgets/weight/forms.dart index f1e1d7655..7be89bbe0 100644 --- a/lib/widgets/weight/forms.dart +++ b/lib/widgets/weight/forms.dart @@ -31,7 +31,7 @@ class WeightForm extends StatelessWidget { final dateController = TextEditingController(); final weightController = TextEditingController(); - late WeightEntry _weightEntry; + late final WeightEntry _weightEntry; WeightForm([WeightEntry? weightEntry]) { _weightEntry = weightEntry ?? WeightEntry(date: DateTime.now()); diff --git a/lib/widgets/workouts/day.dart b/lib/widgets/workouts/day.dart index efeef767d..a2951f97a 100644 --- a/lib/widgets/workouts/day.dart +++ b/lib/widgets/workouts/day.dart @@ -33,12 +33,12 @@ import 'package:wger/widgets/exercises/images.dart'; import 'package:wger/widgets/workouts/forms.dart'; class SettingWidget extends StatelessWidget { - Set set; - Setting setting; + final Set set; + final Setting setting; final bool expanded; final toggle; - SettingWidget({ + const SettingWidget({ required this.set, required this.setting, required this.expanded, diff --git a/lib/widgets/workouts/forms.dart b/lib/widgets/workouts/forms.dart index d4f8d54b4..ba524cc15 100644 --- a/lib/widgets/workouts/forms.dart +++ b/lib/widgets/workouts/forms.dart @@ -35,7 +35,7 @@ import 'package:wger/theme/theme.dart'; import 'package:wger/widgets/exercises/images.dart'; class WorkoutForm extends StatelessWidget { - WorkoutPlan _plan; + final WorkoutPlan _plan; final _form = GlobalKey(); WorkoutForm(this._plan); @@ -106,11 +106,12 @@ class WorkoutForm extends StatelessWidget { await Provider.of(context, listen: false).editWorkout(_plan); Navigator.of(context).pop(); } else { - _plan = await Provider.of(context, listen: false) - .addWorkout(_plan); + final WorkoutPlan newPlan = + await Provider.of(context, listen: false) + .addWorkout(_plan); Navigator.of(context).pushReplacementNamed( WorkoutPlanScreen.routeName, - arguments: _plan, + arguments: newPlan, ); } }, @@ -157,7 +158,7 @@ class _DayCheckboxState extends State { class DayFormWidget extends StatefulWidget { final WorkoutPlan workout; final dayController = TextEditingController(); - Day _day = Day(); + late final Day _day; DayFormWidget(this.workout, [Day? day]) { _day = day ?? Day(); @@ -256,7 +257,7 @@ class _DayFormWidgetState extends State { class SetFormWidget extends StatefulWidget { final Day _day; - late Set _set; + late final Set _set; SetFormWidget(this._day, [Set? set]) { _set = set ?? Set.withData(day: _day.id, order: _day.sets.length, sets: 4); @@ -537,7 +538,7 @@ class _SetFormWidgetState extends State { class ExerciseSetting extends StatelessWidget { final Exercise _exercise; - int _numberOfSets = 4; + late final int _numberOfSets; final bool _detailed; final Function removeExercise; final List _settings; diff --git a/lib/widgets/workouts/gym_mode.dart b/lib/widgets/workouts/gym_mode.dart index d7c375c27..a9c09cc80 100644 --- a/lib/widgets/workouts/gym_mode.dart +++ b/lib/widgets/workouts/gym_mode.dart @@ -44,7 +44,7 @@ import 'package:wger/widgets/workouts/forms.dart'; class GymMode extends StatefulWidget { final Day _workoutDay; - late TimeOfDay _start; + late final TimeOfDay _start; GymMode(this._workoutDay) { _start = TimeOfDay.now(); @@ -1045,9 +1045,9 @@ class NavigationFooter extends StatelessWidget { class NavigationHeader extends StatelessWidget { final PageController _controller; final String _title; - Map exercisePages; + final Map exercisePages; - NavigationHeader( + const NavigationHeader( this._title, this._controller, { required this.exercisePages, From e5a6d930cb22bd230679a7e53094f76788b0062d Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Thu, 7 Oct 2021 19:58:56 +0200 Subject: [PATCH 03/10] Minor changes --- analysis_options.yaml | 2 +- lib/models/nutrition/nutritrional_values.dart | 9 ++++++++- lib/models/workouts/log.dart | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 904b09429..ba5bd516c 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -153,5 +153,5 @@ linter: use_rethrow_when_possible: true use_test_throws_matchers: true valid_regexps: true - void_checks: true + void_checks: false diff --git a/lib/models/nutrition/nutritrional_values.dart b/lib/models/nutrition/nutritrional_values.dart index be0478aec..186cc8238 100644 --- a/lib/models/nutrition/nutritrional_values.dart +++ b/lib/models/nutrition/nutritrional_values.dart @@ -16,6 +16,8 @@ * along with this program. If not, see . */ +import 'dart:ui'; + class NutritionalValues { double energy = 0; double protein = 0; @@ -69,7 +71,7 @@ class NutritionalValues { } @override - //ignore: hash_and_equals + //ignore: avoid_equals_and_hash_code_on_mutable_classes bool operator ==(other) { return other is NutritionalValues && energy == other.energy && @@ -86,6 +88,11 @@ class NutritionalValues { String toString() { return 'e: $energy, p: $protein, c: $carbohydrates, cS: $carbohydratesSugar, f: $fat, fS: $fatSaturated, fi: $fibres, s: $sodium'; } + + @override + //ignore: avoid_equals_and_hash_code_on_mutable_classes + int get hashCode => hashValues( + energy, protein, carbohydrates, carbohydratesSugar, fat, fatSaturated, fibres, sodium); } class BaseNutritionalValues { diff --git a/lib/models/workouts/log.dart b/lib/models/workouts/log.dart index 587d7408e..2ee6ad6b7 100644 --- a/lib/models/workouts/log.dart +++ b/lib/models/workouts/log.dart @@ -120,6 +120,7 @@ class Log { /// Two logs are considered equal if their content is equal. This is used e.g. /// in lists where we want to have unique values @override + //ignore: avoid_equals_and_hash_code_on_mutable_classes bool operator ==(o) { return o is Log && exerciseId == o.exerciseId && @@ -131,6 +132,7 @@ class Log { } @override + //ignore: avoid_equals_and_hash_code_on_mutable_classes int get hashCode => hashValues(exerciseId, weight, weightUnitId, reps, repetitionUnitId, rir); //@override From 9d479e89b06d321289823a28608afdb06b8ca74e Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:40:09 +0200 Subject: [PATCH 04/10] const_constructors info: Prefer const with constant constructors. prefer_const_constructors --- analysis_options.yaml | 2 +- lib/helpers/json.dart | 2 +- lib/helpers/ui.dart | 4 +- lib/providers/exercises.dart | 2 +- lib/providers/nutrition.dart | 2 +- lib/providers/workout_plans.dart | 2 +- lib/screens/auth_screen.dart | 34 +++++----- lib/screens/dashboard.dart | 2 +- lib/screens/gallery_screen.dart | 2 +- lib/screens/home_tabs_screen.dart | 12 ++-- lib/screens/nutritional_plan_screen.dart | 6 +- lib/screens/splash_screen.dart | 2 +- lib/screens/workout_plan_screen.dart | 6 +- lib/theme/theme.dart | 8 +-- lib/widgets/app_drawer.dart | 4 +- lib/widgets/core/about.dart | 28 ++++---- lib/widgets/core/app_bar.dart | 6 +- lib/widgets/core/charts.dart | 2 +- lib/widgets/core/core.dart | 2 +- lib/widgets/dashboard/calendar.dart | 4 +- lib/widgets/dashboard/widgets.dart | 52 +++++++-------- lib/widgets/exercises/exercises.dart | 16 ++--- lib/widgets/exercises/images.dart | 4 +- lib/widgets/gallery/forms.dart | 16 ++--- lib/widgets/gallery/overview.dart | 8 +-- lib/widgets/measurements/categories.dart | 6 +- lib/widgets/measurements/entries.dart | 14 ++-- lib/widgets/nutrition/forms.dart | 14 ++-- lib/widgets/nutrition/meal.dart | 22 +++---- .../nutrition/nutritional_diary_detail.dart | 26 ++++---- .../nutrition/nutritional_plan_detail.dart | 38 +++++------ .../nutrition/nutritional_plans_list.dart | 6 +- lib/widgets/weight/entries_list.dart | 16 ++--- lib/widgets/weight/forms.dart | 2 +- lib/widgets/workouts/charts.dart | 2 +- lib/widgets/workouts/day.dart | 24 +++---- lib/widgets/workouts/forms.dart | 58 ++++++++--------- lib/widgets/workouts/gym_mode.dart | 65 ++++++++++--------- lib/widgets/workouts/log.dart | 6 +- lib/widgets/workouts/workout_logs.dart | 2 +- lib/widgets/workouts/workout_plans_list.dart | 6 +- test/auth_screen_test.dart | 34 +++++----- test/extensions_test.dart | 4 +- test/gallery_form_test.dart | 6 +- test/gallery_screen_test.dart | 10 +-- test/gym_mode_screen_test.dart | 6 +- .../measurement_entries_screen_test.dart | 2 +- .../measurement_provider_test.dart | 30 ++++----- test/nutritional_meal_form_test.dart | 14 ++-- test/nutritional_plan_form_test.dart | 10 +-- test/nutritional_plans_screen_test.dart | 2 +- test/setting_model_test.dart | 20 +++--- test/weight_screen_test.dart | 2 +- test/workout_day_form_test.dart | 6 +- test/workout_form_test.dart | 14 ++-- test/workout_plans_screen_test.dart | 2 +- test/workout_set_form_test.dart | 6 +- test_data/nutritional_plans.dart | 4 +- 58 files changed, 354 insertions(+), 353 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index ba5bd516c..5fa3c9fcc 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -90,7 +90,7 @@ linter: prefer_asserts_in_initializer_lists: true prefer_collection_literals: true prefer_conditional_assignment: true - prefer_const_constructors: false # definitely to be changed + prefer_const_constructors: true prefer_const_constructors_in_immutables: true prefer_const_declarations: true prefer_const_literals_to_create_immutables: true diff --git a/lib/helpers/json.dart b/lib/helpers/json.dart index ab46eef42..7bc3ba442 100644 --- a/lib/helpers/json.dart +++ b/lib/helpers/json.dart @@ -60,5 +60,5 @@ String? timeToString(TimeOfDay? time) { if (time == null) { return null; } - return DefaultMaterialLocalizations().formatTimeOfDay(time, alwaysUse24HourFormat: true); + return const DefaultMaterialLocalizations().formatTimeOfDay(time, alwaysUse24HourFormat: true); } diff --git a/lib/helpers/ui.dart b/lib/helpers/ui.dart index cf305dd31..4975a9ada 100644 --- a/lib/helpers/ui.dart +++ b/lib/helpers/ui.dart @@ -52,7 +52,7 @@ void showHttpExceptionErrorDialog(WgerHttpException exception, BuildContext cont final List errorList = []; for (final key in exception.errors!.keys) { // Error headers - errorList.add(Text(key, style: TextStyle(fontWeight: FontWeight.bold))); + errorList.add(Text(key, style: const TextStyle(fontWeight: FontWeight.bold))); // Error messages if (exception.errors![key] is String) { @@ -62,7 +62,7 @@ void showHttpExceptionErrorDialog(WgerHttpException exception, BuildContext cont errorList.add(Text(value)); } } - errorList.add(SizedBox(height: 8)); + errorList.add(const SizedBox(height: 8)); } showDialog( diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index c0e636141..17004d4ed 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -160,7 +160,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { // Save the result to the cache final exerciseData = { 'date': DateTime.now().toIso8601String(), - 'expiresIn': DateTime.now().add(Duration(days: daysToCache)).toIso8601String(), + 'expiresIn': DateTime.now().add(const Duration(days: daysToCache)).toIso8601String(), 'exercises': _exercises.map((e) => e.toJson()).toList(), 'equipment': _equipment.map((e) => e.toJson()).toList(), 'categories': _categories.map((e) => e.toJson()).toList(), diff --git a/lib/providers/nutrition.dart b/lib/providers/nutrition.dart index d82f5df2d..5b28c90ff 100644 --- a/lib/providers/nutrition.dart +++ b/lib/providers/nutrition.dart @@ -292,7 +292,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier { // Initialise an empty cache final ingredientData = { 'date': DateTime.now().toIso8601String(), - 'expiresIn': DateTime.now().add(Duration(days: DAYS_TO_CACHE)).toIso8601String(), + 'expiresIn': DateTime.now().add(const Duration(days: DAYS_TO_CACHE)).toIso8601String(), 'ingredients': [] }; prefs.setString('ingredientData', json.encode(ingredientData)); diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index 7ea023460..a79ec4043 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -353,7 +353,7 @@ class WorkoutPlansProvider extends WgerBaseProvider with ChangeNotifier { // Save the result to the cache final exerciseData = { 'date': DateTime.now().toIso8601String(), - 'expiresIn': DateTime.now().add(Duration(days: DAYS_TO_CACHE)).toIso8601String(), + 'expiresIn': DateTime.now().add(const Duration(days: DAYS_TO_CACHE)).toIso8601String(), 'repetitionUnits': _repetitionUnit.map((e) => e.toJson()).toList(), 'weightUnit': _weightUnits.map((e) => e.toJson()).toList(), }; diff --git a/lib/screens/auth_screen.dart b/lib/screens/auth_screen.dart index 3fed7f00d..8c248dce3 100644 --- a/lib/screens/auth_screen.dart +++ b/lib/screens/auth_screen.dart @@ -49,15 +49,15 @@ class AuthScreen extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Padding(padding: EdgeInsets.symmetric(vertical: 20)), - Image( + const Padding(padding: EdgeInsets.symmetric(vertical: 20)), + const Image( image: AssetImage('assets/images/logo-white.png'), width: 120, ), Container( - margin: EdgeInsets.only(bottom: 20.0), - padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 94.0), - child: Text( + margin: const EdgeInsets.only(bottom: 20.0), + padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 94.0), + child: const Text( 'WGER', style: TextStyle( color: Colors.white, @@ -67,7 +67,7 @@ class AuthScreen extends StatelessWidget { ), ), ), - Flexible( + const Flexible( //flex: deviceSize.width > 600 ? 2 : 1, child: AuthCard(), ), @@ -174,7 +174,7 @@ class _AuthCardState extends State { elevation: 8.0, child: Container( width: deviceSize.width * 0.75, - padding: EdgeInsets.all(16.0), + padding: const EdgeInsets.all(16.0), child: Form( key: _formKey, child: SingleChildScrollView( @@ -182,7 +182,7 @@ class _AuthCardState extends State { child: Column( children: [ TextFormField( - key: Key('inputUsername'), + key: const Key('inputUsername'), decoration: InputDecoration( labelText: AppLocalizations.of(context).username, errorMaxLines: 2, @@ -206,7 +206,7 @@ class _AuthCardState extends State { ), if (_authMode == AuthMode.Signup) TextFormField( - key: Key('inputEmail'), + key: const Key('inputEmail'), decoration: InputDecoration(labelText: AppLocalizations.of(context).email), autofillHints: const [AutofillHints.email], controller: _emailController, @@ -243,7 +243,7 @@ class _AuthCardState extends State { ), if (_authMode == AuthMode.Signup) TextFormField( - key: Key('inputPassword2'), + key: const Key('inputPassword2'), decoration: InputDecoration(labelText: AppLocalizations.of(context).confirmPassword), controller: _password2Controller, @@ -267,7 +267,7 @@ class _AuthCardState extends State { Flexible( flex: 3, child: TextFormField( - key: Key('inputServer'), + key: const Key('inputServer'), decoration: InputDecoration( labelText: AppLocalizations.of(context).customServerUrl, helperText: AppLocalizations.of(context).customServerHint, @@ -292,7 +292,7 @@ class _AuthCardState extends State { }, ), ), - SizedBox( + const SizedBox( width: 20, ), Column( @@ -310,14 +310,14 @@ class _AuthCardState extends State { ], ), ), - SizedBox( + const SizedBox( height: 20, ), if (_isLoading) - CircularProgressIndicator() + const CircularProgressIndicator() else ElevatedButton( - key: Key('actionButton'), + key: const Key('actionButton'), child: Text(_authMode == AuthMode.Login ? AppLocalizations.of(context).login : AppLocalizations.of(context).register), @@ -326,7 +326,7 @@ class _AuthCardState extends State { }, ), TextButton( - key: Key('toggleActionButton'), + key: const Key('toggleActionButton'), child: Text( _authMode == AuthMode.Login ? AppLocalizations.of(context).registerInstead.toUpperCase() @@ -338,7 +338,7 @@ class _AuthCardState extends State { child: Text(_hideCustomServer ? AppLocalizations.of(context).useCustomServer : AppLocalizations.of(context).useDefaultServer), - key: Key('toggleCustomServerButton'), + key: const Key('toggleCustomServerButton'), onPressed: () { setState(() { _hideCustomServer = !_hideCustomServer; diff --git a/lib/screens/dashboard.dart b/lib/screens/dashboard.dart index 9ae3f3cff..c397c5b50 100644 --- a/lib/screens/dashboard.dart +++ b/lib/screens/dashboard.dart @@ -41,7 +41,7 @@ class _DashboardScreenState extends State { DashboardWorkoutWidget(), DashboardNutritionWidget(), DashboardWeightWidget(), - DashboardCalendarWidget(), + const DashboardCalendarWidget(), ], ), ), diff --git a/lib/screens/gallery_screen.dart b/lib/screens/gallery_screen.dart index a129e755e..4a32589c9 100644 --- a/lib/screens/gallery_screen.dart +++ b/lib/screens/gallery_screen.dart @@ -51,7 +51,7 @@ class GalleryScreen extends StatelessWidget { }, ), body: Consumer( - builder: (context, workoutProvider, child) => Gallery(), + builder: (context, workoutProvider, child) => const Gallery(), ), ); } diff --git a/lib/screens/home_tabs_screen.dart b/lib/screens/home_tabs_screen.dart index 0a8b2394e..957cab566 100644 --- a/lib/screens/home_tabs_screen.dart +++ b/lib/screens/home_tabs_screen.dart @@ -65,7 +65,7 @@ class _HomeTabsScreenState extends State with SingleTickerProvid WorkoutPlansScreen(), NutritionScreen(), WeightScreen(), - GalleryScreen(), + const GalleryScreen(), ]; /// Load initial data from the server @@ -146,26 +146,26 @@ class _HomeTabsScreenState extends State with SingleTickerProvid bottomNavigationBar: BottomNavigationBar( items: [ BottomNavigationBarItem( - icon: Icon(Icons.dashboard), + icon: const Icon(Icons.dashboard), label: AppLocalizations.of(context).labelDashboard, ), BottomNavigationBarItem( - icon: Icon(Icons.fitness_center), + icon: const Icon(Icons.fitness_center), label: AppLocalizations.of(context).labelBottomNavWorkout, ), BottomNavigationBarItem( - icon: Icon(Icons.restaurant), + icon: const Icon(Icons.restaurant), label: AppLocalizations.of(context).labelBottomNavNutrition, ), BottomNavigationBarItem( - icon: FaIcon( + icon: const FaIcon( FontAwesomeIcons.weight, size: 20, ), label: AppLocalizations.of(context).weight, ), BottomNavigationBarItem( - icon: Icon(Icons.photo_library), + icon: const Icon(Icons.photo_library), label: AppLocalizations.of(context).gallery, ), ], diff --git a/lib/screens/nutritional_plan_screen.dart b/lib/screens/nutritional_plan_screen.dart index 42cc766a7..68d02caa3 100644 --- a/lib/screens/nutritional_plan_screen.dart +++ b/lib/screens/nutritional_plan_screen.dart @@ -53,7 +53,7 @@ class NutritionalPlanScreen extends StatelessWidget { pinned: true, actions: [ PopupMenuButton( - icon: Icon(Icons.more_vert), + icon: const Icon(Icons.more_vert), onSelected: (value) { // Edit if (value == NutritionalPlanOptions.edit) { @@ -90,7 +90,7 @@ class NutritionalPlanScreen extends StatelessWidget { ], flexibleSpace: FlexibleSpaceBar( title: Text(_nutritionalPlan.description), - background: Image( + background: const Image( image: AssetImage('assets/images/backgrounds/nutritional_plans.jpg'), fit: BoxFit.cover, ), @@ -103,7 +103,7 @@ class NutritionalPlanScreen extends StatelessWidget { ? SliverList( delegate: SliverChildListDelegate( [ - SizedBox( + const SizedBox( height: 200, child: Center( child: CircularProgressIndicator(), diff --git a/lib/screens/splash_screen.dart b/lib/screens/splash_screen.dart index 8b00bcff5..c3b4df92d 100644 --- a/lib/screens/splash_screen.dart +++ b/lib/screens/splash_screen.dart @@ -21,7 +21,7 @@ import 'package:flutter/material.dart'; class SplashScreen extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( + return const Scaffold( body: Center( child: Text('Loading...'), ), diff --git a/lib/screens/workout_plan_screen.dart b/lib/screens/workout_plan_screen.dart index df9adab28..9156eaa42 100644 --- a/lib/screens/workout_plan_screen.dart +++ b/lib/screens/workout_plan_screen.dart @@ -79,14 +79,14 @@ class _WorkoutPlanScreenState extends State { pinned: true, flexibleSpace: FlexibleSpaceBar( title: Text(workoutPlan.name), - background: Image( + background: const Image( image: AssetImage('assets/images/backgrounds/workout_plans.jpg'), fit: BoxFit.cover, ), ), actions: [ PopupMenuButton( - icon: Icon(Icons.more_vert), + icon: const Icon(Icons.more_vert), onSelected: (value) { // Edit if (value == WorkoutOptions.edit) { @@ -130,7 +130,7 @@ class _WorkoutPlanScreenState extends State { delegate: SliverChildListDelegate( [ if (snapshot.connectionState == ConnectionState.waiting) - SizedBox( + const SizedBox( height: 200, child: Center( child: CircularProgressIndicator(), diff --git a/lib/theme/theme.dart b/lib/theme/theme.dart index 7c34b6902..3ee49f51b 100644 --- a/lib/theme/theme.dart +++ b/lib/theme/theme.dart @@ -66,8 +66,8 @@ final ThemeData wgerTheme = ThemeData( * Text theme */ textTheme: TextTheme( - headline1: TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), - headline2: TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), + headline1: const TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), + headline2: const TextStyle(fontFamily: 'OpenSansLight', color: Colors.black), headline3: TextStyle( fontSize: materialSizes['h3']! * 0.8, fontFamily: 'OpenSansBold', @@ -102,7 +102,7 @@ final ThemeData wgerTheme = ThemeData( style: OutlinedButton.styleFrom( primary: wgerPrimaryButtonColor, visualDensity: VisualDensity.compact, - side: BorderSide(color: wgerPrimaryButtonColor), + side: const BorderSide(color: wgerPrimaryButtonColor), ), ), elevatedButtonTheme: ElevatedButtonThemeData( @@ -114,7 +114,7 @@ final ThemeData wgerTheme = ThemeData( /* * Forms, etc. */ - sliderTheme: SliderThemeData( + sliderTheme: const SliderThemeData( activeTrackColor: wgerPrimaryButtonColor, thumbColor: wgerPrimaryColor, ), diff --git a/lib/widgets/app_drawer.dart b/lib/widgets/app_drawer.dart index e6891bb5f..6c53d0937 100644 --- a/lib/widgets/app_drawer.dart +++ b/lib/widgets/app_drawer.dart @@ -33,12 +33,12 @@ class AppDrawer extends StatelessWidget { child: Column( children: [ AppBar( - title: Text('wger'), + title: const Text('wger'), automaticallyImplyLeading: false, ), ListTile( //dense: true, - leading: Icon(Icons.exit_to_app), + leading: const Icon(Icons.exit_to_app), title: Text(AppLocalizations.of(context).logout), onTap: () { Provider.of(context, listen: false).logout(); diff --git a/lib/widgets/core/about.dart b/lib/widgets/core/about.dart index c84037da0..2203e80c7 100644 --- a/lib/widgets/core/about.dart +++ b/lib/widgets/core/about.dart @@ -37,7 +37,7 @@ class WgerAboutListTile extends StatelessWidget { return AboutListTile( //dense: true, - icon: Icon(Icons.info), + icon: const Icon(Icons.info), applicationName: 'wger', applicationVersion: 'App: ${authProvider.applicationVersion!.version}\n' 'Server: ${authProvider.serverVersion}', @@ -51,17 +51,17 @@ class WgerAboutListTile extends StatelessWidget { ), aboutBoxChildren: [ - SizedBox(height: 10), + const SizedBox(height: 10), Text(AppLocalizations.of(context).aboutDescription), - SizedBox(height: 20), + const SizedBox(height: 20), ListTile( - leading: Icon(Icons.code), + leading: const Icon(Icons.code), title: Text(AppLocalizations.of(context).aboutSourceTitle), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(AppLocalizations.of(context).aboutSourceText), - Text( + const Text( 'https://github.com/wger-project', style: TextStyle(color: Colors.blue), ), @@ -70,15 +70,15 @@ class WgerAboutListTile extends StatelessWidget { contentPadding: EdgeInsets.zero, onTap: () async => _launchURL('https://github.com/wger-project', context), ), - SizedBox(height: 10), + const SizedBox(height: 10), ListTile( - leading: Icon(Icons.bug_report), + leading: const Icon(Icons.bug_report), title: Text(AppLocalizations.of(context).aboutBugsTitle), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(AppLocalizations.of(context).aboutBugsText), - Text( + const Text( 'https://github.com/wger-project/flutter/issues/new/choose', style: TextStyle(color: Colors.blue), ) @@ -88,15 +88,15 @@ class WgerAboutListTile extends StatelessWidget { onTap: () async => _launchURL('https://github.com/wger-project/flutter/issues/new/choose', context), ), - SizedBox(height: 10), + const SizedBox(height: 10), ListTile( - leading: Icon(Icons.chat), + leading: const Icon(Icons.chat), title: Text(AppLocalizations.of(context).aboutContactUsTitle), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(AppLocalizations.of(context).aboutContactUsText), - Text( + const Text( 'https://discord.gg/rPWFv6W', style: TextStyle(color: Colors.blue), ), @@ -105,15 +105,15 @@ class WgerAboutListTile extends StatelessWidget { contentPadding: EdgeInsets.zero, onTap: () async => _launchURL('https://discord.gg/rPWFv6W', context), ), - SizedBox(height: 10), + const SizedBox(height: 10), ListTile( - leading: Icon(Icons.translate), + leading: const Icon(Icons.translate), title: Text(AppLocalizations.of(context).aboutTranslationTitle), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(AppLocalizations.of(context).aboutTranslationText), - Text( + const Text( 'https://hosted.weblate.org/engage/wger/', style: TextStyle(color: Colors.blue), ), diff --git a/lib/widgets/core/app_bar.dart b/lib/widgets/core/app_bar.dart index ccda920b5..b7bddf51b 100644 --- a/lib/widgets/core/app_bar.dart +++ b/lib/widgets/core/app_bar.dart @@ -57,10 +57,10 @@ class WgerAppBar extends StatelessWidget with PreferredSizeWidget { content: Column( mainAxisSize: MainAxisSize.min, children: [ - Divider(), + const Divider(), ListTile( //dense: true, - leading: Icon(Icons.exit_to_app), + leading: const Icon(Icons.exit_to_app), title: Text(AppLocalizations.of(context).logout), onTap: () { Provider.of(context, listen: false).logout(); @@ -84,5 +84,5 @@ class WgerAppBar extends StatelessWidget with PreferredSizeWidget { } @override - Size get preferredSize => Size.fromHeight(kToolbarHeight); + Size get preferredSize => const Size.fromHeight(kToolbarHeight); } diff --git a/lib/widgets/core/charts.dart b/lib/widgets/core/charts.dart index ccbba73f6..d1bddd668 100644 --- a/lib/widgets/core/charts.dart +++ b/lib/widgets/core/charts.dart @@ -51,7 +51,7 @@ class MeasurementChartWidget extends StatelessWidget { ], defaultRenderer: charts.LineRendererConfig(includePoints: true), primaryMeasureAxis: charts.NumericAxisSpec( - tickProviderSpec: charts.BasicNumericTickProviderSpec(zeroBound: false), + tickProviderSpec: const charts.BasicNumericTickProviderSpec(zeroBound: false), tickFormatterSpec: unitTickFormatter, ), ); diff --git a/lib/widgets/core/core.dart b/lib/widgets/core/core.dart index d1f22dd2f..c8ba0f5c2 100644 --- a/lib/widgets/core/core.dart +++ b/lib/widgets/core/core.dart @@ -32,7 +32,7 @@ class MutedText extends StatelessWidget { Widget build(BuildContext context) { return Text( _text, - style: TextStyle(color: wgerTextMuted), + style: const TextStyle(color: wgerTextMuted), textAlign: textAlign, ); } diff --git a/lib/widgets/dashboard/calendar.dart b/lib/widgets/dashboard/calendar.dart index fb407cdc2..f14fd49bf 100644 --- a/lib/widgets/dashboard/calendar.dart +++ b/lib/widgets/dashboard/calendar.dart @@ -217,14 +217,14 @@ class _DashboardCalendarWidgetState extends State AppLocalizations.of(context).calendar, style: Theme.of(context).textTheme.headline4, ), - leading: Icon( + leading: const Icon( Icons.calendar_today_outlined, color: Colors.black, ), ), TableCalendar( locale: Localizations.localeOf(context).languageCode, - firstDay: DateTime.now().subtract(Duration(days: 1000)), + firstDay: DateTime.now().subtract(const Duration(days: 1000)), lastDay: DateTime.now(), focusedDay: _focusedDay, selectedDayPredicate: (day) => isSameDay(_selectedDay, day), diff --git a/lib/widgets/dashboard/widgets.dart b/lib/widgets/dashboard/widgets.dart index fb16d9bd7..81511fa58 100644 --- a/lib/widgets/dashboard/widgets.dart +++ b/lib/widgets/dashboard/widgets.dart @@ -71,7 +71,7 @@ class _DashboardNutritionWidgetState extends State { Expanded( child: Text( meal.time!.format(context), - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), //textAlign: TextAlign.left, ), ), @@ -81,19 +81,19 @@ class _DashboardNutritionWidgetState extends State { children: [ MutedText( '${meal.nutritionalValues.energy.toStringAsFixed(0)}${AppLocalizations.of(context).kcal}'), - MutedText(' / '), + const MutedText(' / '), MutedText( '${meal.nutritionalValues.protein.toStringAsFixed(0)}${AppLocalizations.of(context).g}'), - MutedText(' / '), + const MutedText(' / '), MutedText( '${meal.nutritionalValues.carbohydrates.toStringAsFixed(0)}${AppLocalizations.of(context).g}'), - MutedText(' / '), + const MutedText(' / '), MutedText( '${meal.nutritionalValues.fat.toStringAsFixed(0)}${AppLocalizations.of(context).g} '), ], ), IconButton( - icon: Icon(Icons.history_edu), + icon: const Icon(Icons.history_edu), color: wgerPrimaryButtonColor, onPressed: () { Provider.of(context, listen: false).logMealToDiary(meal); @@ -110,7 +110,7 @@ class _DashboardNutritionWidgetState extends State { ], ), ); - out.add(SizedBox(height: 5)); + out.add(const SizedBox(height: 5)); if (_showDetail) { for (final item in meal.mealItems) { @@ -126,7 +126,7 @@ class _DashboardNutritionWidgetState extends State { overflow: TextOverflow.ellipsis, ), ), - SizedBox(width: 5), + const SizedBox(width: 5), Text('${item.amount.toStringAsFixed(0)} ${AppLocalizations.of(context).g}'), ], ), @@ -134,9 +134,9 @@ class _DashboardNutritionWidgetState extends State { ), ); } - out.add(SizedBox(height: 10)); + out.add(const SizedBox(height: 10)); } - out.add(Divider()); + out.add(const Divider()); } return out; @@ -144,10 +144,10 @@ class _DashboardNutritionWidgetState extends State { Widget getTrailing() { if (!_hasContent) { - return Text(''); + return const Text(''); } - return _showDetail ? Icon(Icons.expand_less) : Icon(Icons.expand_more); + return _showDetail ? const Icon(Icons.expand_less) : const Icon(Icons.expand_more); } @override @@ -166,7 +166,7 @@ class _DashboardNutritionWidgetState extends State { .format(_plan!.creationDate) : '', ), - leading: Icon( + leading: const Icon( Icons.restaurant, color: Colors.black, ), @@ -179,12 +179,12 @@ class _DashboardNutritionWidgetState extends State { ), if (_hasContent) Container( - padding: EdgeInsets.only(left: 10), + padding: const EdgeInsets.only(left: 10), child: Column( children: [ ...getContent(), Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), height: 180, child: NutritionalPlanPieChartWidget(_plan!.nutritionalValues), ) @@ -236,12 +236,12 @@ class _DashboardWeightWidgetState extends State { AppLocalizations.of(context).weight, style: Theme.of(context).textTheme.headline4, ), - leading: FaIcon( + leading: const FaIcon( FontAwesomeIcons.weight, color: Colors.black, ), trailing: IconButton( - icon: Icon(Icons.add), + icon: const Icon(Icons.add), onPressed: () async { Navigator.pushNamed( context, @@ -260,7 +260,7 @@ class _DashboardWeightWidgetState extends State { Column( children: [ Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), height: 180, child: MeasurementChartWidget(weightEntriesData.items .map((e) => MeasurementChartEntry(e.weight, e.date)) @@ -312,10 +312,10 @@ class _DashboardWorkoutWidgetState extends State { Widget getTrailing() { if (!_hasContent) { - return Text(''); + return const Text(''); } - return _showDetail ? Icon(Icons.expand_less) : Icon(Icons.expand_more); + return _showDetail ? const Icon(Icons.expand_less) : const Icon(Icons.expand_more); } List getContent() { @@ -333,7 +333,7 @@ class _DashboardWorkoutWidgetState extends State { Expanded( child: Text( day.description, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), overflow: TextOverflow.ellipsis, ), ), @@ -342,7 +342,7 @@ class _DashboardWorkoutWidgetState extends State { textAlign: TextAlign.right, ), IconButton( - icon: Icon(Icons.play_arrow), + icon: const Icon(Icons.play_arrow), color: wgerPrimaryButtonColor, onPressed: () { Navigator.of(context).pushNamed(GymModeScreen.routeName, arguments: day); @@ -366,11 +366,11 @@ class _DashboardWorkoutWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(s.exerciseObj.name), - SizedBox(width: 10), + const SizedBox(width: 10), MutedText(set.getSmartRepr(s.exerciseObj).join('\n')), ], ), - SizedBox(height: 10), + const SizedBox(height: 10), ], ) : Container(); @@ -379,7 +379,7 @@ class _DashboardWorkoutWidgetState extends State { ), )); } - out.add(Divider()); + out.add(const Divider()); } return out; @@ -401,7 +401,7 @@ class _DashboardWorkoutWidgetState extends State { .format(_workoutPlan!.creationDate) : '', ), - leading: Icon( + leading: const Icon( Icons.fitness_center_outlined, color: Colors.black, ), @@ -414,7 +414,7 @@ class _DashboardWorkoutWidgetState extends State { ), if (_hasContent) Container( - padding: EdgeInsets.only(left: 10), + padding: const EdgeInsets.only(left: 10), child: Column( children: [ ...getContent(), diff --git a/lib/widgets/exercises/exercises.dart b/lib/widgets/exercises/exercises.dart index d7acec854..d971a5d80 100644 --- a/lib/widgets/exercises/exercises.dart +++ b/lib/widgets/exercises/exercises.dart @@ -40,7 +40,7 @@ class ExerciseDetail extends StatelessWidget { style: Theme.of(context).textTheme.headline6, ), Text(_exercise.categoryObj.name), - SizedBox(height: 8), + const SizedBox(height: 8), // Equipment Text( @@ -49,8 +49,8 @@ class ExerciseDetail extends StatelessWidget { ), if (_exercise.equipment.isNotEmpty) Text(_exercise.equipment.map((e) => e.name).toList().join('\n')), - if (_exercise.equipment.isEmpty) Text('-/-'), - SizedBox(height: 8), + if (_exercise.equipment.isEmpty) const Text('-/-'), + const SizedBox(height: 8), // Muscles Text( @@ -59,8 +59,8 @@ class ExerciseDetail extends StatelessWidget { ), if (_exercise.muscles.isNotEmpty) Text(_exercise.muscles.map((e) => e.name).toList().join('\n')), - if (_exercise.muscles.isEmpty) Text('-/-'), - SizedBox(height: 8), + if (_exercise.muscles.isEmpty) const Text('-/-'), + const SizedBox(height: 8), // Muscles secondary Text( @@ -69,8 +69,8 @@ class ExerciseDetail extends StatelessWidget { ), if (_exercise.musclesSecondary.isNotEmpty) Text(_exercise.musclesSecondary.map((e) => e.name).toList().join('\n')), - if (_exercise.musclesSecondary.isEmpty) Text('-/-'), - SizedBox(height: 8), + if (_exercise.musclesSecondary.isEmpty) const Text('-/-'), + const SizedBox(height: 8), // Description Text( @@ -78,7 +78,7 @@ class ExerciseDetail extends StatelessWidget { style: Theme.of(context).textTheme.headline6, ), Html(data: _exercise.description), - SizedBox(height: 8), + const SizedBox(height: 8), ], ), ); diff --git a/lib/widgets/exercises/images.dart b/lib/widgets/exercises/images.dart index badeb6ba0..992bad1d4 100644 --- a/lib/widgets/exercises/images.dart +++ b/lib/widgets/exercises/images.dart @@ -30,11 +30,11 @@ class ExerciseImageWidget extends StatelessWidget { Widget build(BuildContext context) { return image != null ? FadeInImage( - placeholder: AssetImage('assets/images/placeholder.png'), + placeholder: const AssetImage('assets/images/placeholder.png'), image: NetworkImage(image!.url), fit: BoxFit.cover, ) - : Image( + : const Image( image: AssetImage('assets/images/placeholder.png'), color: Color.fromRGBO(255, 255, 255, 0.3), colorBlendMode: BlendMode.modulate); diff --git a/lib/widgets/gallery/forms.dart b/lib/widgets/gallery/forms.dart index bcffe5081..c9cdf8643 100644 --- a/lib/widgets/gallery/forms.dart +++ b/lib/widgets/gallery/forms.dart @@ -84,8 +84,8 @@ class _ImageFormState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ Text(AppLocalizations.of(context).selectImage), - SizedBox(height: 8), - Icon(Icons.photo_camera), + const SizedBox(height: 8), + const Icon(Icons.photo_camera), ], ); } @@ -112,7 +112,7 @@ class _ImageFormState extends State { Navigator.of(context).pop(); _showPicker(ImageSource.camera); }, - leading: Icon(Icons.photo_camera), + leading: const Icon(Icons.photo_camera), title: Text(AppLocalizations.of(context).takePicture), ), ListTile( @@ -120,7 +120,7 @@ class _ImageFormState extends State { Navigator.of(context).pop(); _showPicker(ImageSource.gallery); }, - leading: Icon(Icons.photo_library), + leading: const Icon(Icons.photo_library), title: Text(AppLocalizations.of(context).chooseFromLibrary)) ], ), @@ -132,10 +132,10 @@ class _ImageFormState extends State { ), ), TextFormField( - key: Key('field-date'), + key: const Key('field-date'), decoration: InputDecoration( labelText: AppLocalizations.of(context).date, - suffixIcon: Icon(Icons.calendar_today_outlined), + suffixIcon: const Icon(Icons.calendar_today_outlined), ), readOnly: true, // Stop keyboard from appearing controller: dateController, @@ -165,7 +165,7 @@ class _ImageFormState extends State { }, ), TextFormField( - key: Key('field-description'), + key: const Key('field-description'), decoration: InputDecoration(labelText: AppLocalizations.of(context).description), minLines: 3, maxLines: 10, @@ -175,7 +175,7 @@ class _ImageFormState extends State { }, ), ElevatedButton( - key: Key(SUBMIT_BUTTON_KEY_NAME), + key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), onPressed: () async { // Validate and save diff --git a/lib/widgets/gallery/overview.dart b/lib/widgets/gallery/overview.dart index 3fdb01768..85a5a0f80 100644 --- a/lib/widgets/gallery/overview.dart +++ b/lib/widgets/gallery/overview.dart @@ -48,7 +48,7 @@ class Gallery extends StatelessWidget { builder: (context) => Material( child: Container( key: Key('image-${currentImage.id}-detail'), - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), color: Colors.white, child: Column( children: [ @@ -68,14 +68,14 @@ class Gallery extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ IconButton( - icon: Icon(Icons.delete), + icon: const Icon(Icons.delete), onPressed: () { Provider.of(context, listen: false) .deleteImage(currentImage); Navigator.of(context).pop(); }), IconButton( - icon: Icon(Icons.edit), + icon: const Icon(Icons.edit), onPressed: () { Navigator.pushNamed( context, @@ -98,7 +98,7 @@ class Gallery extends StatelessWidget { }, child: FadeInImage( key: Key('image-${currentImage.id}'), - placeholder: AssetImage('assets/images/placeholder.png'), + placeholder: const AssetImage('assets/images/placeholder.png'), image: NetworkImage(currentImage.url!), fit: BoxFit.cover, ), diff --git a/lib/widgets/measurements/categories.dart b/lib/widgets/measurements/categories.dart index 0adafecc6..fd44426ad 100644 --- a/lib/widgets/measurements/categories.dart +++ b/lib/widgets/measurements/categories.dart @@ -49,7 +49,7 @@ class CategoriesList extends StatelessWidget { ), Container( color: Colors.white, - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), height: 220, child: MeasurementChartWidget( currentCategory.entries @@ -58,7 +58,7 @@ class CategoriesList extends StatelessWidget { unit: currentCategory.unit, ), ), - Divider(), + const Divider(), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -82,7 +82,7 @@ class CategoriesList extends StatelessWidget { ), ); }, - icon: Icon(Icons.add), + icon: const Icon(Icons.add), ), ], ), diff --git a/lib/widgets/measurements/entries.dart b/lib/widgets/measurements/entries.dart index 34705adc5..416159ed0 100644 --- a/lib/widgets/measurements/entries.dart +++ b/lib/widgets/measurements/entries.dart @@ -38,7 +38,7 @@ class EntriesList extends StatelessWidget { return Column(children: [ Container( color: Theme.of(context).cardColor, - padding: EdgeInsets.all(10), + padding: const EdgeInsets.all(10), height: 220, child: MeasurementChartWidget( _category.entries.map((e) => MeasurementChartEntry(e.value, e.date)).toList(), @@ -89,12 +89,12 @@ class EntriesList extends StatelessWidget { secondaryBackground: Container( color: Theme.of(context).errorColor, alignment: Alignment.centerRight, - padding: EdgeInsets.only(right: 20), - margin: EdgeInsets.symmetric( + padding: const EdgeInsets.only(right: 20), + margin: const EdgeInsets.symmetric( horizontal: 4, vertical: 4, ), - child: Icon( + child: const Icon( Icons.delete, color: Colors.white, ), @@ -102,12 +102,12 @@ class EntriesList extends StatelessWidget { background: Container( color: wgerPrimaryButtonColor, alignment: Alignment.centerLeft, - padding: EdgeInsets.only(left: 20), - margin: EdgeInsets.symmetric( + padding: const EdgeInsets.only(left: 20), + margin: const EdgeInsets.symmetric( horizontal: 4, vertical: 4, ), - child: Icon( + child: const Icon( Icons.edit, color: Colors.white, ), diff --git a/lib/widgets/nutrition/forms.dart b/lib/widgets/nutrition/forms.dart index 040e69cfd..0e449dc88 100644 --- a/lib/widgets/nutrition/forms.dart +++ b/lib/widgets/nutrition/forms.dart @@ -47,13 +47,13 @@ class MealForm extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.all(20), + margin: const EdgeInsets.all(20), child: Form( key: _form, child: Column( children: [ TextFormField( - key: Key('field-time'), + key: const Key('field-time'), decoration: InputDecoration(labelText: AppLocalizations.of(context).time), controller: _timeController, onTap: () async { @@ -75,7 +75,7 @@ class MealForm extends StatelessWidget { ), TextFormField( maxLength: 25, - key: Key('field-name'), + key: const Key('field-name'), decoration: InputDecoration(labelText: AppLocalizations.of(context).name), controller: _nameController, onSaved: (newValue) { @@ -84,7 +84,7 @@ class MealForm extends StatelessWidget { onFieldSubmitted: (_) {}, ), ElevatedButton( - key: Key(SUBMIT_BUTTON_KEY_NAME), + key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), onPressed: () async { if (!_form.currentState!.validate()) { @@ -128,7 +128,7 @@ class MealItemForm extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.all(20), + margin: const EdgeInsets.all(20), child: Form( key: _form, child: Column( @@ -225,7 +225,7 @@ class PlanForm extends StatelessWidget { children: [ // Description TextFormField( - key: Key('field-description'), + key: const Key('field-description'), decoration: InputDecoration(labelText: AppLocalizations.of(context).description), controller: _descriptionController, onFieldSubmitted: (_) {}, @@ -234,7 +234,7 @@ class PlanForm extends StatelessWidget { }, ), ElevatedButton( - key: Key(SUBMIT_BUTTON_KEY_NAME), + key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), onPressed: () async { // Validate and save the current values to the weightEntry diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart index b93002762..6b7d24f18 100644 --- a/lib/widgets/nutrition/meal.dart +++ b/lib/widgets/nutrition/meal.dart @@ -51,7 +51,7 @@ class _MealWidgetState extends State { @override Widget build(BuildContext context) { return Container( - padding: EdgeInsets.all(3), + padding: const EdgeInsets.all(3), child: Card( child: Column( children: [ @@ -77,7 +77,7 @@ class _MealWidgetState extends State { ), ); }, - icon: Icon(Icons.delete), + icon: const Icon(Icons.delete), ), if (widget._meal.mealItems.isNotEmpty) Ink( @@ -113,11 +113,11 @@ class _MealWidgetState extends State { ), ); }, - icon: Icon(Icons.edit), + icon: const Icon(Icons.edit), ), ], ), - Divider(), + const Divider(), ...widget._meal.mealItems.map((item) => MealItemWidget(item, _expanded)).toList(), OutlinedButton( child: Text(AppLocalizations.of(context).addIngredient), @@ -159,7 +159,7 @@ class MealItemWidget extends StatelessWidget { final values = _item.nutritionalValues; return Container( - padding: EdgeInsets.all(5), + padding: const EdgeInsets.all(5), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -175,7 +175,7 @@ class MealItemWidget extends StatelessWidget { )), if (_expanded) IconButton( - icon: Icon(Icons.delete), + icon: const Icon(Icons.delete), iconSize: ICON_SIZE_SMALL, onPressed: () { // Delete the meal item @@ -221,7 +221,7 @@ class DismissibleMealHeader extends StatelessWidget { direction: DismissDirection.startToEnd, child: Container( padding: const EdgeInsets.all(10), - decoration: BoxDecoration(color: Colors.white), + decoration: const BoxDecoration(color: Colors.white), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -240,7 +240,7 @@ class DismissibleMealHeader extends StatelessWidget { ), IconButton( visualDensity: VisualDensity.compact, - icon: _expanded ? Icon(Icons.unfold_less) : Icon(Icons.unfold_more), + icon: _expanded ? const Icon(Icons.unfold_less) : const Icon(Icons.unfold_more), onPressed: () { _toggle(); }, @@ -253,15 +253,15 @@ class DismissibleMealHeader extends StatelessWidget { background: Container( color: wgerPrimaryButtonColor, //Theme.of(context).primaryColor, alignment: Alignment.centerLeft, - padding: EdgeInsets.only(left: 10), + padding: const EdgeInsets.only(left: 10), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( AppLocalizations.of(context).logMeal, - style: TextStyle(color: Colors.white), + style: const TextStyle(color: Colors.white), ), - Icon( + const Icon( Icons.history_edu, color: Colors.white, ), diff --git a/lib/widgets/nutrition/nutritional_diary_detail.dart b/lib/widgets/nutrition/nutritional_diary_detail.dart index 44d987bc5..1f5bee767 100644 --- a/lib/widgets/nutrition/nutritional_diary_detail.dart +++ b/lib/widgets/nutrition/nutritional_diary_detail.dart @@ -41,7 +41,7 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { ) { return Table( defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder( + border: const TableBorder( horizontalInside: BorderSide(width: 1, color: wgerTextMuted), ), columnWidths: const {0: FractionColumnWidth(0.4)}, @@ -52,20 +52,20 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text( AppLocalizations.of(context).macronutrients, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), ), Text( AppLocalizations.of(context).planned, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), Text( AppLocalizations.of(context).logged, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), Text( AppLocalizations.of(context).difference, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), ], ), @@ -177,9 +177,9 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { children: [ Text( DateFormat.Hm(Localizations.localeOf(context).languageCode).format(log.datetime), - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), - SizedBox(width: 8), + const SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -188,9 +188,9 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { '${log.amount.toStringAsFixed(0)}${AppLocalizations.of(context).g} ${log.ingredientObj.name}', overflow: TextOverflow.ellipsis, ), - SizedBox(height: 4), + const SizedBox(height: 4), ...getMutedNutritionalValues(values, context), - SizedBox(height: 12), + const SizedBox(height: 12), ], ), ), @@ -199,7 +199,7 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { Provider.of(context, listen: false) .deleteLog(log.id!, _nutritionalPlan.id!); }, - icon: Icon(Icons.delete_outline)), + icon: const Icon(Icons.delete_outline)), ], ); }).toList(); @@ -212,7 +212,7 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { final logs = _nutritionalPlan.getLogsForDate(_date); if (valuesDate == null) { - return Text(''); + return const Text(''); } return Column( @@ -221,7 +221,7 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { child: Column( children: [ Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), height: 220, child: NutritionalPlanPieChartWidget(valuesDate), ), @@ -232,7 +232,7 @@ class NutritionalDiaryDetailWidget extends StatelessWidget { ], ), ), - SizedBox(height: 15), + const SizedBox(height: 15), ...getEntriesTable(logs, context), ], ); diff --git a/lib/widgets/nutrition/nutritional_plan_detail.dart b/lib/widgets/nutrition/nutritional_plan_detail.dart index 23ecfcdf9..01b8e0b1f 100644 --- a/lib/widgets/nutrition/nutritional_plan_detail.dart +++ b/lib/widgets/nutrition/nutritional_plan_detail.dart @@ -47,7 +47,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { return SliverList( delegate: SliverChildListDelegate( [ - SizedBox(height: 10), + const SizedBox(height: 10), ..._nutritionalPlan.meals.map((meal) => MealWidget(meal)).toList(), Padding( padding: const EdgeInsets.all(8.0), @@ -66,7 +66,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), ), Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), height: 220, child: NutritionalPlanPieChartWidget(nutritionalValues), ), @@ -74,7 +74,7 @@ class NutritionalPlanDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 10), child: Table( defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder( + border: const TableBorder( horizontalInside: BorderSide(width: 1, color: wgerTextMuted), ), columnWidths: const {0: FractionColumnWidth(0.4)}, @@ -85,20 +85,20 @@ class NutritionalPlanDetailWidget extends StatelessWidget { padding: const EdgeInsets.symmetric(vertical: tablePadding), child: Text( AppLocalizations.of(context).macronutrients, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), ), Text( AppLocalizations.of(context).total, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), Text( AppLocalizations.of(context).percentEnergy, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), Text( AppLocalizations.of(context).gPerBodyKg, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), ], ), @@ -112,8 +112,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { nutritionalValues.energy.toStringAsFixed(0) + AppLocalizations.of(context).kcal, ), - Text(''), - Text(''), + const Text(''), + const Text(''), ], ), TableRow( @@ -148,8 +148,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), Text(nutritionalValues.carbohydratesSugar.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(''), - Text(''), + const Text(''), + const Text(''), ], ), TableRow( @@ -171,8 +171,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), Text(nutritionalValues.fatSaturated.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(''), - Text(''), + const Text(''), + const Text(''), ], ), TableRow( @@ -183,8 +183,8 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), Text(nutritionalValues.fibres.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(''), - Text(''), + const Text(''), + const Text(''), ], ), TableRow( @@ -195,21 +195,21 @@ class NutritionalPlanDetailWidget extends StatelessWidget { ), Text(nutritionalValues.sodium.toStringAsFixed(0) + AppLocalizations.of(context).g), - Text(''), - Text(''), + const Text(''), + const Text(''), ], ), ], ), ), - Padding(padding: const EdgeInsets.all(8.0)), + const Padding(padding: EdgeInsets.all(8.0)), Text( AppLocalizations.of(context).nutritionalDiary, textAlign: TextAlign.center, style: Theme.of(context).textTheme.headline6, ), Container( - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), height: 220, child: NutritionalDiaryChartWidget(nutritionalPlan: _nutritionalPlan), ), diff --git a/lib/widgets/nutrition/nutritional_plans_list.dart b/lib/widgets/nutrition/nutritional_plans_list.dart index 752561d51..2e43a1037 100644 --- a/lib/widgets/nutrition/nutritional_plans_list.dart +++ b/lib/widgets/nutrition/nutritional_plans_list.dart @@ -80,12 +80,12 @@ class NutritionalPlansList extends StatelessWidget { background: Container( color: Theme.of(context).errorColor, alignment: Alignment.centerRight, - padding: EdgeInsets.only(right: 20), - margin: EdgeInsets.symmetric( + padding: const EdgeInsets.only(right: 20), + margin: const EdgeInsets.symmetric( horizontal: 4, vertical: 4, ), - child: Icon( + child: const Icon( Icons.delete, color: Colors.white, ), diff --git a/lib/widgets/weight/entries_list.dart b/lib/widgets/weight/entries_list.dart index 0694765e5..379650161 100644 --- a/lib/widgets/weight/entries_list.dart +++ b/lib/widgets/weight/entries_list.dart @@ -36,7 +36,7 @@ class WeightEntriesList extends StatelessWidget { children: [ Container( color: Theme.of(context).cardColor, - padding: EdgeInsets.all(15), + padding: const EdgeInsets.all(15), height: 220, child: MeasurementChartWidget( _weightProvider.items.map((e) => MeasurementChartEntry(e.weight, e.date)).toList()), @@ -50,7 +50,7 @@ class WeightEntriesList extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.end, children: [ Text(AppLocalizations.of(context).measurements), - Icon(Icons.chevron_right) + const Icon(Icons.chevron_right) ], )), Expanded( @@ -95,12 +95,12 @@ class WeightEntriesList extends StatelessWidget { secondaryBackground: Container( color: Theme.of(context).errorColor, alignment: Alignment.centerRight, - padding: EdgeInsets.only(right: 20), - margin: EdgeInsets.symmetric( + padding: const EdgeInsets.only(right: 20), + margin: const EdgeInsets.symmetric( horizontal: 4, vertical: 4, ), - child: Icon( + child: const Icon( Icons.delete, color: Colors.white, ), @@ -108,12 +108,12 @@ class WeightEntriesList extends StatelessWidget { background: Container( color: wgerPrimaryButtonColor, alignment: Alignment.centerLeft, - padding: EdgeInsets.only(left: 20), - margin: EdgeInsets.symmetric( + padding: const EdgeInsets.only(left: 20), + margin: const EdgeInsets.symmetric( horizontal: 4, vertical: 4, ), - child: Icon( + child: const Icon( Icons.edit, color: Colors.white, ), diff --git a/lib/widgets/weight/forms.dart b/lib/widgets/weight/forms.dart index 7be89bbe0..7523f1655 100644 --- a/lib/widgets/weight/forms.dart +++ b/lib/widgets/weight/forms.dart @@ -50,7 +50,7 @@ class WeightForm extends StatelessWidget { readOnly: true, // Stop keyboard from appearing decoration: InputDecoration( labelText: AppLocalizations.of(context).date, - suffixIcon: Icon(Icons.calendar_today_outlined), + suffixIcon: const Icon(Icons.calendar_today_outlined), ), enableInteractiveSelection: false, controller: dateController, diff --git a/lib/widgets/workouts/charts.dart b/lib/widgets/workouts/charts.dart index b85642b5a..b628078df 100644 --- a/lib/widgets/workouts/charts.dart +++ b/lib/widgets/workouts/charts.dart @@ -55,7 +55,7 @@ class LogChartWidget extends StatelessWidget { ); }), ], - primaryMeasureAxis: charts.NumericAxisSpec( + primaryMeasureAxis: const charts.NumericAxisSpec( tickProviderSpec: charts.BasicNumericTickProviderSpec(zeroBound: false), ), behaviors: [ diff --git a/lib/widgets/workouts/day.dart b/lib/widgets/workouts/day.dart index a2951f97a..405a4fffb 100644 --- a/lib/widgets/workouts/day.dart +++ b/lib/widgets/workouts/day.dart @@ -118,7 +118,7 @@ class _WorkoutDayWidgetState extends State { if (_expanded) IconButton( visualDensity: VisualDensity.compact, - icon: Icon(Icons.delete), + icon: const Icon(Icons.delete), iconSize: ICON_SIZE_SMALL, onPressed: () { Provider.of(context, listen: false).deleteSet(set); @@ -138,14 +138,14 @@ class _WorkoutDayWidgetState extends State { ), ) .toList(), - Divider(), + const Divider(), ], ), ), if (_expanded) ReorderableDragStartListener( index: index, - child: IconButton( + child: const IconButton( icon: Icon(Icons.drag_handle), onPressed: null, ), @@ -178,7 +178,7 @@ class _WorkoutDayWidgetState extends State { widget._day, ); }, - icon: Icon(Icons.delete), + icon: const Icon(Icons.delete), ), if (widget._day.sets.isNotEmpty) Ink( @@ -212,13 +212,13 @@ class _WorkoutDayWidgetState extends State { ), ); }, - icon: Icon(Icons.edit), + icon: const Icon(Icons.edit), ), ], ), - Divider(), + const Divider(), ReorderableListView( - physics: NeverScrollableScrollPhysics(), + physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, buildDefaultDragHandles: false, onReorder: (_oldIndex, _newIndex) async { @@ -282,7 +282,7 @@ class DayHeaderDismissible extends StatelessWidget { direction: DismissDirection.startToEnd, child: Container( padding: const EdgeInsets.all(10), - decoration: BoxDecoration(color: Colors.white), + decoration: const BoxDecoration(color: Colors.white), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -300,7 +300,7 @@ class DayHeaderDismissible extends StatelessWidget { ), ), IconButton( - icon: _expanded ? Icon(Icons.unfold_less) : Icon(Icons.unfold_more), + icon: _expanded ? const Icon(Icons.unfold_less) : const Icon(Icons.unfold_more), onPressed: () { _toggle(); }, @@ -311,15 +311,15 @@ class DayHeaderDismissible extends StatelessWidget { background: Container( color: wgerPrimaryButtonColor, //Theme.of(context).primaryColor, alignment: Alignment.centerLeft, - padding: EdgeInsets.only(left: 10), + padding: const EdgeInsets.only(left: 10), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( AppLocalizations.of(context).gymMode, - style: TextStyle(color: Colors.white), + style: const TextStyle(color: Colors.white), ), - Icon( + const Icon( Icons.play_arrow, color: Colors.white, ), diff --git a/lib/widgets/workouts/forms.dart b/lib/widgets/workouts/forms.dart index ba524cc15..bd0f800b1 100644 --- a/lib/widgets/workouts/forms.dart +++ b/lib/widgets/workouts/forms.dart @@ -55,7 +55,7 @@ class WorkoutForm extends StatelessWidget { child: Column( children: [ TextFormField( - key: Key('field-name'), + key: const Key('field-name'), decoration: InputDecoration(labelText: AppLocalizations.of(context).name), controller: workoutNameController, validator: (value) { @@ -72,7 +72,7 @@ class WorkoutForm extends StatelessWidget { }, ), TextFormField( - key: Key('field-description'), + key: const Key('field-description'), decoration: InputDecoration(labelText: AppLocalizations.of(context).description), minLines: 3, maxLines: 10, @@ -91,7 +91,7 @@ class WorkoutForm extends StatelessWidget { }, ), ElevatedButton( - key: Key(SUBMIT_BUTTON_KEY_NAME), + key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), onPressed: () async { // Validate and save @@ -182,7 +182,7 @@ class _DayFormWidgetState extends State { child: ListView( children: [ TextFormField( - key: Key('field-description'), + key: const Key('field-description'), decoration: InputDecoration( labelText: AppLocalizations.of(context).description, helperText: AppLocalizations.of(context).dayDescriptionHelp, @@ -205,10 +205,10 @@ class _DayFormWidgetState extends State { return null; }, ), - SizedBox(height: 10), + const SizedBox(height: 10), ...Day.weekdays.keys.map((dayNr) => DayCheckbox(dayNr, widget._day)).toList(), ElevatedButton( - key: Key(SUBMIT_BUTTON_KEY_NAME), + key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), onPressed: () async { if (!_form.currentState!.validate()) { @@ -234,11 +234,11 @@ class _DayFormWidgetState extends State { await showDialog( context: context, builder: (ctx) => AlertDialog( - title: Text('An error occurred!'), - content: Text('Something went wrong.'), + title: const Text('An error occurred!'), + content: const Text('Something went wrong.'), actions: [ TextButton( - child: Text('Okay'), + child: const Text('Okay'), onPressed: () { Navigator.of(ctx).pop(); }, @@ -317,7 +317,7 @@ class _SetFormWidgetState extends State { child: ListView( children: [ Container( - padding: EdgeInsets.only(top: 10), + padding: const EdgeInsets.only(top: 10), color: wgerPrimaryColorLight, child: Column( //crossAxisAlignment: CrossAxisAlignment.start, @@ -356,14 +356,14 @@ class _SetFormWidgetState extends State { children: [ Card( child: TypeAheadFormField( - key: Key('field-typeahead'), + key: const Key('field-typeahead'), textFieldConfiguration: TextFieldConfiguration( controller: _exercisesController, decoration: InputDecoration( labelText: AppLocalizations.of(context).searchExercise, - prefixIcon: Icon(Icons.search), + prefixIcon: const Icon(Icons.search), suffixIcon: IconButton( - icon: Icon(Icons.help), + icon: const Icon(Icons.help), onPressed: () { showDialog( context: context, @@ -372,7 +372,7 @@ class _SetFormWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ Text(AppLocalizations.of(context).selectExercises), - SizedBox(height: 10), + const SizedBox(height: 10), Text(AppLocalizations.of(context).sameRepetitions) ], ), @@ -440,7 +440,7 @@ class _SetFormWidgetState extends State { }, ), ), - SizedBox(height: 10), + const SizedBox(height: 10), TextFormField( decoration: InputDecoration( labelText: AppLocalizations.of(context).comment, @@ -459,7 +459,7 @@ class _SetFormWidgetState extends State { widget._set.comment = newValue!; }, ), - SizedBox(height: 10), + const SizedBox(height: 10), ...widget._set.exercisesObj.asMap().entries.map((entry) { final index = entry.key; final exercise = entry.value; @@ -477,21 +477,21 @@ class _SetFormWidgetState extends State { removeExercise, ), if (showSupersetInfo) - Padding( - padding: const EdgeInsets.all(3.0), + const Padding( + padding: EdgeInsets.all(3.0), child: Text('+'), ), if (showSupersetInfo) Text(AppLocalizations.of(context).supersetWith), if (showSupersetInfo) - Padding( - padding: const EdgeInsets.all(3.0), + const Padding( + padding: EdgeInsets.all(3.0), child: Text('+'), ), ], ); }).toList(), ElevatedButton( - key: Key(SUBMIT_BUTTON_KEY_NAME), + key: const Key(SUBMIT_BUTTON_KEY_NAME), child: Text(AppLocalizations.of(context).save), onPressed: () async { final isValid = _formKey.currentState!.validate(); @@ -574,7 +574,7 @@ class ExerciseSetting extends StatelessWidget { flex: 2, child: RepsInputWidget(setting, _detailed), ), - SizedBox(width: 4), + const SizedBox(width: 4), Flexible( flex: 3, child: RepetitionUnitInputWidget(setting), @@ -588,7 +588,7 @@ class ExerciseSetting extends StatelessWidget { flex: 2, child: WeightInputWidget(setting, _detailed), ), - SizedBox(width: 4), + const SizedBox(width: 4), Flexible( flex: 3, child: WeightUnitInputWidget(setting, key: Key(i.toString())), @@ -599,7 +599,7 @@ class ExerciseSetting extends StatelessWidget { flex: 2, child: RiRInputWidget(setting), ), - SizedBox(height: 15), + const SizedBox(height: 15), ], ), ); @@ -612,11 +612,11 @@ class ExerciseSetting extends StatelessWidget { children: [ Text( AppLocalizations.of(context).setNr(i + 1), - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), - SizedBox(width: 10), + const SizedBox(width: 10), Flexible(child: RepsInputWidget(setting, _detailed)), - SizedBox(width: 4), + const SizedBox(width: 4), Flexible(child: WeightInputWidget(setting, _detailed)), ], ), @@ -644,12 +644,12 @@ class ExerciseSetting extends StatelessWidget { contentPadding: EdgeInsets.zero, leading: ExerciseImageWidget(image: _exercise.getMainImage), trailing: IconButton( - icon: Icon(Icons.delete), + icon: const Icon(Icons.delete), onPressed: () { removeExercise(_exercise); }), ), - Divider(), + const Divider(), //ExerciseImage(imageUrl: _exercise.images.first.url), if (!_detailed) diff --git a/lib/widgets/workouts/gym_mode.dart b/lib/widgets/workouts/gym_mode.dart index a9c09cc80..e59cb884e 100644 --- a/lib/widgets/workouts/gym_mode.dart +++ b/lib/widgets/workouts/gym_mode.dart @@ -181,7 +181,7 @@ class StartPage extends StatelessWidget { _controller, exercisePages: _exercisePages, ), - Divider(), + const Divider(), Expanded( child: ListView( children: [ @@ -197,7 +197,7 @@ class StartPage extends StatelessWidget { style: Theme.of(context).textTheme.headline6, ), ...set.getSmartRepr(s.exerciseObj).map((e) => Text(e)).toList(), - SizedBox(height: 15), + const SizedBox(height: 15), ], ); }).toList(), @@ -211,7 +211,8 @@ class StartPage extends StatelessWidget { ElevatedButton( child: Text(AppLocalizations.of(context).start), onPressed: () { - _controller.nextPage(duration: Duration(milliseconds: 200), curve: Curves.bounceIn); + _controller.nextPage( + duration: const Duration(milliseconds: 200), curve: Curves.bounceIn); }, ), NavigationFooter( @@ -290,7 +291,7 @@ class _LogPageState extends State { return Row( children: [ IconButton( - icon: Icon( + icon: const Icon( Icons.remove, color: Colors.black, ), @@ -328,7 +329,7 @@ class _LogPageState extends State { ), ), IconButton( - icon: Icon( + icon: const Icon( Icons.add, color: Colors.black, ), @@ -348,7 +349,7 @@ class _LogPageState extends State { return Row( children: [ IconButton( - icon: Icon( + icon: const Icon( Icons.remove, color: Colors.black, ), @@ -396,7 +397,7 @@ class _LogPageState extends State { ), ), IconButton( - icon: Icon( + icon: const Icon( Icons.add, color: Colors.black, ), @@ -429,7 +430,7 @@ class _LogPageState extends State { Row( children: [ Flexible(child: getRepsWidget()), - SizedBox(width: 8), + const SizedBox(width: 8), Flexible(child: getWeightWidget()), ], ), @@ -438,7 +439,7 @@ class _LogPageState extends State { crossAxisAlignment: CrossAxisAlignment.end, children: [ Flexible(child: getRepsWidget()), - SizedBox(width: 8), + const SizedBox(width: 8), Flexible(child: RepetitionUnitInputWidget(widget._log)), ], ), @@ -447,7 +448,7 @@ class _LogPageState extends State { crossAxisAlignment: CrossAxisAlignment.end, children: [ Flexible(child: getWeightWidget()), - SizedBox(width: 8), + const SizedBox(width: 8), Flexible(child: WeightUnitInputWidget(widget._log)) ], ), @@ -464,7 +465,7 @@ class _LogPageState extends State { ElevatedButton( child: (!_isSaving) ? Text(AppLocalizations.of(context).save) - : SizedBox( + : const SizedBox( height: 20, width: 20, child: CircularProgressIndicator( @@ -488,7 +489,7 @@ class _LogPageState extends State { .addLog(widget._log); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - duration: Duration(seconds: 2), // default is 4 + duration: const Duration(seconds: 2), // default is 4 content: Text( AppLocalizations.of(context).successfullySaved, textAlign: TextAlign.center, @@ -527,7 +528,7 @@ class _LogPageState extends State { title: Text(log.singleLogRepTextNoNl), subtitle: Text(DateFormat.yMd(Localizations.localeOf(context).languageCode).format(log.date)), - trailing: Icon(Icons.copy), + trailing: const Icon(Icons.copy), onTap: () { setState(() { // Text field @@ -544,7 +545,7 @@ class _LogPageState extends State { .showSnackBar(SnackBar(content: Text(AppLocalizations.of(context).dataCopied))); }); }, - contentPadding: EdgeInsets.symmetric(horizontal: 40), + contentPadding: const EdgeInsets.symmetric(horizontal: 40), ); }).toList(), ], @@ -576,9 +577,9 @@ class _LogPageState extends State { (key) => Row( children: [ Text(groupedPlates[key].toString()), - Text('×'), + const Text('×'), Container( - decoration: BoxDecoration( + decoration: const BoxDecoration( color: wgerPrimaryColorLight, shape: BoxShape.circle, ), @@ -591,13 +592,13 @@ class _LogPageState extends State { alignment: Alignment.center, child: Text( key.toString(), - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), ), ), ), ), ), - SizedBox(width: 10), + const SizedBox(width: 10), ], ), ) @@ -606,7 +607,7 @@ class _LogPageState extends State { ) : MutedText(AppLocalizations.of(context).plateCalculatorNotDivisible), ), - SizedBox(height: 3), + const SizedBox(height: 3), ], ); } @@ -632,7 +633,7 @@ class _LogPageState extends State { widget._set.comment, textAlign: TextAlign.center, ), - SizedBox(height: 10), + const SizedBox(height: 10), Expanded( child: (widget._workoutPlan.filterLogsByExercise(widget._exercise).isNotEmpty) ? getPastLogs() @@ -675,10 +676,10 @@ class ExerciseOverview extends StatelessWidget { _controller, exercisePages: _exercisePages, ), - Divider(), + const Divider(), Expanded( child: ListView( - padding: EdgeInsets.symmetric(horizontal: 15), + padding: const EdgeInsets.symmetric(horizontal: 15), children: [ Text( _exercise.categoryObj.name, @@ -762,7 +763,7 @@ class _SessionPageState extends State { widget._controller, exercisePages: widget._exercisePages, ), - Divider(), + const Divider(), Expanded(child: Container()), Padding( padding: const EdgeInsets.symmetric(horizontal: 15), @@ -850,7 +851,7 @@ class _SessionPageState extends State { return null; }), ), - SizedBox(width: 10), + const SizedBox(width: 10), Flexible( child: TextFormField( decoration: @@ -1008,7 +1009,7 @@ class NavigationFooter extends StatelessWidget { children: [ if (showPrevious) IconButton( - icon: Icon(Icons.chevron_left), + icon: const Icon(Icons.chevron_left), onPressed: () { _controller.previousPage( duration: DEFAULT_ANIMATION_DURATION, @@ -1017,17 +1018,17 @@ class NavigationFooter extends StatelessWidget { }, ) else - SizedBox(width: 48), + const SizedBox(width: 48), Expanded( child: LinearProgressIndicator( minHeight: 1.5, value: _ratioCompleted, - valueColor: AlwaysStoppedAnimation(wgerPrimaryColor), + valueColor: const AlwaysStoppedAnimation(wgerPrimaryColor), ), ), if (showNext) IconButton( - icon: Icon(Icons.chevron_right), + icon: const Icon(Icons.chevron_right), onPressed: () { _controller.nextPage( duration: DEFAULT_ANIMATION_DURATION, @@ -1036,7 +1037,7 @@ class NavigationFooter extends StatelessWidget { }, ) else - SizedBox(width: 48), + const SizedBox(width: 48), ], ); } @@ -1066,7 +1067,7 @@ class NavigationHeader extends StatelessWidget { ...exercisePages.keys.map((e) { return ListTile( title: Text(e), - trailing: Icon(Icons.chevron_right), + trailing: const Icon(Icons.chevron_right), onTap: () { _controller.animateToPage( exercisePages[e]!, @@ -1096,7 +1097,7 @@ class NavigationHeader extends StatelessWidget { return Row( children: [ IconButton( - icon: Icon(Icons.close), + icon: const Icon(Icons.close), onPressed: () { Navigator.of(context).pop(); }, @@ -1112,7 +1113,7 @@ class NavigationHeader extends StatelessWidget { ), ), IconButton( - icon: Icon(Icons.menu), + icon: const Icon(Icons.menu), onPressed: () { showDialog( context: context, diff --git a/lib/widgets/workouts/log.dart b/lib/widgets/workouts/log.dart index 9a660d30b..10185f417 100644 --- a/lib/widgets/workouts/log.dart +++ b/lib/widgets/workouts/log.dart @@ -46,7 +46,7 @@ class ExerciseLogChart extends StatelessWidget { builder: (context, AsyncSnapshot> snapshot) => SizedBox( height: 150, child: snapshot.connectionState == ConnectionState.waiting - ? Center(child: CircularProgressIndicator()) + ? const Center(child: CircularProgressIndicator()) : LogChartWidget(snapshot.data, _currentDate), ), ); @@ -69,7 +69,7 @@ class DayLogWidget extends StatelessWidget { DateFormat.yMd(Localizations.localeOf(context).languageCode).format(_date), style: Theme.of(context).textTheme.headline5, ), - if (_session != null) Text('Session data here'), + if (_session != null) const Text('Session data here'), ..._exerciseData.keys.map((exercise) { return Column( children: [ @@ -79,7 +79,7 @@ class DayLogWidget extends StatelessWidget { ), ..._exerciseData[exercise]!.map((log) => Text(log.singleLogRepTextNoNl)).toList(), ExerciseLogChart(exercise, _date), - SizedBox(height: 30), + const SizedBox(height: 30), ], ); }).toList() diff --git a/lib/widgets/workouts/workout_logs.dart b/lib/widgets/workouts/workout_logs.dart index ff7e3dd62..4f38eb499 100644 --- a/lib/widgets/workouts/workout_logs.dart +++ b/lib/widgets/workouts/workout_logs.dart @@ -168,7 +168,7 @@ class _WorkoutLogCalendarState extends State { children: [ TableCalendar( locale: Localizations.localeOf(context).languageCode, - firstDay: DateTime.now().subtract(Duration(days: 1000)), + firstDay: DateTime.now().subtract(const Duration(days: 1000)), lastDay: DateTime.now(), focusedDay: _focusedDay, selectedDayPredicate: (day) => isSameDay(_selectedDay, day), diff --git a/lib/widgets/workouts/workout_plans_list.dart b/lib/widgets/workouts/workout_plans_list.dart index a5663a327..07efe5ad8 100644 --- a/lib/widgets/workouts/workout_plans_list.dart +++ b/lib/widgets/workouts/workout_plans_list.dart @@ -83,12 +83,12 @@ class WorkoutPlansList extends StatelessWidget { background: Container( color: Theme.of(context).errorColor, alignment: Alignment.centerRight, - padding: EdgeInsets.only(right: 20), - margin: EdgeInsets.symmetric( + padding: const EdgeInsets.only(right: 20), + margin: const EdgeInsets.symmetric( horizontal: 4, vertical: 4, ), - child: Icon( + child: const Icon( Icons.delete, color: Colors.white, ), diff --git a/test/auth_screen_test.dart b/test/auth_screen_test.dart index 6397a4f6f..48a091810 100644 --- a/test/auth_screen_test.dart +++ b/test/auth_screen_test.dart @@ -37,7 +37,7 @@ void main() { builder: (ctx, auth, _) => MaterialApp( localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, - locale: Locale('en'), + locale: const Locale('en'), home: AuthScreen(), ), ), @@ -68,14 +68,14 @@ void main() { expect(find.text('LOGIN INSTEAD'), findsNothing); // Check that the correct widgets are shown - expect(find.byKey(Key('inputUsername')), findsOneWidget); - expect(find.byKey(Key('inputEmail')), findsNothing); - expect(find.byKey(Key('inputPassword')), findsOneWidget); - expect(find.byKey(Key('inputServer')), findsNothing); - expect(find.byKey(Key('inputPassword2')), findsNothing); - expect(find.byKey(Key('actionButton')), findsOneWidget); - expect(find.byKey(Key('toggleActionButton')), findsOneWidget); - expect(find.byKey(Key('toggleCustomServerButton')), findsOneWidget); + expect(find.byKey(const Key('inputUsername')), findsOneWidget); + expect(find.byKey(const Key('inputEmail')), findsNothing); + expect(find.byKey(const Key('inputPassword')), findsOneWidget); + expect(find.byKey(const Key('inputServer')), findsNothing); + expect(find.byKey(const Key('inputPassword2')), findsNothing); + expect(find.byKey(const Key('actionButton')), findsOneWidget); + expect(find.byKey(const Key('toggleActionButton')), findsOneWidget); + expect(find.byKey(const Key('toggleCustomServerButton')), findsOneWidget); }, skip: true); // TODO(x): skipped because of technical problems: // either the provider wasn't found or, if the call was removed, the // localization data could not be loaded... @@ -83,7 +83,7 @@ void main() { testWidgets('Test the widgets on the auth screen, registration', (WidgetTester tester) async { // Wrap screen in material app so that the media query gets a context await tester.pumpWidget(MaterialApp(home: AuthScreen())); - await tester.tap(find.byKey(Key('toggleActionButton'))); + await tester.tap(find.byKey(const Key('toggleActionButton'))); // Rebuild the widget after the state has changed. await tester.pump(); @@ -91,12 +91,12 @@ void main() { expect(find.text('LOGIN INSTEAD'), findsOneWidget); // Check that the correct widgets are shown - expect(find.byKey(Key('inputUsername')), findsOneWidget); - expect(find.byKey(Key('inputEmail')), findsOneWidget); - expect(find.byKey(Key('inputPassword')), findsOneWidget); - expect(find.byKey(Key('inputServer')), findsOneWidget); - expect(find.byKey(Key('inputPassword2')), findsOneWidget); - expect(find.byKey(Key('actionButton')), findsOneWidget); - expect(find.byKey(Key('toggleActionButton')), findsOneWidget); + expect(find.byKey(const Key('inputUsername')), findsOneWidget); + expect(find.byKey(const Key('inputEmail')), findsOneWidget); + expect(find.byKey(const Key('inputPassword')), findsOneWidget); + expect(find.byKey(const Key('inputServer')), findsOneWidget); + expect(find.byKey(const Key('inputPassword2')), findsOneWidget); + expect(find.byKey(const Key('actionButton')), findsOneWidget); + expect(find.byKey(const Key('toggleActionButton')), findsOneWidget); }, skip: true); } diff --git a/test/extensions_test.dart b/test/extensions_test.dart index 5785444f9..c3140fcae 100644 --- a/test/extensions_test.dart +++ b/test/extensions_test.dart @@ -22,8 +22,8 @@ import 'package:wger/helpers/misc.dart'; void main() { test('Test the TimeOfDayExtension', () { - final time1 = TimeOfDay(hour: 00, minute: 00); - final time2 = TimeOfDay(hour: 23, minute: 59); + const time1 = TimeOfDay(hour: 00, minute: 00); + const time2 = TimeOfDay(hour: 23, minute: 59); expect(time2.toMinutes(), 23 * 60 + 59); expect(time1.isAfter(time2), false); diff --git a/test/gallery_form_test.dart b/test/gallery_form_test.dart index d3f1fbab5..690e2ceaf 100644 --- a/test/gallery_form_test.dart +++ b/test/gallery_form_test.dart @@ -58,16 +58,16 @@ void main() { expect(find.byType(TextFormField), findsNWidgets(2)); expect(find.text('A very cool image from the gym'), findsOneWidget); - expect(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); + expect(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); // Date can only be edited via the datepicker - await tester.tap(find.byKey(Key('field-date'))); + await tester.tap(find.byKey(const Key('field-date'))); await tester.pump(); await tester.tap(find.text('OK')); await tester.tap(find.text('15'), warnIfMissed: false); await tester.pump(); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); verifyNever(mockGalleryProvider.addImage(any, any)); verify(mockGalleryProvider.editImage(any, any)); diff --git a/test/gallery_screen_test.dart b/test/gallery_screen_test.dart index 4538964e3..8507048e6 100644 --- a/test/gallery_screen_test.dart +++ b/test/gallery_screen_test.dart @@ -46,7 +46,7 @@ void main() { locale: Locale(locale), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, - home: Gallery(), + home: const Gallery(), routes: { FormScreen.routeName: (ctx) => FormScreen(), }, @@ -63,11 +63,11 @@ void main() { testWidgets('Test opening the form for an existing image', (WidgetTester tester) async { await mockNetworkImagesFor(() => tester.pumpWidget(createScreen())); - await tester.tap(find.byKey(Key('image-1'))); + await tester.tap(find.byKey(const Key('image-1'))); await tester.pumpAndSettle(); // Detail dialog opens - expect(find.byKey(Key('image-1-detail')), findsOneWidget); + expect(find.byKey(const Key('image-1-detail')), findsOneWidget); expect(find.byType(Image), findsNWidgets(5)); // four in the overview, one in the popup expect(find.text('A very cool image from the gym'), findsOneWidget); expect(find.byIcon(Icons.edit), findsOneWidget); @@ -84,7 +84,7 @@ void main() { testWidgets('Tests the localization of dates - EN', (WidgetTester tester) async { await mockNetworkImagesFor(() => tester.pumpWidget(createScreen())); - await tester.tap(find.byKey(Key('image-1'))); + await tester.tap(find.byKey(const Key('image-1'))); await tester.pumpAndSettle(); expect(find.text('5/30/2021'), findsOneWidget); @@ -92,7 +92,7 @@ void main() { testWidgets('Tests the localization of dates - DE', (WidgetTester tester) async { await mockNetworkImagesFor(() => tester.pumpWidget(createScreen(locale: 'de'))); - await tester.tap(find.byKey(Key('image-1'))); + await tester.tap(find.byKey(const Key('image-1'))); await tester.pumpAndSettle(); expect(find.text('30.5.2021'), findsOneWidget); diff --git a/test/gym_mode_screen_test.dart b/test/gym_mode_screen_test.dart index 08967e510..685f501b0 100644 --- a/test/gym_mode_screen_test.dart +++ b/test/gym_mode_screen_test.dart @@ -96,7 +96,7 @@ void main() { expect(find.byIcon(Icons.menu), findsOneWidget); expect(find.byIcon(Icons.chevron_left), findsOneWidget); expect(find.byIcon(Icons.chevron_right), findsOneWidget); - await tester.drag(find.byType(ExerciseOverview), Offset(-500.0, 0.0)); + await tester.drag(find.byType(ExerciseOverview), const Offset(-500.0, 0.0)); await tester.pumpAndSettle(); // @@ -127,7 +127,7 @@ void main() { expect(find.byType(RepetitionUnitInputWidget), findsOneWidget); expect(find.byType(WeightUnitInputWidget), findsOneWidget); expect(find.byType(RiRInputWidget), findsOneWidget); - await tester.drag(find.byType(LogPage), Offset(-500.0, 0.0)); + await tester.drag(find.byType(LogPage), const Offset(-500.0, 0.0)); await tester.pumpAndSettle(); // @@ -148,7 +148,7 @@ void main() { expect(find.text('test exercise 1'), findsOneWidget); expect(find.byType(LogPage), findsOneWidget); expect(find.byType(Form), findsOneWidget); - await tester.drag(find.byType(LogPage), Offset(-500.0, 0.0)); + await tester.drag(find.byType(LogPage), const Offset(-500.0, 0.0)); await tester.pumpAndSettle(); // diff --git a/test/measurements/measurement_entries_screen_test.dart b/test/measurements/measurement_entries_screen_test.dart index b552e5ba1..58572d614 100644 --- a/test/measurements/measurement_entries_screen_test.dart +++ b/test/measurements/measurement_entries_screen_test.dart @@ -54,7 +54,7 @@ void main() { home: TextButton( onPressed: () => key.currentState!.push( MaterialPageRoute( - settings: RouteSettings(arguments: 1), + settings: const RouteSettings(arguments: 1), builder: (_) => MeasurementEntriesScreen(), ), ), diff --git a/test/measurements/measurement_provider_test.dart b/test/measurements/measurement_provider_test.dart index 1b531975c..ff9950fa2 100644 --- a/test/measurements/measurement_provider_test.dart +++ b/test/measurements/measurement_provider_test.dart @@ -34,11 +34,11 @@ void main() { ); const int tCategoryId = 1; - final MeasurementCategory tMeasurementCategory = + const MeasurementCategory tMeasurementCategory = MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'); final List tMeasurementCategories = [ - MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; final Map tMeasurementCategoriesMap = jsonDecode(fixture('measurement_categories.json')); @@ -160,7 +160,7 @@ void main() { notes: '', ) ]), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; // act @@ -172,16 +172,16 @@ void main() { }); group('addCategory()', () { - final MeasurementCategory tMeasurementCategoryWithoutId = + const MeasurementCategory tMeasurementCategoryWithoutId = MeasurementCategory(id: null, name: 'Strength', unit: 'kN'); final Map tMeasurementCategoryMap = jsonDecode(fixture('measurement_category.json')); final Map tMeasurementCategoryMapWithoutId = jsonDecode(fixture('measurement_category_without_id_to_json.json')); final List tMeasurementCategoriesAdded = [ - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm'), - MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), - MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm'), + const MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), + const MeasurementCategory(id: 1, name: 'Strength', unit: 'kN'), ]; setUp(() { when(mockWgerBaseProvider.post(any, any)) @@ -222,7 +222,7 @@ void main() { .thenAnswer((realInvocation) => Future.value(Response('', 200))); final List tMeasurementCategoriesOneDeleted = [ - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; // act @@ -267,8 +267,8 @@ void main() { test('should add the new MeasurementCategory and remove the old one', () async { // arrange final List tMeasurementCategoriesEdited = [ - MeasurementCategory(id: 1, name: 'Triceps', unit: 'm'), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm'), + const MeasurementCategory(id: 1, name: 'Triceps', unit: 'm'), + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm'), ]; // act @@ -342,7 +342,7 @@ void main() { ), tMeasurementEntry ]), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; setUp(() async { @@ -419,7 +419,7 @@ void main() { notes: 'Some important notes', ), ]), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; setUp(() async { @@ -481,7 +481,7 @@ void main() { notes: '', ), ]), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; when(mockWgerBaseProvider.deleteRequest(any, any)).thenThrow(WgerHttpException('{}')); @@ -530,7 +530,7 @@ void main() { notes: '', ) ]), - MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') + const MeasurementCategory(id: 2, name: 'Biceps', unit: 'cm') ]; // act diff --git a/test/nutritional_meal_form_test.dart b/test/nutritional_meal_form_test.dart index 85d273264..0075503d0 100644 --- a/test/nutritional_meal_form_test.dart +++ b/test/nutritional_meal_form_test.dart @@ -74,7 +74,7 @@ void main() { expect(find.byType(TextFormField), findsNWidgets(2)); expect(find.byType(ElevatedButton), findsOneWidget); - expect(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); + expect(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); }); testWidgets('Test editing an existing meal', (WidgetTester tester) async { @@ -93,9 +93,9 @@ void main() { reason: 'Time of existing meal is filled in', ); - await tester.enterText(find.byKey(Key('field-time')), '12:34'); - await tester.enterText(find.byKey(Key('field-name')), 'test meal'); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-time')), '12:34'); + await tester.enterText(find.byKey(const Key('field-name')), 'test meal'); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called verify(mockNutrition.editMeal(any)); @@ -112,9 +112,9 @@ void main() { reason: 'Current time is filled in', ); - await tester.enterText(find.byKey(Key('field-time')), '08:00'); - await tester.enterText(find.byKey(Key('field-name')), 'test meal'); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-time')), '08:00'); + await tester.enterText(find.byKey(const Key('field-name')), 'test meal'); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called verifyNever(mockNutrition.editMeal(any)); diff --git a/test/nutritional_plan_form_test.dart b/test/nutritional_plan_form_test.dart index 6c2fe4bec..6cb457052 100644 --- a/test/nutritional_plan_form_test.dart +++ b/test/nutritional_plan_form_test.dart @@ -74,7 +74,7 @@ void main() { expect(find.byType(TextFormField), findsOneWidget); expect(find.byType(ElevatedButton), findsOneWidget); - expect(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); + expect(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); }); testWidgets('Test editing an existing nutritional plan', (WidgetTester tester) async { @@ -86,8 +86,8 @@ void main() { findsOneWidget, reason: 'Description of existing nutritional plan is filled in', ); - await tester.enterText(find.byKey(Key('field-description')), 'New description'); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-description')), 'New description'); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called verify(mockNutrition.editPlan(any)); @@ -112,8 +112,8 @@ void main() { await tester.pumpAndSettle(); expect(find.text(''), findsOneWidget, reason: 'New nutritional plan has no description'); - await tester.enterText(find.byKey(Key('field-description')), 'New cool plan'); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-description')), 'New cool plan'); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called verifyNever(mockNutrition.editPlan(any)); diff --git a/test/nutritional_plans_screen_test.dart b/test/nutritional_plans_screen_test.dart index bef977a28..abd62d509 100644 --- a/test/nutritional_plans_screen_test.dart +++ b/test/nutritional_plans_screen_test.dart @@ -72,7 +72,7 @@ void main() { testWidgets('Test deleting an item by dragging the dismissible', (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); - await tester.drag(find.byKey(Key('1')), Offset(-500.0, 0.0)); + await tester.drag(find.byKey(const Key('1')), const Offset(-500.0, 0.0)); await tester.pumpAndSettle(); // Confirmation dialog diff --git a/test/setting_model_test.dart b/test/setting_model_test.dart index 418318bee..53d2381c1 100644 --- a/test/setting_model_test.dart +++ b/test/setting_model_test.dart @@ -24,8 +24,8 @@ import 'package:wger/models/workouts/weight_unit.dart'; void main() { group('Test the singleSettingRepText method', () { test('Default rep and weight units, no RiR', () async { - final repUnit = RepetitionUnit(id: 1, name: 'mol'); - final weightUnit = WeightUnit(id: 1, name: 'mg'); + const repUnit = RepetitionUnit(id: 1, name: 'mol'); + const weightUnit = WeightUnit(id: 1, name: 'mg'); final setting = Setting.empty(); setting.reps = 2; @@ -37,8 +37,8 @@ void main() { }); test('Default rep and weight units', () async { - final repUnit = RepetitionUnit(id: 1, name: 'mol'); - final weightUnit = WeightUnit(id: 1, name: 'mg'); + const repUnit = RepetitionUnit(id: 1, name: 'mol'); + const weightUnit = WeightUnit(id: 1, name: 'mg'); final setting = Setting.empty(); setting.reps = 2; @@ -50,8 +50,8 @@ void main() { }); test('No weight, default rep and weight units', () async { - final repUnit = RepetitionUnit(id: 1, name: 'mol'); - final weightUnit = WeightUnit(id: 1, name: 'mg'); + const repUnit = RepetitionUnit(id: 1, name: 'mol'); + const weightUnit = WeightUnit(id: 1, name: 'mg'); final setting = Setting.empty(); setting.reps = 2; @@ -63,8 +63,8 @@ void main() { }); test('Custom rep and weight units, no RiR', () async { - final repUnit = RepetitionUnit(id: 2, name: 'mol'); - final weightUnit = WeightUnit(id: 2, name: 'mg'); + const repUnit = RepetitionUnit(id: 2, name: 'mol'); + const weightUnit = WeightUnit(id: 2, name: 'mg'); final setting = Setting.empty(); setting.reps = 2; @@ -76,8 +76,8 @@ void main() { }); test('Custom rep and weight units, RiR', () async { - final repUnit = RepetitionUnit(id: 2, name: 'mol'); - final weightUnit = WeightUnit(id: 2, name: 'mg'); + const repUnit = RepetitionUnit(id: 2, name: 'mol'); + const weightUnit = WeightUnit(id: 2, name: 'mg'); final setting = Setting.empty(); setting.reps = 2; diff --git a/test/weight_screen_test.dart b/test/weight_screen_test.dart index 3ab6c8c5c..d551227a7 100644 --- a/test/weight_screen_test.dart +++ b/test/weight_screen_test.dart @@ -80,7 +80,7 @@ void main() { testWidgets('Test deleting an item by dragging the dismissible', (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); - await tester.drag(find.byKey(Key('1')), Offset(-500.0, 0.0)); + await tester.drag(find.byKey(const Key('1')), const Offset(-500.0, 0.0)); await tester.pumpAndSettle(); expect(find.byType(ListTile), findsOneWidget); }); diff --git a/test/workout_day_form_test.dart b/test/workout_day_form_test.dart index 06df674e6..a06cab565 100644 --- a/test/workout_day_form_test.dart +++ b/test/workout_day_form_test.dart @@ -72,9 +72,9 @@ void main() { await tester.pumpAndSettle(); expect(find.text(''), findsOneWidget, reason: 'New day has no description'); - await tester.enterText(find.byKey(Key('field-description')), 'Leg day!'); - await tester.tap(find.byKey(Key('field-checkbox-1'))); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-description')), 'Leg day!'); + await tester.tap(find.byKey(const Key('field-checkbox-1'))); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); verify(mockWorkoutPlans.addDay(any, any)); diff --git a/test/workout_form_test.dart b/test/workout_form_test.dart index 853eeb79c..fae44db85 100644 --- a/test/workout_form_test.dart +++ b/test/workout_form_test.dart @@ -91,8 +91,8 @@ void main() { findsOneWidget, reason: 'Description of existing workout plan', ); - await tester.enterText(find.byKey(Key('field-name')), 'New description'); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-name')), 'New description'); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); // Correct method was called verify(mockWorkoutPlans.editWorkout(any)); @@ -120,8 +120,8 @@ void main() { await tester.pumpAndSettle(); expect(find.text(''), findsNWidgets(2), reason: 'New workout has no name or description'); - await tester.enterText(find.byKey(Key('field-name')), editWorkout.name); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-name')), editWorkout.name); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); verifyNever(mockWorkoutPlans.editWorkout(any)); verify(mockWorkoutPlans.addWorkout(any)); @@ -140,9 +140,9 @@ void main() { await tester.pumpAndSettle(); expect(find.text(''), findsNWidgets(2), reason: 'New workout has no name or description'); - await tester.enterText(find.byKey(Key('field-name')), editWorkout.name); - await tester.enterText(find.byKey(Key('field-description')), editWorkout.description); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.enterText(find.byKey(const Key('field-name')), editWorkout.name); + await tester.enterText(find.byKey(const Key('field-description')), editWorkout.description); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); verifyNever(mockWorkoutPlans.editWorkout(any)); verify(mockWorkoutPlans.addWorkout(any)); diff --git a/test/workout_plans_screen_test.dart b/test/workout_plans_screen_test.dart index 962f1c1be..fe3873188 100644 --- a/test/workout_plans_screen_test.dart +++ b/test/workout_plans_screen_test.dart @@ -74,7 +74,7 @@ void main() { testWidgets('Test deleting an item by dragging the dismissible', (WidgetTester tester) async { await tester.pumpWidget(createHomeScreen()); - await tester.drag(find.byKey(Key('1')), Offset(-500.0, 0.0)); + await tester.drag(find.byKey(const Key('1')), const Offset(-500.0, 0.0)); await tester.pumpAndSettle(); // Confirmation dialog diff --git a/test/workout_set_form_test.dart b/test/workout_set_form_test.dart index 91f60f26a..cbab5c10c 100644 --- a/test/workout_set_form_test.dart +++ b/test/workout_set_form_test.dart @@ -81,7 +81,7 @@ void main() { expect(find.byType(TypeAheadFormField), findsOneWidget); expect(find.byType(Slider), findsOneWidget); //expect(find.byType(SwitchListTile), findsOneWidget); - expect(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); + expect(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME)), findsOneWidget); expect(find.byType(ElevatedButton), findsOneWidget); }); @@ -93,10 +93,10 @@ void main() { await tester.pumpWidget(createHomeScreen()); await tester.pumpAndSettle(); - await tester.enterText(find.byKey(Key('field-typeahead')), 'exercise'); + await tester.enterText(find.byKey(const Key('field-typeahead')), 'exercise'); await tester.pumpAndSettle(); - await tester.tap(find.byKey(Key(SUBMIT_BUTTON_KEY_NAME))); + await tester.tap(find.byKey(const Key(SUBMIT_BUTTON_KEY_NAME))); //verify(mockWorkoutPlans.addSet(any)); //verify(mockWorkoutPlans.addSettinbg(any)); diff --git a/test_data/nutritional_plans.dart b/test_data/nutritional_plans.dart index 3983b92b1..b38573ce8 100644 --- a/test_data/nutritional_plans.dart +++ b/test_data/nutritional_plans.dart @@ -85,7 +85,7 @@ NutritionalPlan getNutritionalPlan() { final meal1 = Meal( id: 1, plan: 1, - time: TimeOfDay(hour: 17, minute: 0), + time: const TimeOfDay(hour: 17, minute: 0), name: 'Initial Name 1', ); meal1.mealItems = [mealItem1, mealItem2]; @@ -93,7 +93,7 @@ NutritionalPlan getNutritionalPlan() { final meal2 = Meal( id: 2, plan: 1, - time: TimeOfDay(hour: 22, minute: 5), + time: const TimeOfDay(hour: 22, minute: 5), name: 'Initial Name 2', ); meal2.mealItems = [mealItem3]; From 1e8080cc02cf1c92b868278408fab1b1514557a9 Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:43:55 +0200 Subject: [PATCH 05/10] always_declare_return_types --- analysis_options.yaml | 2 +- lib/models/measurements/measurement_category.dart | 1 + lib/models/nutrition/nutritrional_values.dart | 2 +- lib/models/workouts/session.dart | 2 +- lib/providers/body_weight.dart | 2 +- lib/providers/gallery.dart | 2 +- lib/providers/nutrition.dart | 2 +- lib/providers/workout_plans.dart | 2 +- lib/widgets/dashboard/calendar.dart | 7 +++---- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 5fa3c9fcc..02df472ea 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -24,7 +24,7 @@ linter: # These rules are documented on and in the same order as # the Dart Lint rules page to make maintenance easier # https://github.com/dart-lang/linter/blob/master/example/all.yaml - always_declare_return_types: false # definitely to be changed + always_declare_return_types: true always_put_control_body_on_new_line: true always_require_non_null_named_parameters: true always_specify_types: false #to be changed diff --git a/lib/models/measurements/measurement_category.dart b/lib/models/measurements/measurement_category.dart index 3c66cb534..21d1e94f4 100644 --- a/lib/models/measurements/measurement_category.dart +++ b/lib/models/measurements/measurement_category.dart @@ -55,5 +55,6 @@ class MeasurementCategory extends Equatable { List get props => [id, name, unit, entries]; // Helper function which makes the entries list of the toJson output null, as it isn't needed + //ignore: always_declare_return_types static _nullValue(_) => null; } diff --git a/lib/models/nutrition/nutritrional_values.dart b/lib/models/nutrition/nutritrional_values.dart index 186cc8238..ed08ac62f 100644 --- a/lib/models/nutrition/nutritrional_values.dart +++ b/lib/models/nutrition/nutritrional_values.dart @@ -46,7 +46,7 @@ class NutritionalValues { return energy * 4.184; } - add(NutritionalValues data) { + void add(NutritionalValues data) { energy += data.energy; protein += data.protein; carbohydrates += data.carbohydrates; diff --git a/lib/models/workouts/session.dart b/lib/models/workouts/session.dart index fd919ddc7..1c2aea7bf 100644 --- a/lib/models/workouts/session.dart +++ b/lib/models/workouts/session.dart @@ -68,7 +68,7 @@ class WorkoutSession { factory WorkoutSession.fromJson(Map json) => _$WorkoutSessionFromJson(json); Map toJson() => _$WorkoutSessionToJson(this); - get impressionAsString { + String? get impressionAsString { return IMPRESSION_MAP[impression]; } } diff --git a/lib/providers/body_weight.dart b/lib/providers/body_weight.dart index 3e85caada..251858cd4 100644 --- a/lib/providers/body_weight.dart +++ b/lib/providers/body_weight.dart @@ -36,7 +36,7 @@ class BodyWeightProvider extends WgerBaseProvider with ChangeNotifier { } /// Clears all lists - clear() { + void clear() { _entries = []; } diff --git a/lib/providers/gallery.dart b/lib/providers/gallery.dart index f1815c30c..d15bf32dc 100644 --- a/lib/providers/gallery.dart +++ b/lib/providers/gallery.dart @@ -37,7 +37,7 @@ class GalleryProvider extends WgerBaseProvider with ChangeNotifier { super(auth, client); /// Clears all lists - clear() { + void clear() { images = []; } diff --git a/lib/providers/nutrition.dart b/lib/providers/nutrition.dart index 5b28c90ff..efbb1dc20 100644 --- a/lib/providers/nutrition.dart +++ b/lib/providers/nutrition.dart @@ -54,7 +54,7 @@ class NutritionPlansProvider extends WgerBaseProvider with ChangeNotifier { } /// Clears all lists - clear() { + void clear() { _plans = []; _ingredients = []; } diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index a79ec4043..b95ddb23b 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -68,7 +68,7 @@ class WorkoutPlansProvider extends WgerBaseProvider with ChangeNotifier { } /// Clears all lists - clear() { + void clear() { _currentPlan = null; _workoutPlans = []; _weightUnits = []; diff --git a/lib/widgets/dashboard/calendar.dart b/lib/widgets/dashboard/calendar.dart index f14fd49bf..dea7d7203 100644 --- a/lib/widgets/dashboard/calendar.dart +++ b/lib/widgets/dashboard/calendar.dart @@ -46,11 +46,11 @@ class Event { Event(this._type, this._description); - get description { + String get description { return _description; } - get type { + EventType get type { return _type; } } @@ -267,9 +267,8 @@ class _DashboardCalendarWidgetState extends State case EventType.measurement: return AppLocalizations.of(context).measurement; } - return event.description.toString(); })()), - subtitle: Text(event.description.toString()), + subtitle: Text(event.description), //onTap: () => print('$event tapped!'), )) .toList() From 2bc2d472d0d87621645b63c8aee371445e2c960d Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:11:45 +0200 Subject: [PATCH 06/10] unnecessary_await_in_return --- analysis_options.yaml | 6 +++--- lib/screens/nutritional_plan_screen.dart | 5 ++--- lib/screens/workout_plan_screen.dart | 4 ++-- lib/widgets/workouts/forms.dart | 5 ++--- .../measurement_provider_test.dart | 19 +++++++++---------- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 02df472ea..8c943b5db 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -27,7 +27,7 @@ linter: always_declare_return_types: true always_put_control_body_on_new_line: true always_require_non_null_named_parameters: true - always_specify_types: false #to be changed + always_specify_types: false #decided against using it for now annotate_overrides: true avoid_bool_literals_in_conditional_expressions: true avoid_classes_with_only_static_members: true @@ -50,7 +50,7 @@ linter: avoid_types_as_parameter_names: true avoid_unnecessary_containers: true avoid_unused_constructor_parameters: true - avoid_void_async: false # to be changed + avoid_void_async: false await_only_futures: true camel_case_extensions: true camel_case_types: false # maybe to be changed @@ -127,7 +127,7 @@ linter: throw_in_finally: true tighten_type_of_initializing_formals: true type_init_formals: true - unnecessary_await_in_return: false # to be changed + unnecessary_await_in_return: true unnecessary_brace_in_string_interps: true unnecessary_const: true unnecessary_getters_setters: true diff --git a/lib/screens/nutritional_plan_screen.dart b/lib/screens/nutritional_plan_screen.dart index 68d02caa3..eacf8d6ae 100644 --- a/lib/screens/nutritional_plan_screen.dart +++ b/lib/screens/nutritional_plan_screen.dart @@ -34,9 +34,8 @@ enum NutritionalPlanOptions { class NutritionalPlanScreen extends StatelessWidget { static const routeName = '/nutritional-plan-detail'; - Future _loadFullPlan(BuildContext context, int planId) async { - return await Provider.of(context, listen: false) - .fetchAndSetPlanFull(planId); + Future _loadFullPlan(BuildContext context, int planId) { + return Provider.of(context, listen: false).fetchAndSetPlanFull(planId); } @override diff --git a/lib/screens/workout_plan_screen.dart b/lib/screens/workout_plan_screen.dart index 9156eaa42..c3c3d38a3 100644 --- a/lib/screens/workout_plan_screen.dart +++ b/lib/screens/workout_plan_screen.dart @@ -52,8 +52,8 @@ class _WorkoutPlanScreenState extends State { }); } - Future _loadFullWorkout(BuildContext context, int planId) async { - return await Provider.of(context, listen: false) + Future _loadFullWorkout(BuildContext context, int planId) { + return Provider.of(context, listen: false) .fetchAndSetWorkoutPlanFull(planId); } diff --git a/lib/widgets/workouts/forms.dart b/lib/widgets/workouts/forms.dart index bd0f800b1..4bd887e11 100644 --- a/lib/widgets/workouts/forms.dart +++ b/lib/widgets/workouts/forms.dart @@ -391,9 +391,8 @@ class _SetFormWidgetState extends State { errorMaxLines: 2, ), ), - suggestionsCallback: (pattern) async { - return await Provider.of(context, listen: false) - .searchExercise( + suggestionsCallback: (pattern) { + return Provider.of(context, listen: false).searchExercise( pattern, Localizations.localeOf(context).languageCode, ); diff --git a/test/measurements/measurement_provider_test.dart b/test/measurements/measurement_provider_test.dart index ff9950fa2..f7bf44d0e 100644 --- a/test/measurements/measurement_provider_test.dart +++ b/test/measurements/measurement_provider_test.dart @@ -235,8 +235,7 @@ void main() { test('should throw a NoSuchEntryException if no category is found', () { // act & assert - expect(() async => await measurementProvider.deleteCategory(83), - throwsA(isA())); + expect(() => measurementProvider.deleteCategory(83), throwsA(isA())); }); test( @@ -246,7 +245,7 @@ void main() { when(mockWgerBaseProvider.deleteRequest(any, any)).thenThrow(WgerHttpException('{}')); // act & assert - expect(() async => await measurementProvider.deleteCategory(tCategoryId), + expect(() async => measurementProvider.deleteCategory(tCategoryId), throwsA(isA())); expect(measurementProvider.categories, tMeasurementCategories); }); @@ -300,7 +299,7 @@ void main() { // act & assert expect( - () async => await measurementProvider.editCategory( + () => measurementProvider.editCategory( tCategoryId, tCategoryEditedName, tCategoryEditedUnit), throwsA(isA())); expect(measurementProvider.categories, tMeasurementCategories); @@ -402,7 +401,7 @@ void main() { .thenAnswer((realInvocation) => Future.value(measurementEntryMapWrongCategory)); // act & assert - expect(() async => await measurementProvider.addEntry(tMeasurementEntryWrongCategory), + expect(() => measurementProvider.addEntry(tMeasurementEntryWrongCategory), throwsA(isA())); }); }); @@ -440,7 +439,7 @@ void main() { test("should throw a NoSuchEntryException if the category isn't found", () { // act & assert - expect(() async => await measurementProvider.deleteEntry(tEntryId, 83), + expect(() async => measurementProvider.deleteEntry(tEntryId, 83), throwsA(isA())); }); @@ -448,7 +447,7 @@ void main() { "should throw a NoSuchEntryException if the entry in the categories entries List isn't found", () { // act & assert - expect(() async => await measurementProvider.deleteEntry(83, tCategoryId), + expect(() => measurementProvider.deleteEntry(83, tCategoryId), throwsA(isA())); }); @@ -486,7 +485,7 @@ void main() { when(mockWgerBaseProvider.deleteRequest(any, any)).thenThrow(WgerHttpException('{}')); // act & assert - expect(() async => await measurementProvider.deleteEntry(tEntryId, tCategoryId), + expect(() async => measurementProvider.deleteEntry(tEntryId, tCategoryId), throwsA(isA())); expect(measurementProvider.categories, tMeasurementCategories); }); @@ -549,7 +548,7 @@ void main() { test("should throw a NoSuchEntryException if category doesn't exist", () { // act & assert expect( - () async => await measurementProvider.editEntry( + () => measurementProvider.editEntry( tEntryId, 83, tEntryEditedValue, @@ -562,7 +561,7 @@ void main() { test("should throw a NoSuchEntryException if entry doesn't exist", () { // act & assert expect( - () async => await measurementProvider.editEntry( + () => measurementProvider.editEntry( 83, tCategoryId, tEntryEditedValue, From 32a306f75a6304172b126e0ca590f30a3c61f0e2 Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:26:06 +0200 Subject: [PATCH 07/10] prefer_typing_uninitialized_variables --- analysis_options.yaml | 6 +++--- lib/widgets/nutrition/meal.dart | 2 +- lib/widgets/workouts/charts.dart | 2 +- lib/widgets/workouts/day.dart | 4 ++-- lib/widgets/workouts/log.dart | 4 ++-- lib/widgets/workouts/workout_logs.dart | 2 +- lib/widgets/workouts/workout_plan_detail.dart | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 8c943b5db..2c1ee5ed3 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -60,7 +60,7 @@ linter: control_flow_in_finally: true deprecated_consistency: true directives_ordering: true - empty_catches: false # to be changed + empty_catches: false empty_constructor_bodies: true empty_statements: true exhaustive_cases: true @@ -72,7 +72,7 @@ linter: leading_newlines_in_multiline_strings: true library_names: true library_prefixes: true - library_private_types_in_public_api: false # to be checked + library_private_types_in_public_api: false list_remove_unrelated_type: true missing_whitespace_between_adjacent_strings: false no_adjacent_strings_in_list: true @@ -115,7 +115,7 @@ linter: prefer_null_aware_operators: true prefer_single_quotes: true prefer_spread_collections: true - prefer_typing_uninitialized_variables: false # to be changed + prefer_typing_uninitialized_variables: true prefer_void_to_null: true provide_deprecation_message: true recursive_getters: true diff --git a/lib/widgets/nutrition/meal.dart b/lib/widgets/nutrition/meal.dart index 6b7d24f18..a7eb6bb44 100644 --- a/lib/widgets/nutrition/meal.dart +++ b/lib/widgets/nutrition/meal.dart @@ -204,7 +204,7 @@ class MealItemWidget extends StatelessWidget { class DismissibleMealHeader extends StatelessWidget { final bool _expanded; - final _toggle; + final Function _toggle; const DismissibleMealHeader( this._expanded, diff --git a/lib/widgets/workouts/charts.dart b/lib/widgets/workouts/charts.dart index b628078df..e238be095 100644 --- a/lib/widgets/workouts/charts.dart +++ b/lib/widgets/workouts/charts.dart @@ -30,7 +30,7 @@ class TimeSeriesLog { } class LogChartWidget extends StatelessWidget { - final _data; + final Map _data; final DateTime _currentDate; const LogChartWidget(this._data, this._currentDate); diff --git a/lib/widgets/workouts/day.dart b/lib/widgets/workouts/day.dart index 405a4fffb..b334ea679 100644 --- a/lib/widgets/workouts/day.dart +++ b/lib/widgets/workouts/day.dart @@ -36,7 +36,7 @@ class SettingWidget extends StatelessWidget { final Set set; final Setting setting; final bool expanded; - final toggle; + final Function toggle; const SettingWidget({ required this.set, @@ -265,7 +265,7 @@ class _WorkoutDayWidgetState extends State { class DayHeaderDismissible extends StatelessWidget { final Day _day; final bool _expanded; - final _toggle; + final Function _toggle; const DayHeaderDismissible({ required Day day, diff --git a/lib/widgets/workouts/log.dart b/lib/widgets/workouts/log.dart index 10185f417..1b2b7309d 100644 --- a/lib/widgets/workouts/log.dart +++ b/lib/widgets/workouts/log.dart @@ -45,9 +45,9 @@ class ExerciseLogChart extends StatelessWidget { future: _getChartEntries(context), builder: (context, AsyncSnapshot> snapshot) => SizedBox( height: 150, - child: snapshot.connectionState == ConnectionState.waiting + child: snapshot.connectionState == ConnectionState.waiting && snapshot.hasData ? const Center(child: CircularProgressIndicator()) - : LogChartWidget(snapshot.data, _currentDate), + : LogChartWidget(snapshot.data!, _currentDate), ), ); } diff --git a/lib/widgets/workouts/workout_logs.dart b/lib/widgets/workouts/workout_logs.dart index 4f38eb499..77bab60ca 100644 --- a/lib/widgets/workouts/workout_logs.dart +++ b/lib/widgets/workouts/workout_logs.dart @@ -30,7 +30,7 @@ import 'package:wger/widgets/workouts/log.dart'; class WorkoutLogs extends StatefulWidget { final WorkoutPlan _workoutPlan; - final _changeMode; + final Function _changeMode; const WorkoutLogs(this._workoutPlan, this._changeMode); @override diff --git a/lib/widgets/workouts/workout_plan_detail.dart b/lib/widgets/workouts/workout_plan_detail.dart index 2c03efaf1..fe9f06720 100644 --- a/lib/widgets/workouts/workout_plan_detail.dart +++ b/lib/widgets/workouts/workout_plan_detail.dart @@ -26,7 +26,7 @@ import 'package:wger/widgets/workouts/forms.dart'; class WorkoutPlanDetail extends StatefulWidget { final WorkoutPlan _workoutPlan; - final _changeMode; + final Function _changeMode; const WorkoutPlanDetail(this._workoutPlan, this._changeMode); @override From 2fb9737901fb7ad10c1ee27df84081977fba84a5 Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:28:19 +0200 Subject: [PATCH 08/10] camel_case_types statics can't be private --- lib/providers/exercises.dart | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/providers/exercises.dart b/lib/providers/exercises.dart index 17004d4ed..4cdd33c76 100644 --- a/lib/providers/exercises.dart +++ b/lib/providers/exercises.dart @@ -41,14 +41,14 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { static const daysToCache = 7; - static const _exerciseInfoUrlPath = 'exerciseinfo'; - static const _exerciseSearchPath = 'exercise/search'; + static const exerciseInfoUrlPath = 'exerciseinfo'; + static const exerciseSearchPath = 'exercise/search'; - static const _exerciseCommentUrlPath = 'exercisecomment'; - static const _exerciseImagesUrlPath = 'exerciseimage'; - static const _categoriesUrlPath = 'exercisecategory'; - static const _musclesUrlPath = 'muscle'; - static const _equipmentUrlPath = 'equipment'; + static const exerciseCommentUrlPath = 'exercisecomment'; + static const exerciseImagesUrlPath = 'exerciseimage'; + static const categoriesUrlPath = 'exercisecategory'; + static const musclesUrlPath = 'muscle'; + static const equipmentUrlPath = 'equipment'; final List _exercises; final List _categories = []; @@ -65,7 +65,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { } Future fetchAndSetCategories() async { - final response = await client.get(makeUrl(_categoriesUrlPath)); + final response = await client.get(makeUrl(categoriesUrlPath)); final categories = json.decode(response.body) as Map; try { for (final category in categories['results']) { @@ -77,7 +77,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { } Future fetchAndSetMuscles() async { - final response = await client.get(makeUrl(_musclesUrlPath)); + final response = await client.get(makeUrl(musclesUrlPath)); final muscles = json.decode(response.body) as Map; try { for (final muscle in muscles['results']) { @@ -89,7 +89,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { } Future fetchAndSetEquipment() async { - final response = await client.get(makeUrl(_equipmentUrlPath)); + final response = await client.get(makeUrl(equipmentUrlPath)); final equipments = json.decode(response.body) as Map; try { for (final equipment in equipments['results']) { @@ -111,7 +111,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { } on StateError { // Get exercise from the server and save to cache - final data = await fetch(makeUrl(_exerciseInfoUrlPath, id: exerciseId)); + final data = await fetch(makeUrl(exerciseInfoUrlPath, id: exerciseId)); final exercise = Exercise.fromJson(data); _exercises.add(exercise); final prefs = await SharedPreferences.getInstance(); @@ -145,7 +145,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { final response = await client.get( makeUrl( - _exerciseInfoUrlPath, + exerciseInfoUrlPath, query: {'limit': '1000'}, ), headers: { @@ -188,7 +188,7 @@ class ExercisesProvider extends WgerBaseProvider with ChangeNotifier { // Send the request final response = await client.get( makeUrl( - _exerciseSearchPath, + exerciseSearchPath, query: {'term': name, 'language': languageCode}, ), headers: { From f3c45e74a6c00d5e9a64435a1f8ea2e36a8d665d Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:29:03 +0200 Subject: [PATCH 09/10] Update analysis_options.yaml --- analysis_options.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 2c1ee5ed3..e111bcf87 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -53,7 +53,7 @@ linter: avoid_void_async: false await_only_futures: true camel_case_extensions: true - camel_case_types: false # maybe to be changed + camel_case_types: false cancel_subscriptions: true cast_nullable_to_non_nullable: false # to be changed constant_identifier_names: false From 261b7f3e8d6de5b0f3a51c452ed1c574b226f340 Mon Sep 17 00:00:00 2001 From: Marvin M <39344769+M123-dev@users.noreply.github.com> Date: Fri, 8 Oct 2021 15:29:18 +0200 Subject: [PATCH 10/10] Update analysis_options.yaml --- analysis_options.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index e111bcf87..92ea0b11d 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -27,7 +27,7 @@ linter: always_declare_return_types: true always_put_control_body_on_new_line: true always_require_non_null_named_parameters: true - always_specify_types: false #decided against using it for now + always_specify_types: false # decided against using it for now annotate_overrides: true avoid_bool_literals_in_conditional_expressions: true avoid_classes_with_only_static_members: true