rfact: more refactoring ofcourse

This commit is contained in:
jideguru
2023-08-20 12:17:23 +01:00
parent f46701e561
commit f2ed78395a
85 changed files with 110 additions and 105 deletions

View File

@ -1,9 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_ebook_app/src/theme/theme_config.dart';
import 'package:flutter_ebook_app/src/app.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:sembast/sembast.dart';
void main() async {
@ -12,38 +10,3 @@ void main() async {
await DatabaseConfig.init(StoreRef<dynamic, dynamic>.main());
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends ConsumerWidget {
MyApp({super.key});
final _appRouter = AppRouter();
@override
Widget build(BuildContext context, WidgetRef ref) {
final currentAppTheme = ref.watch(currentAppThemeNotifierProvider);
return MaterialApp.router(
debugShowCheckedModeBanner: false,
title: Strings.appName,
theme: themeData(
currentAppTheme.value == CurrentAppTheme.dark
? ThemeConfig.darkTheme
: ThemeConfig.lightTheme,
),
darkTheme: themeData(ThemeConfig.darkTheme),
themeMode: currentAppTheme.value?.themeMode,
routerConfig: _appRouter.config(),
);
}
// Apply font to our app's theme
ThemeData themeData(ThemeData theme) {
return theme.copyWith(
textTheme: GoogleFonts.sourceSansProTextTheme(
theme.textTheme,
),
colorScheme: theme.colorScheme.copyWith(
secondary: ThemeConfig.lightAccent,
),
);
}
}

39
lib/src/app.dart Normal file
View File

@ -0,0 +1,39 @@
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:google_fonts/google_fonts.dart';
class MyApp extends ConsumerWidget {
MyApp({super.key});
final _appRouter = AppRouter();
@override
Widget build(BuildContext context, WidgetRef ref) {
final currentAppTheme = ref.watch(currentAppThemeNotifierProvider);
return MaterialApp.router(
debugShowCheckedModeBanner: false,
title: Strings.appName,
theme: themeData(
currentAppTheme.value == CurrentAppTheme.dark
? ThemeConfig.darkTheme
: ThemeConfig.lightTheme,
),
darkTheme: themeData(ThemeConfig.darkTheme),
themeMode: currentAppTheme.value?.themeMode,
routerConfig: _appRouter.config(),
);
}
// Apply font to our app's theme
ThemeData themeData(ThemeData theme) {
return theme.copyWith(
textTheme: GoogleFonts.sourceSansProTextTheme(
theme.textTheme,
),
colorScheme: theme.colorScheme.copyWith(
secondary: ThemeConfig.lightAccent,
),
);
}
}

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';

View File

@ -4,3 +4,4 @@ export 'data/data.dart';
export 'domain/domain.dart';
export 'extensions/extensions.dart';
export 'presentation/presentation.dart';
export 'router/app_router.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:sembast/sembast.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
abstract class FavoritesLocalDataSource {
const FavoritesLocalDataSource();

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:sembast/sembast.dart';

View File

@ -1,6 +1,6 @@
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:flutter_ebook_app/src/features/common/constants/api.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
class AppDio with DioMixin implements Dio {
AppDio._() {

View File

@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:xml2json/xml2json.dart';
typedef BookRepositoryData = ({CategoryFeed? feed, HttpFailure? failure});

View File

@ -1,5 +1,4 @@
import 'package:flutter_ebook_app/src/features/common/data/data_sources/downloads/downloads_local_data_source.dart';
import 'package:flutter_ebook_app/src/features/common/data/data_sources/downloads/downloads_local_data_source_impl.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
abstract class DownloadsRepository {

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
abstract class FavoritesRepository {

View File

@ -1,7 +1,7 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'current_app_theme_notifier.g.dart';

View File

@ -1,6 +1,6 @@
import 'dart:async';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'downloads_notifier.g.dart';

View File

@ -1,6 +1,6 @@
import 'dart:async';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'favorites_notifier.g.dart';

View File

@ -1,3 +1,4 @@
export 'notifiers/notifiers.dart';
export 'providers/providers.dart';
export 'theme/theme_config.dart';
export 'ui/ui.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:sembast/sembast.dart';

View File

@ -1,5 +1,5 @@
import 'package:dio/dio.dart';
import 'package:flutter_ebook_app/src/features/common/data/remote/app_dio.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final dioProvider = Provider<Dio>((ref) => AppDio.getInstance());

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/common/data/local/local_storage.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';

View File

@ -1,8 +1,8 @@
import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:uuid/uuid.dart';
@ -33,7 +33,8 @@ class BookCard extends ConsumerWidget {
child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(10.0)),
onTap: () {
final bool isHomeTab = ref.read(currentTabNotifierProvider).isHomeTab;
final bool isHomeTab =
ref.read(currentTabNotifierProvider).isHomeTab;
final route = BookDetailsRoute(
entry: entry,
imgTag: imgTag,

View File

@ -1,8 +1,8 @@
import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:uuid/uuid.dart';

View File

@ -1,8 +1,8 @@
import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:uuid/uuid.dart';

View File

@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
class DescriptionTextWidget extends StatefulWidget {
final String text;

View File

@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
class MyErrorWidget extends StatelessWidget {
final Function refreshCallBack;

View File

@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
class LoadingWidget extends StatelessWidget {

View File

@ -3,7 +3,7 @@ import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';

View File

@ -1,7 +1,7 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
class ExitModalDialog extends StatelessWidget {
const ExitModalDialog({super.key});

View File

@ -1,5 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
part 'app_router.gr.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class BookDetailsRepository extends BookRepository {

View File

@ -1,5 +1,5 @@
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/book_details/data/repositories/book_details_repository.dart';
import 'package:flutter_ebook_app/src/features/common/common.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'book_details_notifier.g.dart';

View File

@ -3,6 +3,7 @@ import 'dart:io';
import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@ -3,7 +3,7 @@ import 'dart:io';
import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:iridium_reader_widget/views/viewers/epub_screen.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class ExploreRepository extends BookRepository {

View File

@ -1,5 +1,6 @@
import 'dart:async';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

View File

@ -1,5 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
@RoutePage()

View File

@ -1,7 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
class ExploreScreenLarge extends StatefulWidget {
const ExploreScreenLarge({super.key});

View File

@ -1,7 +1,7 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@RoutePage()

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@ -1,6 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@RoutePage()

View File

@ -1,5 +1,4 @@
export 'book_details/book_details.dart';
export 'common/common.dart';
export 'downloads/downloads.dart';
export 'explore/explore.dart';
export 'favorites/favourites.dart';

View File

@ -1,4 +1,4 @@
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

View File

@ -1,3 +1,4 @@
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@ -25,8 +26,8 @@ class HomeFeedNotifier extends _$HomeFeedNotifier {
final popularFeedSuccessOrFailure =
await homeRepository.getPopularHomeFeed();
final recentFeedSuccessOrFailure = await homeRepository.getRecentHomeFeed();
CategoryFeed? popularFeed = popularFeedSuccessOrFailure.feed;
CategoryFeed? recentFeed = recentFeedSuccessOrFailure.feed;
final popularFeed = popularFeedSuccessOrFailure.feed;
final recentFeed = recentFeedSuccessOrFailure.feed;
if (popularFeed == null) {
throw popularFeedSuccessOrFailure.failure!.description;
}

View File

@ -1,5 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
@RoutePage()

View File

@ -1,5 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
class HomeScreenLarge extends StatelessWidget {

View File

@ -1,7 +1,7 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class HomeScreenSmall extends ConsumerStatefulWidget {

View File

@ -1,5 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
@RoutePage()

View File

@ -1,7 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@ -2,7 +2,7 @@ import 'dart:async';
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
@RoutePage()
class SplashScreen extends StatefulWidget {

View File

@ -1,5 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@ -1,7 +1,7 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@ -1,7 +1,6 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_ebook_app/src/common/common.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

View File

@ -5,26 +5,21 @@
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_ebook_app/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
// void main() {
// testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// // Build our app and trigger a frame.
// await tester.pumpWidget(MyApp());
//
// // Verify that our counter starts at 0.
// expect(find.text('0'), findsOneWidget);
// expect(find.text('1'), findsNothing);
//
// // Tap the '+' icon and trigger a frame.
// await tester.tap(find.byIcon(Icons.add));
// await tester.pump();
//
// // Verify that our counter has incremented.
// expect(find.text('0'), findsNothing);
// expect(find.text('1'), findsOneWidget);
// });
// }