Fix merge conflicts

This commit is contained in:
Roland Geider
2022-02-19 22:16:32 +01:00
parent badc3257d0
commit 5cebbb7c7f
11 changed files with 143 additions and 124 deletions

View File

@@ -23,6 +23,7 @@ import 'package:wger/models/exercises/equipment.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/image.dart';
import 'package:wger/models/exercises/muscle.dart';
import 'package:wger/models/exercises/video.dart';
part 'base.g.dart';
@@ -73,6 +74,9 @@ class ExerciseBase extends Equatable {
@JsonKey(ignore: true)
List<Exercise> exercises = [];
@JsonKey(ignore: true)
List<Video> videos = [];
ExerciseBase(
{required this.id,
required this.uuid,

View File

@@ -41,10 +41,8 @@ class ExercisesProvider with ChangeNotifier {
final WgerBaseProvider baseProvider;
static const EXERCISE_CACHE_DAYS = 7;
static const CACHE_VERSION = 2;
static const CACHE_VERSION = 3;
static const daysToCache = 7;
static const CACHE_VERSION = 2;
static const _exerciseInfoUrlPath = 'exerciseinfo';
static const _exerciseBaseUrlPath = 'exercise-base';
@@ -437,24 +435,6 @@ class ExercisesProvider with ChangeNotifier {
return exercises;
}
/// Checks the required cache version
///
/// This is needed since the content of the exercise cache can change and we need
/// to invalidate it as a result
Future<void> checkExerciseCacheVersion() async {
final prefs = await SharedPreferences.getInstance();
if (false && prefs.containsKey(PREFS_EXERCISE_CACHE_VERSION)) {
final cacheVersion = prefs.getInt(PREFS_EXERCISE_CACHE_VERSION);
if (cacheVersion! != CACHE_VERSION) {
prefs.remove(PREFS_EXERCISES);
}
prefs.setInt(PREFS_EXERCISE_CACHE_VERSION, CACHE_VERSION);
} else {
prefs.remove(PREFS_EXERCISES);
prefs.setInt(PREFS_EXERCISE_CACHE_VERSION, CACHE_VERSION);
}
}
Future<void> fetchAndSetExercises() async {
clear();

View File

@@ -22,14 +22,13 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:wger/providers/exercises.dart';
import 'package:wger/widgets/core/core.dart';
import 'package:wger/models/exercises/exercise.dart';
import 'package:wger/models/exercises/muscle.dart';
import 'package:wger/widgets/exercises/images.dart';
import 'package:wger/widgets/exercises/videos.dart';
import 'package:wger/providers/exercises.dart';
import 'package:wger/widgets/core/core.dart';
import 'package:wger/widgets/exercises/images.dart';
import 'package:wger/widgets/exercises/list_tile.dart';
import 'package:wger/widgets/exercises/videos.dart';
class ExerciseDetail extends StatelessWidget {
final Exercise _exercise;
@@ -221,10 +220,10 @@ class ExerciseDetail extends StatelessWidget {
final List<Widget> out = [];
out.add(Chip(
label: Text(_exercise.categoryObj.name),
label: Text(_exercise.base.category.name),
));
if (_exercise.equipment.isNotEmpty) {
_exercise.equipment.map((e) => Chip(label: Text(e.name))).forEach((element) {
if (_exercise.base.equipment.isNotEmpty) {
_exercise.base.equipment.map((e) => Chip(label: Text(e.name))).forEach((element) {
out.add(element);
});
}
@@ -235,8 +234,8 @@ class ExerciseDetail extends StatelessWidget {
List<Widget> getVideos() {
// TODO: add carousel for the other videos
final List<Widget> out = [];
if (_exercise.videos.isNotEmpty) {
_exercise.videos.map((v) => ExerciseVideoWidget(video: v)).forEach((element) {
if (_exercise.base.videos.isNotEmpty) {
_exercise.base.videos.map((v) => ExerciseVideoWidget(video: v)).forEach((element) {
out.add(element);
});

View File

@@ -383,7 +383,7 @@ packages:
source: hosted
version: "2.0.5"
flutter_svg:
dependency: transitive
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
@@ -595,6 +595,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.0"
multi_select_flutter:
dependency: "direct main"
description:
name: multi_select_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
nested:
dependency: transitive
description:

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/gallery/gallery_screen_test.dart.
// Do not manually edit this file.
@@ -12,6 +12,7 @@ import 'package:wger/models/gallery/image.dart' as _i5;
import 'package:wger/providers/auth.dart' as _i2;
import 'package:wger/providers/gallery.dart' as _i4;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/measurements/measurement_categories_screen_test.dart.
// Do not manually edit this file.
@@ -11,6 +11,7 @@ import 'package:wger/models/measurements/measurement_entry.dart' as _i6;
import 'package:wger/providers/base_provider.dart' as _i2;
import 'package:wger/providers/measurement.dart' as _i4;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/measurements/measurement_provider_test.dart.
// Do not manually edit this file.
@@ -9,6 +9,7 @@ import 'package:mockito/mockito.dart' as _i1;
import 'package:wger/providers/auth.dart' as _i2;
import 'package:wger/providers/base_provider.dart' as _i4;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/nutrition/nutritional_plan_form_test.dart.
// Do not manually edit this file.
@@ -14,6 +14,7 @@ import 'package:wger/models/nutrition/nutritional_plan.dart' as _i4;
import 'package:wger/providers/auth.dart' as _i2;
import 'package:wger/providers/nutrition.dart' as _i8;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
@@ -162,6 +163,11 @@ class MockNutritionPlansProvider extends _i1.Mock
returnValue: Future<List<dynamic>>.value(<dynamic>[]))
as _i9.Future<List<dynamic>>);
@override
_i9.Future<_i7.Ingredient?> searchIngredientWithCode(String? code) =>
(super.noSuchMethod(Invocation.method(#searchIngredientWithCode, [code]),
returnValue: Future<_i7.Ingredient?>.value())
as _i9.Future<_i7.Ingredient?>);
@override
_i9.Future<void> logMealToDiary(_i5.Meal? meal) =>
(super.noSuchMethod(Invocation.method(#logMealToDiary, [meal]),
returnValue: Future<void>.value(),

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/other/base_provider_test.dart.
// Do not manually edit this file.
@@ -12,6 +12,7 @@ import 'package:http/src/response.dart' as _i2;
import 'package:http/src/streamed_response.dart' as _i3;
import 'package:mockito/mockito.dart' as _i1;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/workout/workout_form_test.dart.
// Do not manually edit this file.
@@ -19,6 +19,7 @@ import 'package:wger/models/workouts/workout_plan.dart' as _i6;
import 'package:wger/providers/auth.dart' as _i4;
import 'package:wger/providers/workout_plans.dart' as _i12;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references

View File

@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.0.17 from annotations
// Mocks generated by Mockito 5.1.0 from annotations
// in wger/test/workout/workout_set_form_test.dart.
// Do not manually edit this file.
@@ -15,6 +15,7 @@ import 'package:wger/models/exercises/muscle.dart' as _i6;
import 'package:wger/providers/base_provider.dart' as _i2;
import 'package:wger/providers/exercises.dart' as _i8;
// ignore_for_file: type=lint
// ignore_for_file: avoid_redundant_argument_values
// ignore_for_file: avoid_setters_without_getters
// ignore_for_file: comment_references
@@ -24,11 +25,13 @@ import 'package:wger/providers/exercises.dart' as _i8;
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {}
class _FakeWgerBaseProvider_0 extends _i1.Fake implements _i2.WgerBaseProvider {
}
class _FakeExercise_1 extends _i1.Fake implements _i3.Exercise {}
class _FakeExerciseCategory_2 extends _i1.Fake implements _i4.ExerciseCategory {}
class _FakeExerciseCategory_2 extends _i1.Fake implements _i4.ExerciseCategory {
}
class _FakeEquipment_3 extends _i1.Fake implements _i5.Equipment {}
@@ -46,76 +49,83 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
@override
_i2.WgerBaseProvider get baseProvider =>
(super.noSuchMethod(Invocation.getter(#baseProvider), returnValue: _FakeWgerBaseProvider_0())
as _i2.WgerBaseProvider);
(super.noSuchMethod(Invocation.getter(#baseProvider),
returnValue: _FakeWgerBaseProvider_0()) as _i2.WgerBaseProvider);
@override
set exerciseBases(List<_i9.ExerciseBase>? exercisesBases) =>
super.noSuchMethod(Invocation.setter(#exerciseBases, exercisesBases),
returnValueForMissingStub: null);
@override
set exercises(List<_i3.Exercise>? exercises) =>
super.noSuchMethod(Invocation.setter(#exercises, exercises), returnValueForMissingStub: null);
@override
List<_i9.ExerciseBase> get filteredExerciseBases =>
(super.noSuchMethod(Invocation.getter(#filteredExercises), returnValue: <_i9.ExerciseBase>[])
as List<_i9.ExerciseBase>);
@override
set filteredExerciseBases(List<_i9.ExerciseBase>? newFilteredExercises) =>
super.noSuchMethod(Invocation.setter(#filteredExercises, newFilteredExercises),
super.noSuchMethod(Invocation.setter(#exercises, exercises),
returnValueForMissingStub: null);
@override
List<_i3.Exercise> get items =>
(super.noSuchMethod(Invocation.getter(#items), returnValue: <_i3.Exercise>[])
as List<_i3.Exercise>);
List<_i9.ExerciseBase> get filteredExerciseBases =>
(super.noSuchMethod(Invocation.getter(#filteredExerciseBases),
returnValue: <_i9.ExerciseBase>[]) as List<_i9.ExerciseBase>);
@override
set filteredExerciseBases(List<_i9.ExerciseBase>? newFilteredExercises) =>
super.noSuchMethod(
Invocation.setter(#filteredExerciseBases, newFilteredExercises),
returnValueForMissingStub: null);
@override
List<_i3.Exercise> get items => (super.noSuchMethod(Invocation.getter(#items),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
List<_i9.ExerciseBase> get bases =>
(super.noSuchMethod(Invocation.getter(#bases), returnValue: <_i9.ExerciseBase>[])
as List<_i9.ExerciseBase>);
(super.noSuchMethod(Invocation.getter(#bases),
returnValue: <_i9.ExerciseBase>[]) as List<_i9.ExerciseBase>);
@override
List<_i4.ExerciseCategory> get categories =>
(super.noSuchMethod(Invocation.getter(#categories), returnValue: <_i4.ExerciseCategory>[])
as List<_i4.ExerciseCategory>);
(super.noSuchMethod(Invocation.getter(#categories),
returnValue: <_i4.ExerciseCategory>[]) as List<_i4.ExerciseCategory>);
@override
List<_i6.Muscle> get muscles =>
(super.noSuchMethod(Invocation.getter(#muscles), returnValue: <_i6.Muscle>[])
as List<_i6.Muscle>);
(super.noSuchMethod(Invocation.getter(#muscles),
returnValue: <_i6.Muscle>[]) as List<_i6.Muscle>);
@override
List<_i5.Equipment> get equipment =>
(super.noSuchMethod(Invocation.getter(#equipment), returnValue: <_i5.Equipment>[])
as List<_i5.Equipment>);
(super.noSuchMethod(Invocation.getter(#equipment),
returnValue: <_i5.Equipment>[]) as List<_i5.Equipment>);
@override
List<_i7.Language> get languages =>
(super.noSuchMethod(Invocation.getter(#languages), returnValue: <_i7.Language>[])
as List<_i7.Language>);
(super.noSuchMethod(Invocation.getter(#languages),
returnValue: <_i7.Language>[]) as List<_i7.Language>);
@override
bool get hasListeners =>
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false) as bool);
(super.noSuchMethod(Invocation.getter(#hasListeners), returnValue: false)
as bool);
@override
_i10.Future<void> setFilters(_i8.Filters? newFilters) =>
(super.noSuchMethod(Invocation.method(#setFilters, [newFilters]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<void> findByFilters() => (super.noSuchMethod(Invocation.method(#findByFilters, []),
_i10.Future<void> setFilters(_i8.Filters? newFilters) => (super.noSuchMethod(
Invocation.method(#setFilters, [newFilters]),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
void clear() =>
super.noSuchMethod(Invocation.method(#clear, []), returnValueForMissingStub: null);
_i10.Future<void> findByFilters() => (super.noSuchMethod(
Invocation.method(#findByFilters, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
void clear() => super.noSuchMethod(Invocation.method(#clear, []),
returnValueForMissingStub: null);
@override
List<_i3.Exercise> findByCategory(_i4.ExerciseCategory? category) =>
(super.noSuchMethod(Invocation.method(#findByCategory, [category]),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i3.Exercise findExerciseById(int? id) => (super
.noSuchMethod(Invocation.method(#findExerciseById, [id]), returnValue: _FakeExercise_1())
as _i3.Exercise);
_i3.Exercise findExerciseById(int? id) =>
(super.noSuchMethod(Invocation.method(#findExerciseById, [id]),
returnValue: _FakeExercise_1()) as _i3.Exercise);
@override
List<_i3.Exercise> findExercisesByVariationId(int? id,
{int? exerciseIdToExclude, int? languageId}) =>
(super.noSuchMethod(
Invocation.method(#findExercisesByVariationId, [id],
{#exerciseIdToExclude: exerciseIdToExclude, #languageId: languageId}),
Invocation.method(#findExercisesByVariationId, [
id
], {
#exerciseIdToExclude: exerciseIdToExclude,
#languageId: languageId
}),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i4.ExerciseCategory findCategoryById(int? id) =>
@@ -127,53 +137,62 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
returnValue: _FakeEquipment_3()) as _i5.Equipment);
@override
_i6.Muscle findMuscleById(int? id) =>
(super.noSuchMethod(Invocation.method(#findMuscleById, [id]), returnValue: _FakeMuscle_4())
as _i6.Muscle);
(super.noSuchMethod(Invocation.method(#findMuscleById, [id]),
returnValue: _FakeMuscle_4()) as _i6.Muscle);
@override
_i7.Language findLanguageById(int? id) => (super
.noSuchMethod(Invocation.method(#findLanguageById, [id]), returnValue: _FakeLanguage_5())
as _i7.Language);
_i7.Language findLanguageById(int? id) =>
(super.noSuchMethod(Invocation.method(#findLanguageById, [id]),
returnValue: _FakeLanguage_5()) as _i7.Language);
@override
_i10.Future<void> fetchAndSetCategories() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetCategories, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
_i10.Future<void> fetchAndSetCategories() => (super.noSuchMethod(
Invocation.method(#fetchAndSetCategories, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<void> fetchAndSetVariations() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetVariations, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
_i10.Future<void> fetchAndSetVariations() => (super.noSuchMethod(
Invocation.method(#fetchAndSetVariations, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<void> fetchAndSetMuscles() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetMuscles, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
_i10.Future<void> fetchAndSetMuscles() => (super.noSuchMethod(
Invocation.method(#fetchAndSetMuscles, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<void> fetchAndSetEquipment() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetEquipment, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
_i10.Future<void> fetchAndSetEquipment() => (super.noSuchMethod(
Invocation.method(#fetchAndSetEquipment, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<void> fetchAndSetLanguages() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetLanguages, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
_i10.Future<void> fetchAndSetLanguages() => (super.noSuchMethod(
Invocation.method(#fetchAndSetLanguages, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<_i3.Exercise> fetchAndSetExercise(int? exerciseId) =>
(super.noSuchMethod(Invocation.method(#fetchAndSetExercise, [exerciseId]),
returnValue: Future<_i3.Exercise>.value(_FakeExercise_1())) as _i10.Future<_i3.Exercise>);
returnValue: Future<_i3.Exercise>.value(_FakeExercise_1()))
as _i10.Future<_i3.Exercise>);
@override
List<_i9.ExerciseBase> mapImages(dynamic data, List<_i9.ExerciseBase>? bases) =>
_i10.Future<void> checkExerciseCacheVersion() => (super.noSuchMethod(
Invocation.method(#checkExerciseCacheVersion, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
List<_i9.ExerciseBase> mapImages(
dynamic data, List<_i9.ExerciseBase>? bases) =>
(super.noSuchMethod(Invocation.method(#mapImages, [data, bases]),
returnValue: <_i9.ExerciseBase>[]) as List<_i9.ExerciseBase>);
@override
List<_i9.ExerciseBase> setBaseData(dynamic data, List<_i3.Exercise>? exercises) =>
List<_i9.ExerciseBase> setBaseData(
dynamic data, List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#setBaseData, [data, exercises]),
returnValue: <_i9.ExerciseBase>[]) as List<_i9.ExerciseBase>);
@override
List<dynamic> mapBases(List<_i9.ExerciseBase>? bases, List<_i3.Exercise>? exercises) => (super
.noSuchMethod(Invocation.method(#mapBases, [bases, exercises]), returnValue: <dynamic>[])
as List<dynamic>);
List<dynamic> mapBases(
List<_i9.ExerciseBase>? bases, List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#mapBases, [bases, exercises]),
returnValue: <dynamic>[]) as List<dynamic>);
@override
List<_i3.Exercise> mapLanguages(List<_i3.Exercise>? exercises) =>
(super.noSuchMethod(Invocation.method(#mapLanguages, [exercises]),
@@ -187,31 +206,30 @@ class MockExercisesProvider extends _i1.Mock implements _i8.ExercisesProvider {
(super.noSuchMethod(Invocation.method(#mapComments, [data, exercises]),
returnValue: <_i3.Exercise>[]) as List<_i3.Exercise>);
@override
_i10.Future<void> checkExerciseCacheVersion() =>
(super.noSuchMethod(Invocation.method(#checkExerciseCacheVersion, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
_i10.Future<void> fetchAndSetExercises() => (super.noSuchMethod(
Invocation.method(#fetchAndSetExercises, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<void> fetchAndSetExercises() =>
(super.noSuchMethod(Invocation.method(#fetchAndSetExercises, []),
returnValue: Future<void>.value(),
returnValueForMissingStub: Future<void>.value()) as _i10.Future<void>);
@override
_i10.Future<List<_i3.Exercise>> searchExercise(String? name, [String? languageCode = r'en']) =>
(super.noSuchMethod(Invocation.method(#searchExercise, [name, languageCode]),
_i10.Future<List<_i3.Exercise>> searchExercise(String? name,
[String? languageCode = r'en']) =>
(super.noSuchMethod(
Invocation.method(#searchExercise, [name, languageCode]),
returnValue: Future<List<_i3.Exercise>>.value(<_i3.Exercise>[]))
as _i10.Future<List<_i3.Exercise>>);
@override
void addListener(_i11.VoidCallback? listener) => super
.noSuchMethod(Invocation.method(#addListener, [listener]), returnValueForMissingStub: null);
void addListener(_i11.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#addListener, [listener]),
returnValueForMissingStub: null);
@override
void removeListener(_i11.VoidCallback? listener) =>
super.noSuchMethod(Invocation.method(#removeListener, [listener]),
returnValueForMissingStub: null);
@override
void dispose() =>
super.noSuchMethod(Invocation.method(#dispose, []), returnValueForMissingStub: null);
void dispose() => super.noSuchMethod(Invocation.method(#dispose, []),
returnValueForMissingStub: null);
@override
void notifyListeners() =>
super.noSuchMethod(Invocation.method(#notifyListeners, []), returnValueForMissingStub: null);
super.noSuchMethod(Invocation.method(#notifyListeners, []),
returnValueForMissingStub: null);
}