Skip to content

Commit

Permalink
feat: migrated to auto_route (#104)
Browse files Browse the repository at this point in the history
* feat: migrated to auto_route

* rfac: code cleanup

* rfac: replace Theme.of(context) with context.theme extension
  • Loading branch information
JideGuru committed Jun 29, 2023
1 parent f40d519 commit 1ffbcb7
Show file tree
Hide file tree
Showing 73 changed files with 586 additions and 208 deletions.
14 changes: 8 additions & 6 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import 'package:flutter_ebook_app/src/features/common/constants/strings.dart';
import 'package:flutter_ebook_app/src/features/common/data/local/local_storage.dart';
import 'package:flutter_ebook_app/src/features/common/data/notifiers/current_app_theme/current_app_theme_state_notifier.dart';
import 'package:flutter_ebook_app/src/features/common/database/database_config.dart';
import 'package:flutter_ebook_app/theme/theme_config.dart';
import 'package:flutter_ebook_app/src/features/splash/screens/splash_screen.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:flutter_ebook_app/src/theme/theme_config.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:sembast/sembast.dart';
Expand All @@ -13,16 +13,18 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized();
LocalStorage();
await DatabaseConfig.init(StoreRef<dynamic, dynamic>.main());
runApp(const ProviderScope(child: MyApp()));
runApp(ProviderScope(child: MyApp()));
}

class MyApp extends ConsumerWidget {
const MyApp({super.key});
MyApp({super.key});

final _appRouter = AppRouter();

@override
Widget build(BuildContext context, WidgetRef ref) {
final currentAppTheme = ref.watch(currentAppThemeStateNotifierProvider);
return MaterialApp(
return MaterialApp.router(
debugShowCheckedModeBanner: false,
title: Strings.appName,
theme: themeData(
Expand All @@ -31,7 +33,7 @@ class MyApp extends ConsumerWidget {
: ThemeConfig.lightTheme,
),
darkTheme: themeData(ThemeConfig.darkTheme),
home: const SplashScreen(),
routerConfig: _appRouter.config(),
);
}

Expand Down
41 changes: 0 additions & 41 deletions lib/router.dart

This file was deleted.

2 changes: 2 additions & 0 deletions lib/src/features/book_details/book_details.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'screens/screens.dart';
export 'data/data.dart';
2 changes: 2 additions & 0 deletions lib/src/features/book_details/data/data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'notifier/notifiers.dart';
export 'repositories/repositories.dart';
1 change: 1 addition & 0 deletions lib/src/features/book_details/data/notifier/notifiers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'book_details_state_notifier.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'book_details_repository.dart';
33 changes: 14 additions & 19 deletions lib/src/features/book_details/screens/book_details_screen.dart
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
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/common/data/notifiers/favorites/favorites_state_notifier.dart';
import 'package:flutter_ebook_app/src/features/common/widgets/error_widget.dart';
import 'package:flutter_ebook_app/src/features/common/widgets/modal_dialogs/download_alert.dart';
import 'package:flutter_ebook_app/src/features/common/widgets/loading_widget.dart';
import 'package:flutter_ebook_app/src/features/book_details/data/notifier/book_details_state_notifier.dart';
import 'package:flutter_ebook_app/src/features/common/data/models/category_feed.dart';
import 'package:flutter_ebook_app/src/features/common/data/notifiers/downloads/downloads_state_notifier.dart';
import 'package:flutter_ebook_app/src/features/common/widgets/book_list_item.dart';
import 'package:flutter_ebook_app/src/features/common/widgets/description_text.dart';
import 'package:flutter_ebook_app/router.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';
import 'package:share_plus/share_plus.dart';
import 'package:flutter_ebook_app/src/features/features.dart';

@RoutePage()
class BookDetailsScreen extends ConsumerStatefulWidget {
final Entry entry;
final String imgTag;
Expand Down Expand Up @@ -73,7 +66,7 @@ class _BookDetailsScreenState extends ConsumerState<BookDetailsScreen> {
favorited ? Icons.favorite : Feather.heart,
color: favorited
? Colors.red
: Theme.of(context).iconTheme.color,
: context.theme.iconTheme.color,
),
);
},
Expand Down Expand Up @@ -126,7 +119,7 @@ class _Divider extends StatelessWidget {

@override
Widget build(BuildContext context) {
return Divider(color: Theme.of(context).textTheme.bodySmall!.color);
return Divider(color: context.theme.textTheme.bodySmall!.color);
}
}

Expand Down Expand Up @@ -238,7 +231,7 @@ class _CategoryChips extends StatelessWidget {
color: Colors.transparent,
borderRadius: const BorderRadius.all(Radius.circular(20)),
border: Border.all(
color: Theme.of(context).colorScheme.secondary,
color: context.theme.colorScheme.secondary,
),
),
child: Padding(
Expand All @@ -249,7 +242,7 @@ class _CategoryChips extends StatelessWidget {
child: Text(
'${category.label}',
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
color: context.theme.colorScheme.secondary,
fontSize: 12.0,
fontWeight: FontWeight.bold,
),
Expand Down Expand Up @@ -292,7 +285,7 @@ class _DownloadButton extends ConsumerWidget {
style: TextStyle(
fontSize: 15,
color:
Theme.of(context).textTheme.titleLarge?.color ?? Colors.black,
context.theme.textTheme.titleLarge?.color ?? Colors.black,
),
),
);
Expand All @@ -315,7 +308,7 @@ class _DownloadButton extends ConsumerWidget {
style: TextStyle(
fontSize: 15,
color:
Theme.of(context).textTheme.titleLarge?.color ?? Colors.black,
context.theme.textTheme.titleLarge?.color ?? Colors.black,
),
),
);
Expand All @@ -327,14 +320,16 @@ class _DownloadButton extends ConsumerWidget {
) async {
File bookFile = File(path);
if (bookFile.existsSync()) {
MyRouter.pushPage(context, EpubScreen.fromPath(filePath: path));
MaterialPageRoute(builder: (_) {
return EpubScreen.fromPath(filePath: path);
});
} else {
const snackBar = SnackBar(
content: Text(
'Could not find the book file. Please download it again.',
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
context.showSnackBar(snackBar);
ref.read(downloadsStateNotifierProvider.notifier).deleteBook(id);
}
}
Expand All @@ -350,7 +345,7 @@ class _SectionTitle extends StatelessWidget {
return Text(
title,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
color: context.theme.colorScheme.secondary,
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
Expand Down
1 change: 1 addition & 0 deletions lib/src/features/book_details/screens/screens.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'book_details_screen.dart';
5 changes: 5 additions & 0 deletions lib/src/features/common/common.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export 'widgets/widgets.dart';
export 'database/database.dart';
export 'data/data.dart';
export 'extensions/extensions.dart';
export 'constants/constants.dart';
4 changes: 4 additions & 0 deletions lib/src/features/common/constants/constants.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export 'api.dart';
export 'shared_preferences_key.dart';
export 'strings.dart';
export 'utils.dart';
8 changes: 8 additions & 0 deletions lib/src/features/common/data/data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export 'services/services.dart';
export 'repositories/repositories.dart';
export 'remote/app_dio.dart';
export 'providers/providers.dart';
export 'notifiers/notifiers.dart';
export 'models/category_feed.dart';
export 'local/local_storage.dart';
export 'failures/http_failure.dart';
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,15 @@ class FavoritesLocalDataSourceImpl implements FavoritesLocalDataSource {
Future<void> addBook(Entry book, String id) async {
await _store.record(id).put(_database, book.toJson());
}

@override
Future<void> deleteBook(String id) async {
await _store.record(id).delete(_database);
}

@override
Stream<List<Entry>> favoritesListStream() {
return _store
.query()
.onSnapshots(_database)
.map<List<Entry>>(
return _store.query().onSnapshots(_database).map<List<Entry>>(
(records) => records
.map<Entry>((record) => Entry.fromJson(record.value))
.toList(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:flutter_ebook_app/src/features/common/data/repositories/dowloads/downloads_repository.dart';
import 'package:flutter_ebook_app/src/features/common/data/repositories/downloads/downloads_repository.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

Expand Down
3 changes: 3 additions & 0 deletions lib/src/features/common/data/notifiers/notifiers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export 'current_app_theme/current_app_theme_state_notifier.dart';
export 'downloads/downloads_state_notifier.dart';
export 'favorites/favorites_state_notifier.dart';
3 changes: 3 additions & 0 deletions lib/src/features/common/data/providers/providers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export 'database_provider.dart';
export 'dio_provider.dart';
export 'shared_preferences_provider.dart';
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ import 'package:flutter_ebook_app/src/features/common/data/local/local_storage.d
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';

final sharedPreferencesProvider =
Provider<SharedPreferences>((_) => LocalStorage().getSharedPreferences()!);
final sharedPreferencesProvider = Provider<SharedPreferences>(
(_) => LocalStorage().getSharedPreferences()!,
);
3 changes: 3 additions & 0 deletions lib/src/features/common/data/repositories/repositories.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export 'book/book_repository.dart';
export 'downloads/downloads_repository.dart';
export 'favorites/favorites_repository.dart';
1 change: 1 addition & 0 deletions lib/src/features/common/data/services/services.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'current_app_theme_service.dart';
1 change: 1 addition & 0 deletions lib/src/features/common/database/database.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export 'database_config.dart';
11 changes: 11 additions & 0 deletions lib/src/features/common/extensions/context_extensions.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import 'package:flutter/material.dart';

extension BuildContextExtensions on BuildContext {
ThemeData get theme => Theme.of(this);
Size get screenSize => MediaQuery.sizeOf(this);
EdgeInsets get screenPadding => MediaQuery.paddingOf(this);
double get screenTextScaleFactor => MediaQuery.textScaleFactorOf(this);
void showSnackBar(SnackBar snackBar) {
ScaffoldMessenger.of(this).showSnackBar(snackBar);
}
}
2 changes: 2 additions & 0 deletions lib/src/features/common/extensions/extensions.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'context_extensions.dart';
export 'theme_extensions.dart';
6 changes: 6 additions & 0 deletions lib/src/features/common/extensions/theme_extensions.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import 'package:flutter/material.dart';

extension ThemeExtensions on ThemeData {
Color get accentColor => colorScheme.secondary;
bool get isDark => brightness == Brightness.dark;
}
9 changes: 4 additions & 5 deletions lib/src/features/common/widgets/book_card.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
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/common/widgets/loading_widget.dart';
import 'package:flutter_ebook_app/src/features/book_details/screens/book_details_screen.dart';
import 'package:flutter_ebook_app/src/features/common/data/models/category_feed.dart';
import 'package:flutter_ebook_app/router.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:uuid/uuid.dart';

class BookCard extends StatelessWidget {
Expand Down Expand Up @@ -33,9 +33,8 @@ class BookCard extends StatelessWidget {
child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(10.0)),
onTap: () {
MyRouter.pushPage(
context,
BookDetailsScreen(
context.router.push(
BookDetailsRoute(
entry: entry,
imgTag: imgTag,
titleTag: titleTag,
Expand Down
3 changes: 1 addition & 2 deletions lib/src/features/common/widgets/book_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:flutter_ebook_app/src/features/common/widgets/loading_widget.dar
import 'package:iridium_reader_widget/util/router.dart';
import 'package:uuid/uuid.dart';


class BookItem extends StatelessWidget {
final String img;
final String title;
Expand Down Expand Up @@ -81,4 +80,4 @@ class BookItem extends StatelessWidget {
),
);
}
}
}
18 changes: 8 additions & 10 deletions lib/src/features/common/widgets/book_list_item.dart
Original file line number Diff line number Diff line change
@@ -1,9 +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/features/common/widgets/loading_widget.dart';
import 'package:flutter_ebook_app/src/features/book_details/screens/book_details_screen.dart';
import 'package:flutter_ebook_app/src/features/common/data/models/category_feed.dart';
import 'package:flutter_ebook_app/router.dart';
import 'package:flutter_ebook_app/src/features/features.dart';
import 'package:flutter_ebook_app/src/router/app_router.dart';
import 'package:uuid/uuid.dart';

class BookListItem extends StatelessWidget {
Expand All @@ -23,9 +22,8 @@ class BookListItem extends StatelessWidget {
Widget build(BuildContext context) {
return InkWell(
onTap: () {
MyRouter.pushPage(
context,
BookDetailsScreen(
context.router.push(
BookDetailsRoute(
entry: entry,
imgTag: imgTag,
titleTag: titleTag,
Expand Down Expand Up @@ -86,7 +84,7 @@ class BookListItem extends StatelessWidget {
style: TextStyle(
fontSize: 17.0,
fontWeight: FontWeight.bold,
color: Theme.of(context).textTheme.titleLarge!.color,
color: context.theme.textTheme.titleLarge!.color,
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
Expand All @@ -103,7 +101,7 @@ class BookListItem extends StatelessWidget {
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.w800,
color: Theme.of(context).colorScheme.secondary,
color: context.theme.colorScheme.secondary,
),
),
),
Expand All @@ -116,7 +114,7 @@ class BookListItem extends StatelessWidget {
.replaceAll(r'\"', '"'),
style: TextStyle(
fontSize: 13.0,
color: Theme.of(context).textTheme.bodySmall!.color,
color: context.theme.textTheme.bodySmall!.color,
),
),
],
Expand Down
Loading

0 comments on commit 1ffbcb7

Please sign in to comment.