-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f54dac6
commit ea11dec
Showing
4 changed files
with
179 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_riverpod/flutter_riverpod.dart'; | ||
|
||
class HomePage extends ConsumerStatefulWidget { | ||
const HomePage({super.key}); | ||
|
||
@override | ||
ConsumerState<HomePage> createState() => _HomePageState(); | ||
} | ||
|
||
class _HomePageState extends ConsumerState<HomePage> | ||
with AutomaticKeepAliveClientMixin { | ||
int _counter = 0; | ||
|
||
@override | ||
bool get wantKeepAlive => true; | ||
|
||
void _incrementCounter() { | ||
setState(() => _counter++); | ||
} | ||
|
||
@override | ||
Widget build(final BuildContext context) { | ||
super.build(context); | ||
return Scaffold( | ||
body: Center( | ||
child: Column( | ||
mainAxisAlignment: MainAxisAlignment.center, | ||
children: <Widget>[ | ||
const Text( | ||
'You have pushed the button this many times:', | ||
), | ||
Text( | ||
'$_counter', | ||
style: Theme.of(context).textTheme.headlineMedium, | ||
), | ||
], | ||
), | ||
), | ||
floatingActionButton: FloatingActionButton( | ||
onPressed: _incrementCounter, | ||
tooltip: 'Increment', | ||
child: const Icon(Icons.add), | ||
), | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,63 +1,56 @@ | ||
import 'package:app_localizations/app_localizations.dart'; | ||
import 'package:app_providers/app_providers.dart'; | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_riverpod/flutter_riverpod.dart'; | ||
|
||
class HomeScreen extends ConsumerWidget { | ||
import '/src/screens/home_page.dart'; | ||
import '/src/screens/settings_page.dart'; | ||
import '/src/widgets/home_screen_navigation_bar.dart'; | ||
|
||
class HomeScreen extends ConsumerStatefulWidget { | ||
const HomeScreen({super.key}); | ||
|
||
void changeThemeMode(final WidgetRef ref, final ThemeMode mode) { | ||
ref.read(appThemeModeProvider.notifier).setThemeMode(mode); | ||
@override | ||
ConsumerState<HomeScreen> createState() => _HomeScreenState(); | ||
} | ||
|
||
class _HomeScreenState extends ConsumerState<HomeScreen> { | ||
int _selectedIndex = 0; | ||
|
||
late PageController _pageController; | ||
|
||
@override | ||
void initState() { | ||
_pageController = PageController(initialPage: _selectedIndex); | ||
super.initState(); | ||
} | ||
|
||
void changeLocale(final WidgetRef ref, final AppLocale locale) { | ||
ref.read(appLanguageProvider.notifier).setLocale(locale); | ||
void onDestinationSelected(final int index) { | ||
_selectedIndex = index; | ||
_pageController.jumpToPage(index); | ||
setState(() {}); | ||
} | ||
|
||
@override | ||
Widget build(final BuildContext context, final WidgetRef ref) { | ||
final AsyncValue<ThemeMode> themeMode = ref.watch(appThemeModeProvider); | ||
final AsyncValue<AppLocale> appLocale = ref.watch(appLanguageProvider); | ||
final StringsEn t = ref.watch(translationProvider); | ||
void dispose() { | ||
_pageController.dispose(); | ||
super.dispose(); | ||
} | ||
|
||
@override | ||
Widget build(final BuildContext context) { | ||
return Scaffold( | ||
resizeToAvoidBottomInset: false, | ||
appBar: AppBar(title: Text(t.hello(name: 'user'))), | ||
body: ListView( | ||
children: <Widget>[ | ||
ListTile(title: Text(t.theme.theme)), | ||
RadioListTile<ThemeMode>( | ||
value: ThemeMode.system, | ||
groupValue: themeMode.value, | ||
title: Text(t.theme.system), | ||
onChanged: (final _) => changeThemeMode(ref, ThemeMode.system), | ||
), | ||
RadioListTile<ThemeMode>( | ||
value: ThemeMode.dark, | ||
groupValue: themeMode.value, | ||
title: Text(t.theme.dark), | ||
onChanged: (final _) => changeThemeMode(ref, ThemeMode.dark), | ||
), | ||
RadioListTile<ThemeMode>( | ||
value: ThemeMode.light, | ||
groupValue: themeMode.value, | ||
title: Text(t.theme.light), | ||
onChanged: (final _) => changeThemeMode(ref, ThemeMode.light), | ||
), | ||
ListTile(title: Text(t.language)), | ||
RadioListTile<AppLocale>( | ||
value: AppLocale.en, | ||
groupValue: appLocale.value, | ||
title: const Text('En'), | ||
onChanged: (final _) => changeLocale(ref, AppLocale.en), | ||
), | ||
RadioListTile<AppLocale>( | ||
value: AppLocale.de, | ||
groupValue: appLocale.value, | ||
title: const Text('De'), | ||
onChanged: (final _) => changeLocale(ref, AppLocale.de), | ||
), | ||
body: PageView( | ||
controller: _pageController, | ||
physics: const NeverScrollableScrollPhysics(), | ||
children: const <Widget>[ | ||
HomePage(), | ||
SettingsPage(), | ||
], | ||
), | ||
bottomNavigationBar: HomeScreenNavigationBar( | ||
selectedIndex: _selectedIndex, | ||
onDestinationSelected: onDestinationSelected, | ||
), | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
import 'package:app_localizations/app_localizations.dart'; | ||
import 'package:app_providers/app_providers.dart'; | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_riverpod/flutter_riverpod.dart'; | ||
|
||
class SettingsPage extends ConsumerWidget { | ||
const SettingsPage({super.key}); | ||
|
||
void changeThemeMode(final WidgetRef ref, final ThemeMode mode) { | ||
ref.read(appThemeModeProvider.notifier).setThemeMode(mode); | ||
} | ||
|
||
void changeLocale(final WidgetRef ref, final AppLocale locale) { | ||
ref.read(appLanguageProvider.notifier).setLocale(locale); | ||
} | ||
|
||
@override | ||
Widget build(final BuildContext context, final WidgetRef ref) { | ||
final AsyncValue<ThemeMode> themeMode = ref.watch(appThemeModeProvider); | ||
final AsyncValue<AppLocale> appLocale = ref.watch(appLanguageProvider); | ||
final StringsEn t = ref.watch(translationProvider); | ||
return Scaffold( | ||
body: ListView( | ||
children: <Widget>[ | ||
ListTile(title: Text(t.theme.theme)), | ||
RadioListTile<ThemeMode>( | ||
value: ThemeMode.system, | ||
groupValue: themeMode.value, | ||
title: Text(t.theme.system), | ||
onChanged: (final _) => changeThemeMode(ref, ThemeMode.system), | ||
), | ||
RadioListTile<ThemeMode>( | ||
value: ThemeMode.dark, | ||
groupValue: themeMode.value, | ||
title: Text(t.theme.dark), | ||
onChanged: (final _) => changeThemeMode(ref, ThemeMode.dark), | ||
), | ||
RadioListTile<ThemeMode>( | ||
value: ThemeMode.light, | ||
groupValue: themeMode.value, | ||
title: Text(t.theme.light), | ||
onChanged: (final _) => changeThemeMode(ref, ThemeMode.light), | ||
), | ||
ListTile(title: Text(t.language)), | ||
RadioListTile<AppLocale>( | ||
value: AppLocale.en, | ||
groupValue: appLocale.value, | ||
title: const Text('En'), | ||
onChanged: (final _) => changeLocale(ref, AppLocale.en), | ||
), | ||
RadioListTile<AppLocale>( | ||
value: AppLocale.de, | ||
groupValue: appLocale.value, | ||
title: const Text('De'), | ||
onChanged: (final _) => changeLocale(ref, AppLocale.de), | ||
), | ||
], | ||
), | ||
); | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
packages/screen_home/lib/src/widgets/home_screen_navigation_bar.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import 'package:flutter/material.dart'; | ||
|
||
class HomeScreenNavigationBar extends StatelessWidget { | ||
const HomeScreenNavigationBar({ | ||
super.key, | ||
required this.selectedIndex, | ||
this.onDestinationSelected, | ||
}); | ||
|
||
final int selectedIndex; | ||
final ValueChanged<int>? onDestinationSelected; | ||
|
||
@override | ||
Widget build(final BuildContext context) { | ||
return NavigationBar( | ||
selectedIndex: selectedIndex, | ||
onDestinationSelected: onDestinationSelected, | ||
destinations: const <Widget>[ | ||
NavigationDestination( | ||
selectedIcon: Icon(Icons.home), | ||
icon: Icon(Icons.home_outlined), | ||
label: 'Home', | ||
), | ||
NavigationDestination( | ||
selectedIcon: Icon(Icons.settings), | ||
icon: Icon(Icons.settings_outlined), | ||
label: 'Settings', | ||
), | ||
], | ||
); | ||
} | ||
} |