m3_lightmeter/lib/screens/settings/screen_settings.dart

125 lines
3.8 KiB
Dart
Raw Normal View History

2022-10-30 18:23:06 +00:00
import 'package:flutter/material.dart';
2022-10-30 18:59:33 +00:00
import 'package:lightmeter/generated/l10n.dart';
import 'package:lightmeter/res/dimens.dart';
import 'components/haptics/provider_list_tile_haptics.dart';
2023-01-23 10:28:36 +00:00
import 'components/source_code/widget_list_tile_source_code.dart';
2023-01-23 17:36:40 +00:00
import 'components/version/widget_list_tile_version.dart';
import 'components/widget_list_tile_fractional_stops.dart';
import 'components/theme/widget_settings_theme.dart';
import 'components/widget_label_version.dart';
2022-10-30 18:23:06 +00:00
class SettingsScreen extends StatelessWidget {
const SettingsScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
2022-12-17 18:05:50 +00:00
body: SafeArea(
top: false,
child: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
pinned: true,
automaticallyImplyLeading: false,
expandedHeight: Dimens.grid168,
flexibleSpace: FlexibleSpaceBar(
centerTitle: false,
titlePadding: const EdgeInsets.all(Dimens.paddingM),
title: Text(
S.of(context).settings,
style: TextStyle(color: Theme.of(context).colorScheme.onSurface, fontSize: 24),
),
2022-10-30 18:59:33 +00:00
),
2022-12-17 18:05:50 +00:00
actions: [
IconButton(
onPressed: Navigator.of(context).pop,
icon: const Icon(Icons.close),
),
],
2022-10-30 18:59:33 +00:00
),
2022-12-17 18:05:50 +00:00
SliverList(
delegate: SliverChildListDelegate(
[
2023-01-23 17:36:40 +00:00
_Section(
title: S.of(context).theme,
children: [
const StopTypeListTile(),
],
),
_Section(
title: S.of(context).theme,
children: [
const HapticsListTileProvider(),
],
),
_Section(
title: S.of(context).theme,
children: [
const ThemeSettings(),
],
),
_Section(
title: S.of(context).about,
children: [
const SourceCodeListTile(),
const VersionListTile(),
],
),
2022-12-17 18:05:50 +00:00
],
),
),
SliverFillRemaining(
hasScrollBody: false,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: const [VersionLabel()],
2022-10-30 18:23:06 +00:00
),
2022-10-30 19:07:39 +00:00
),
2022-12-17 18:05:50 +00:00
],
),
2022-10-30 18:23:06 +00:00
),
);
}
}
2023-01-23 17:36:40 +00:00
class _Section extends StatelessWidget {
final String title;
final List<Widget> children;
const _Section({required this.title, required this.children});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.fromLTRB(
Dimens.paddingM,
0,
Dimens.paddingM,
Dimens.paddingM,
),
child: Material(
borderRadius: BorderRadius.circular(Dimens.borderRadiusL),
color: Theme.of(context).colorScheme.primaryContainer,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: Dimens.paddingM),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: const EdgeInsets.only(left: Dimens.paddingM),
child: Text(
title,
style: Theme.of(context).textTheme.labelLarge,
),
),
...children,
],
),
),
),
);
}
}