Skip to content

Commit

Permalink
remove app bloc and replace it with app providers
Browse files Browse the repository at this point in the history
  • Loading branch information
salahamassi committed Mar 29, 2024
1 parent 0853f64 commit dd6d5a8
Show file tree
Hide file tree
Showing 13 changed files with 116 additions and 197 deletions.
15 changes: 8 additions & 7 deletions lib/bond_app.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import 'package:bond/app/routes.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'core/app_theme.dart';
import 'features/app/app_bloc.dart';
import 'features/app/app_providers.dart';

class BondApp extends StatelessWidget {
class BondApp extends ConsumerWidget {
const BondApp({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
final appBloc = context.watch<AppBloc>();
Widget build(BuildContext context, WidgetRef ref) {
final locale = ref.watch(localProvider);
final theme = ref.watch(themeProvider);
return MaterialApp.router(
routerConfig: goRouter,
localizationsDelegates: const [
Expand All @@ -21,12 +22,12 @@ class BondApp extends StatelessWidget {
GlobalCupertinoLocalizations.delegate,
AppLocalizations.delegate,
],
locale: appBloc.state.currentLocale,
locale: locale,
supportedLocales: const [Locale('ar'), Locale('en')],
debugShowCheckedModeBanner: true,
theme: appLightThemeData(),
darkTheme: appDarkThemeData(),
themeMode: appBloc.state.currentThemeMode,
themeMode: theme,
);
}
}
5 changes: 2 additions & 3 deletions lib/core/utils/device_info.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:io';

import 'package:bond/features/app/data/app_local_data_source.dart';
import 'package:bond_cache/bond_cache.dart';
import 'package:bond_core/bond_core.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:package_info_plus/package_info_plus.dart';
Expand All @@ -10,15 +10,14 @@ class DeviceInfo {
Future<Map<String, String>> toJson() async {
final deviceInfoPlugin = sl<DeviceInfoPlugin>();
final packageInfo = sl<PackageInfo>();
final appLocalDataSource = sl<AppLocalDataSource>();
final map = <String, String>{};
map.addAll({
'device_type': 'mobile',
'device_model': '',
'device_brand': getDeviceType(),
'os_version': packageInfo.buildNumber,
'app_version': packageInfo.buildNumber,
'language': appLocalDataSource.currentLocale.languageCode,
'language': Cache.get('language', defaultValue: 'en'),
'device_id': await deviceIdInfo(),
});
if (UniversalPlatform.isAndroid) {
Expand Down
30 changes: 15 additions & 15 deletions lib/core/widgets/bond_pop_menu/bond_pop_menu_button.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import 'package:bond/core/app_localizations.dart';
import 'package:bond/features/app/app_bloc.dart';
import 'package:bond/features/app/app_providers.dart';
import 'package:bond/features/auth/auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:bond_core/bond_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';

import 'bond_popup_menu_item.dart';

class BondPopMenuButton extends StatelessWidget {
class BondPopMenuButton extends ConsumerWidget {
const BondPopMenuButton({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
Widget build(BuildContext context, WidgetRef ref) {
return PopupMenuButton<Menu>(
onSelected: (Menu item) => _onSelected(context, item),
onSelected: (Menu item) => _onSelected(ref, item),
icon: const Icon(
Icons.more_vert_rounded,
),
Expand Down Expand Up @@ -56,25 +56,25 @@ class BondPopMenuButton extends StatelessWidget {
);
}

void _onSelected(BuildContext context, Menu item) {
final appBloc = context.read<AppBloc>();
void _onSelected(WidgetRef ref, Menu item) {
switch (item) {
case Menu.theme:
final newThemeMode = appBloc.state.currentThemeMode == ThemeMode.light
? ThemeMode.dark
: ThemeMode.light;
appBloc.add(ChangeThemeEvent(newThemeMode));
final theme = ref.read(themeProvider);
final newThemeMode =
theme == ThemeMode.light ? ThemeMode.dark : ThemeMode.light;
ref.read(themeProvider.notifier).update(newThemeMode);
break;
case Menu.language:
final newLocale = appBloc.state.currentLocale == const Locale('en')
final local = ref.read(localProvider);
final newLocale = local == const Locale('en')
? const Locale('ar')
: const Locale('en');
appBloc.add(ChangeLocaleEvent(newLocale));
ref.read(localProvider.notifier).update(newLocale);
break;
case Menu.logout:
break;
case Menu.notifications:
context.go('/notifications');
ref.context.go('/notifications');
break;
}
}
Expand Down
38 changes: 0 additions & 38 deletions lib/features/app/app_bloc.dart

This file was deleted.

23 changes: 0 additions & 23 deletions lib/features/app/app_event.dart

This file was deleted.

18 changes: 18 additions & 0 deletions lib/features/app/app_providers.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
library app_providers;

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'notifiers/local_notifier.dart';
import 'notifiers/theme_notifier.dart';

export 'notifiers/local_notifier.dart';
export 'notifiers/theme_notifier.dart';

final localProvider = NotifierProvider<LocalNotifier, Locale>(() {
return LocalNotifier();
});

final themeProvider = NotifierProvider<ThemeNotifier, ThemeMode>(() {
return ThemeNotifier();
});
37 changes: 0 additions & 37 deletions lib/features/app/app_state.dart

This file was deleted.

54 changes: 0 additions & 54 deletions lib/features/app/data/app_local_data_source.dart

This file was deleted.

20 changes: 20 additions & 0 deletions lib/features/app/notifiers/local_notifier.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import 'dart:io';
import 'dart:ui';

import 'package:bond_cache/bond_cache.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

class LocalNotifier extends Notifier<Locale> {
@override
Locale build() => Locale(
Cache.get(
'language',
defaultValue: Platform.localeName,
),
);

void update(Locale locale) {
Cache.put('language', locale.languageCode);
state = locale;
}
}
45 changes: 45 additions & 0 deletions lib/features/app/notifiers/theme_notifier.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import 'package:bond_cache/bond_cache.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

class ThemeNotifier extends Notifier<ThemeMode> {
@override
ThemeMode build() => XThemeMode.fromValue(
Cache.get(
'theme',
defaultValue: ThemeMode.system.value,
),
);

void update(ThemeMode themeMode) {
Cache.put('theme', themeMode.value);
}
}

extension XThemeMode on ThemeMode {
String get value {
switch (this) {
case ThemeMode.dark:
return 'dark';
case ThemeMode.light:
return 'light';
case ThemeMode.system:
return 'system';
default:
return 'system';
}
}

static ThemeMode fromValue(String value) {
switch (value) {
case 'dark':
return ThemeMode.dark;
case 'light':
return ThemeMode.light;
case 'system':
return ThemeMode.system;
default:
return ThemeMode.system;
}
}
}
9 changes: 2 additions & 7 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
import 'package:bond/features/app/app_bloc.dart';
import 'package:bond_core/bond_core.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'app/app.dart';
import 'app/app_run_tasks.dart';
import 'bond_app.dart';

void main() => run(
() => ProviderScope(
child: BlocProvider<AppBloc>(
create: (context) => sl<AppBloc>(),
child: const BondApp(),
),
() => const ProviderScope(
child: BondApp(),
),
tasks: RunAppTasks(),
providers: providers,
Expand Down
Loading

0 comments on commit dd6d5a8

Please sign in to comment.