Skip to content
Snippets Groups Projects
Commit bbf0abd5 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '6-add-applicationsettings-widgets' into 'master'

Resolve "Add ApplicationSettings widgets"

Closes #6

See merge request !5
parents ba7137ca 0958c9ec
Branches
Tags Release_1.3.2_73
1 merge request!5Resolve "Add ApplicationSettings widgets"
Pipeline #6746 failed
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.json]
indent_size = 2
[*.yaml]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
## 0.2.0
- Add ApplicationSettings widgets
## 0.1.1
- Fix missing exported classes
......
......@@ -13,6 +13,11 @@ export 'widgets/show_error.dart' show ShowErrorWidget;
export 'widgets/styled_button.dart' show StyledButton;
export 'widgets/styled_container.dart' show StyledContainer;
export 'settings/application_settings_form.dart' show ApplicationSettingsForm;
export 'settings/application_settings_theme_card.dart' show ApplicationSettingsThemeModeCard;
export 'settings/application_theme_mode_cubit.dart'
show ApplicationThemeModeCubit, ApplicationThemeModeState;
// dependencies
export 'package:easy_localization/easy_localization.dart'
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:flutter_custom_toolbox/settings/application_settings_theme_card.dart';
class ApplicationSettingsForm extends StatefulWidget {
const ApplicationSettingsForm({super.key});
@override
State<ApplicationSettingsForm> createState() => _ApplicationSettingsFormState();
}
class _ApplicationSettingsFormState extends State<ApplicationSettingsForm> {
@override
void dispose() {
super.dispose();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
// Light/dark theme
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
const Text('settings_label_theme').tr(),
const Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ApplicationSettingsThemeModeCard(
mode: ThemeMode.system,
icon: UniconsLine.cog,
),
ApplicationSettingsThemeModeCard(
mode: ThemeMode.light,
icon: UniconsLine.sun,
),
ApplicationSettingsThemeModeCard(
mode: ThemeMode.dark,
icon: UniconsLine.moon,
)
],
),
],
),
const SizedBox(height: 16),
],
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:flutter_custom_toolbox/settings/application_theme_mode_cubit.dart';
class ApplicationSettingsThemeModeCard extends StatelessWidget {
const ApplicationSettingsThemeModeCard({
super.key,
required this.mode,
required this.icon,
});
final IconData icon;
final ThemeMode mode;
@override
Widget build(BuildContext context) {
return BlocBuilder<ApplicationThemeModeCubit, ApplicationThemeModeState>(
builder: (BuildContext context, ApplicationThemeModeState state) {
return Card(
elevation: 2,
shadowColor: Theme.of(context).colorScheme.shadow,
color: state.themeMode == mode
? Theme.of(context).colorScheme.primary
: Theme.of(context).colorScheme.surface,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(12)),
),
margin: const EdgeInsets.all(5),
child: InkWell(
onTap: () => BlocProvider.of<ApplicationThemeModeCubit>(context).getTheme(
ApplicationThemeModeState(themeMode: mode),
),
borderRadius: const BorderRadius.all(Radius.circular(12)),
child: Icon(
icon,
size: 32,
color: state.themeMode != mode
? Theme.of(context).colorScheme.primary
: Colors.white,
),
),
);
},
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
part 'application_theme_mode_state.dart';
class ApplicationThemeModeCubit extends HydratedCubit<ApplicationThemeModeState> {
ApplicationThemeModeCubit() : super(const ApplicationThemeModeState());
void getTheme(ApplicationThemeModeState state) {
emit(state);
}
@override
ApplicationThemeModeState? fromJson(Map<String, dynamic> json) {
switch (json['themeMode']) {
case 'ThemeMode.dark':
return const ApplicationThemeModeState(themeMode: ThemeMode.dark);
case 'ThemeMode.light':
return const ApplicationThemeModeState(themeMode: ThemeMode.light);
case 'ThemeMode.system':
default:
return const ApplicationThemeModeState(themeMode: ThemeMode.system);
}
}
@override
Map<String, String>? toJson(ApplicationThemeModeState state) {
return <String, String>{'themeMode': state.themeMode.toString()};
}
}
part of 'application_theme_mode_cubit.dart';
@immutable
class ApplicationThemeModeState extends Equatable {
const ApplicationThemeModeState({
this.themeMode,
});
final ThemeMode? themeMode;
@override
List<Object?> get props => <Object?>[
themeMode,
];
}
......@@ -3,7 +3,7 @@ description: "Flutter custom toolbox for org.benoitharrault.* projects."
publish_to: "none"
version: 0.1.1
version: 0.2.0
homepage: https://git.harrault.fr/android/flutter-toolbox
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment