Skip to content

Commit

Permalink
refactor: migrate to riverpod code generation 2
Browse files Browse the repository at this point in the history
  • Loading branch information
johannesvedder committed May 27, 2024
1 parent cbabee2 commit 05ecdc2
Show file tree
Hide file tree
Showing 26 changed files with 1,081 additions and 253 deletions.
1 change: 1 addition & 0 deletions app/lib/models/app_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:studyu_app/util/cache.dart';
import 'package:studyu_app/util/schedule_notifications.dart';
import 'package:studyu_core/core.dart';

// @riverpod
class AppState with ChangeNotifier {
Study? selectedStudy;
List<Intervention>? selectedInterventions;
Expand Down
1 change: 0 additions & 1 deletion designer_v2/lib/common_views/pages/splash_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:studyu_designer_v2/localization/app_translation.dart';

class SplashPage extends StatelessWidget {
const SplashPage({super.key});
Expand Down
32 changes: 13 additions & 19 deletions designer_v2/lib/features/analyze/study_analyze_controller.dart
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:studyu_designer_v2/domain/study.dart';
import 'package:studyu_designer_v2/domain/study_export.dart';
import 'package:studyu_designer_v2/features/analyze/study_analyze_controller_state.dart';
import 'package:studyu_designer_v2/features/analyze/study_export_zip.dart';
import 'package:studyu_designer_v2/features/study/study_base_controller.dart';
import 'package:studyu_designer_v2/repositories/auth_repository.dart';
import 'package:studyu_designer_v2/repositories/study_repository.dart';
import 'package:studyu_designer_v2/routing/router.dart';
import 'package:studyu_designer_v2/utils/performance.dart';

class StudyAnalyzeController extends StudyBaseController<StudyAnalyzeControllerState> {
StudyAnalyzeController({
required super.studyId,
required super.studyRepository,
required super.router,
required super.currentUser,
}) : super(StudyAnalyzeControllerState(currentUser: currentUser)) {
part 'study_analyze_controller.g.dart';

@riverpod
class StudyAnalyzeController extends _$StudyAnalyzeController {
@override
StudyAnalyzeControllerState build(StudyID studyId) {
return StudyAnalyzeControllerState(
studyId: studyId,
studyRepository: ref.watch(studyRepositoryProvider),
router: ref.watch(routerProvider),
currentUser: ref.watch(authRepositoryProvider).currentUser,
);
// Reload the study in case some data was generated meanwhile
// studyRepository.fetch(studyId);
}
Expand All @@ -25,13 +29,3 @@ class StudyAnalyzeController extends StudyBaseController<StudyAnalyzeControllerS
return runAsync(() => study.exportData.downloadAsZip());
}
}

final studyAnalyzeControllerProvider = StateNotifierProvider.autoDispose
.family<StudyAnalyzeController, StudyAnalyzeControllerState, StudyID>((ref, studyId) {
return StudyAnalyzeController(
studyId: studyId,
currentUser: ref.watch(authRepositoryProvider).currentUser,
studyRepository: ref.watch(studyRepositoryProvider),
router: ref.watch(routerProvider),
);
});
176 changes: 176 additions & 0 deletions designer_v2/lib/features/analyze/study_analyze_controller.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import 'package:studyu_designer_v2/repositories/model_repository.dart';

class StudyAnalyzeControllerState extends StudyControllerBaseState {
const StudyAnalyzeControllerState({
required super.studyId,
required super.studyRepository,
required super.router,
required super.currentUser,
super.studyWithMetadata,
});
Expand All @@ -18,8 +21,11 @@ class StudyAnalyzeControllerState extends StudyControllerBaseState {
WrappedModel<Study>? studyWithMetadata,
}) {
return StudyAnalyzeControllerState(
studyWithMetadata: studyWithMetadata ?? super.studyWithMetadata,
studyId: studyId,
studyRepository: studyRepository,
router: router,
currentUser: currentUser,
studyWithMetadata: studyWithMetadata ?? super.studyWithMetadata,
);
}

Expand Down
14 changes: 2 additions & 12 deletions designer_v2/lib/features/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:studyu_designer_v2/constants.dart';
import 'package:studyu_designer_v2/features/app_controller.dart';
import 'package:studyu_designer_v2/localization/app_translation.dart';
import 'package:studyu_designer_v2/localization/locale_providers.dart';
import 'package:studyu_designer_v2/localization/string_hardcoded.dart';
import 'package:studyu_designer_v2/routing/router.dart';
import 'package:studyu_designer_v2/services/notification_dispatcher.dart';
import 'package:studyu_designer_v2/theme.dart';

import '../localization/locale_state.dart';
import '../localization/locale_providers.dart';

final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey = GlobalKey();

Expand All @@ -38,7 +36,6 @@ class AppContent extends ConsumerStatefulWidget {
}

class _AppContentState extends ConsumerState<AppContent> {
late final AppController appController;

final settings = ValueNotifier(ThemeSettings(
//sourceColor: Color(0xff2a4fda),
Expand All @@ -51,18 +48,11 @@ class _AppContentState extends ConsumerState<AppContent> {
@override
void initState() {
super.initState();
appController = ref.read(appControllerProvider.notifier);
appController.onAppStart();
// todo move this into appControllerProvider
WidgetsBinding.instance.addPostFrameCallback((_) async {
// Locale Startup Actions
ref.read(localeStateNotifierProvider.notifier).initLocale();
});
}

@override
Widget build(BuildContext context) {
AppTranslation.init(ref); // todo Refactor this into initState locale delegate if possible
AppTranslation.init(ref);
final router = ref.watch(routerProvider);

return DynamicColorBuilder(
Expand Down
19 changes: 9 additions & 10 deletions designer_v2/lib/features/app_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,19 @@ typedef _DelegateCallback = Future<bool> Function(IAppDelegate delegate);
@riverpod
class AppController extends _$AppController {
@override
AppControllerState build() {
Future<AppControllerState> build() async {
_appDelegates = [
/// Register [IAppDelegate]s here for invocation of app lifecycle methods
ref.watch(authRepositoryProvider),
];
return const AppControllerState();
ref.listenSelf((previous, next) {
print("APP CONTROLLER STATE CHANGED: $next");
});
//ref.read(routerProvider).refresh();
// Forward onAppStart to all registered delegates so that they can
// e.g. read some data from local storage for initialization
//await _callDelegates((delegate) => delegate.onAppStart(), withMinDelay: true);
return const AppControllerState(status: AppStatus.initialized);
}

/// List of listeners for app lifecycle events registered via Riverpod
Expand All @@ -33,14 +40,6 @@ class AppController extends _$AppController {
/// (so that the splash screen is shown during this time)
late final _delayedFuture = Future.delayed(const Duration(milliseconds: Config.minSplashTime), () => true);

Future<bool> onAppStart() async {
// Forward onAppStart to all registered delegates so that they can
// e.g. read some data from local storage for initialization
final result = await _callDelegates((delegate) => delegate.onAppStart(), withMinDelay: true);
state = const AppControllerState(status: AppStatus.initialized);
return result;
}

/// Executes the given callback for all registered delegates concurrently
Future<bool> _callDelegates(_DelegateCallback function, {withMinDelay = false}) async {
final List<Future<bool>> delegateFutures = [];
Expand Down
8 changes: 4 additions & 4 deletions designer_v2/lib/features/app_controller.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 05ecdc2

Please sign in to comment.