Skip to content

Commit

Permalink
refactor: Refactor code to use new repository and store structure (#368)
Browse files Browse the repository at this point in the history
  • Loading branch information
yorifuji committed Apr 17, 2024
1 parent 182b3bb commit b7cb864
Show file tree
Hide file tree
Showing 45 changed files with 887 additions and 893 deletions.
17 changes: 6 additions & 11 deletions lib/app.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:buzz_recipe_viewer/i18n/strings.g.dart';
import 'package:buzz_recipe_viewer/model/locale_preference.dart';
import 'package:buzz_recipe_viewer/provider/locale_preference_provider.dart';
import 'package:buzz_recipe_viewer/provider/theme_data_provider.dart';
import 'package:buzz_recipe_viewer/provider/theme_mode_preference_provider.dart';
import 'package:buzz_recipe_viewer/repository/preference_repository.dart';
import 'package:buzz_recipe_viewer/store/locale_notifier.dart';
import 'package:buzz_recipe_viewer/store/theme_notifier.dart';
import 'package:buzz_recipe_viewer/ui/navigation/navigation_page.dart';
import 'package:buzz_recipe_viewer/ui/walkthrough/walkthrough_page.dart';
import 'package:buzz_recipe_viewer/ui/walkthrough/walkthrough_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
Expand All @@ -15,26 +15,21 @@ class App extends ConsumerWidget {

@override
Widget build(BuildContext context, WidgetRef ref) {
final isShouldShowWalkthrough = ref.watch(
walkthroughViewModelProvider
.select((value) => value.isShouldShowWalkthrough),
);

return TranslationProvider(
child: MaterialApp(
// debugShowCheckedModeBanner: false,
title: t.appTitle,
theme: ref.watch(themeDataProvider()),
darkTheme: ref.watch(themeDataProvider(isDarkMode: true)),
themeMode: ref.watch(themeModePreferenceProvider),
locale: ref.watch(localePreferenceProvider),
themeMode: ref.watch(themeNotiferProvider).themeMode,
locale: ref.watch(localeNotiferProvider).toLocale,
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: LocalePreference.supportedLocaleList(),
home: isShouldShowWalkthrough
home: ref.watch(boolPreferenceProvider(BoolKey.shouldShowWalkthrough))
? const WalkthroughPage()
: const NavigationPage(),
),
Expand Down
11 changes: 9 additions & 2 deletions lib/i18n/strings.g.dart

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

3 changes: 2 additions & 1 deletion lib/i18n/strings.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@
"title" : "Delete Local Data"
}
}
}
},
"selected" : "Selected"
},
"common" : {
"addFavorite" : "Add Favorite",
Expand Down
3 changes: 2 additions & 1 deletion lib/i18n/strings_ja.i18n.json
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@
"title" : "ローカルデータを削除"
}
}
}
},
"selected" : "選択中"
},
"common" : {
"addFavorite" : "お気に入りに追加しました",
Expand Down
14 changes: 14 additions & 0 deletions lib/model/theme_preference.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:flutter/material.dart';

enum ThemePreference {
system('システム', ThemeMode.system),
light('ライト', ThemeMode.light),
dark('ダーク', ThemeMode.dark);

const ThemePreference(this.title, this.themeMode);

factory ThemePreference.fromIndex(int index) => ThemePreference.values[index];

final String title;
final ThemeMode themeMode;
}
11 changes: 0 additions & 11 deletions lib/provider/app_color_preference_provider.dart

This file was deleted.

28 changes: 0 additions & 28 deletions lib/provider/app_color_preference_provider.g.dart

This file was deleted.

3 changes: 0 additions & 3 deletions lib/provider/fullscreen_video_playing_state_provider.dart

This file was deleted.

12 changes: 0 additions & 12 deletions lib/provider/locale_preference_provider.dart

This file was deleted.

4 changes: 2 additions & 2 deletions lib/provider/theme_data_provider.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:buzz_recipe_viewer/gen/fonts.gen.dart';
import 'package:buzz_recipe_viewer/provider/app_color_preference_provider.dart';
import 'package:buzz_recipe_viewer/store/app_color_notifier.dart';
import 'package:flutter/material.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

Expand All @@ -10,7 +10,7 @@ ThemeData themeData(ThemeDataRef ref, {bool isDarkMode = false}) {
return ThemeData(
useMaterial3: true,
brightness: isDarkMode ? Brightness.dark : Brightness.light,
colorSchemeSeed: ref.watch(appColorPreferenceProvider).color,
colorSchemeSeed: ref.watch(appColorNotiferProvider).color,
fontFamily: FontFamily.notoSansJP,
);
}
2 changes: 1 addition & 1 deletion lib/provider/theme_data_provider.g.dart

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

11 changes: 0 additions & 11 deletions lib/provider/theme_mode_preference_provider.dart

This file was deleted.

28 changes: 0 additions & 28 deletions lib/provider/theme_mode_preference_provider.g.dart

This file was deleted.

100 changes: 100 additions & 0 deletions lib/repository/preference_repository.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import 'package:buzz_recipe_viewer/provider/shared_preferences_provider.dart';
import 'package:mockito/mockito.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

part 'preference_repository.g.dart';

enum BoolKey {
useInternalPlayer('use_internal_player', true),
shouldShowWalkthrough('should_show_walkthrough', true),
;

// ignore: avoid_positional_boolean_parameters
const BoolKey(this.key, this.defaultValue);
final String key;
final bool defaultValue;
}

enum IntKey {
themeMode('theme_mode', 0),
locale('locale', 0),
;

const IntKey(this.key, this.defaultValue);
final String key;
final int defaultValue;
}

enum StringKey {
appColor('app_color', ''),
;

const StringKey(this.key, this.defaultValue);
final String key;
final String defaultValue;
}

@riverpod
class BoolPreference extends _$BoolPreference {
@override
bool build(BoolKey keyValue) =>
ref.watch(sharedPreferencesProvider).getBool(keyValue.key) ??
keyValue.defaultValue;

// ignore: avoid_positional_boolean_parameters
Future<void> update(bool value) async {
await ref.read(sharedPreferencesProvider).setBool(keyValue.key, value);
ref.invalidateSelf();
}
}

@riverpod
class IntPreference extends _$IntPreference {
@override
int build(IntKey keyValue) =>
ref.watch(sharedPreferencesProvider).getInt(keyValue.key) ??
keyValue.defaultValue;

Future<void> update(int value) async {
await ref.read(sharedPreferencesProvider).setInt(keyValue.key, value);
ref.invalidateSelf();
}
}

@riverpod
class StringPreference extends _$StringPreference {
@override
String build(StringKey keyValue) =>
ref.watch(sharedPreferencesProvider).getString(keyValue.key) ??
keyValue.defaultValue;

Future<void> update(String value) async {
await ref.read(sharedPreferencesProvider).setString(keyValue.key, value);
ref.invalidateSelf();
}
}

class FakeTruePreference extends _$BoolPreference
with Mock
implements BoolPreference {
@override
bool build(BoolKey keyValue) => true;
}

class FakeFalsePreference extends _$BoolPreference
with Mock
implements BoolPreference {
@override
bool build(BoolKey keyValue) => false;
}

class FakeIntPreference extends _$IntPreference
with Mock
implements IntPreference {
FakeIntPreference({required this.value});

// ignore: avoid_public_notifier_properties
final int value;
@override
int build(IntKey keyValue) => value;
}
Loading

0 comments on commit b7cb864

Please sign in to comment.