minor fixes

This commit is contained in:
Thibault Deckers 2023-01-15 12:04:27 +01:00
parent d8a1d21f6c
commit b75e01185b
3 changed files with 105 additions and 63 deletions

View file

@ -1,5 +1,4 @@
import 'package:aves/model/settings/settings.dart';
import 'package:aves/theme/colors.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/aves_app.dart';
import 'package:aves/widgets/common/basic/insets.dart';
@ -32,15 +31,19 @@ class AvesAppBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
final useTvLayout = settings.useTvLayout;
return Selector<MediaQueryData, double>(
selector: (context, mq) => mq.padding.top,
builder: (context, mqPaddingTop, child) {
final useTvLayout = settings.useTvLayout;
return SliverPersistentHeader(
floating: !useTvLayout,
pinned: pinned,
delegate: _SliverAppBarDelegate(
height: mqPaddingTop + appBarHeightForContentHeight(contentHeight),
child: child!,
),
);
},
child: DirectionalSafeArea(
start: !useTvLayout,
bottom: false,
@ -68,7 +71,7 @@ class AvesAppBar extends StatelessWidget {
: const SizedBox(width: 16),
Expanded(
child: DefaultTextStyle(
style: context.select<AvesColorsData, TextStyle>((v) => Theme.of(context).appBarTheme.titleTextStyle!),
style: Theme.of(context).appBarTheme.titleTextStyle!,
child: Hero(
tag: titleHeroTag,
flightShuttleBuilder: _flightShuttleBuilder,
@ -94,9 +97,6 @@ class AvesAppBar extends StatelessWidget {
),
),
),
),
);
},
);
}

View file

@ -15,8 +15,8 @@ import 'package:aves/widgets/common/basic/wheel.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/dialogs/aves_dialog.dart';
import 'package:aves/widgets/dialogs/pick_dialogs/item_pick_page.dart';
import 'package:aves/widgets/dialogs/item_picker.dart';
import 'package:aves/widgets/dialogs/pick_dialogs/item_pick_page.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -43,6 +43,7 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
late ValueNotifier<String> _shiftSign;
bool _showOptions = false;
final Set<MetadataField> _fields = {...DateModifier.writableFields};
final ValueNotifier<bool> _isValidNotifier = ValueNotifier(false);
DateTime get copyItemDate => _copyItemSource.bestDate ?? DateTime.now();
@ -52,6 +53,13 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
_initCustom();
_initCopyItem();
_initShift(minutesInHour);
_validate();
}
@override
void dispose() {
_isValidNotifier.dispose();
super.dispose();
}
void _initCustom() {
@ -88,7 +96,11 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
values: DateEditAction.values,
valueText: (v) => v.getText(context),
value: _action,
onChanged: (v) => setState(() => _action = v!),
onChanged: (v) {
_action = v!;
_validate();
setState(() {});
},
isExpanded: true,
dropdownColor: Themes.thirdLayerColor(context),
),
@ -113,9 +125,14 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
],
actions: [
const CancelButton(),
TextButton(
onPressed: () => _submit(context),
ValueListenableBuilder<bool>(
valueListenable: _isValidNotifier,
builder: (context, isValid, child) {
return TextButton(
onPressed: isValid ? () => _submit(context) : null,
child: Text(l10n.applyButtonLabel),
);
},
),
],
);
@ -265,7 +282,11 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
children: DateModifier.writableFields
.map((field) => SwitchListTile(
value: _fields.contains(field),
onChanged: (selected) => setState(() => selected ? _fields.add(field) : _fields.remove(field)),
onChanged: (selected) {
selected ? _fields.add(field) : _fields.remove(field);
_validate();
setState(() {});
},
title: Text(field.title),
))
.toList(),
@ -346,5 +367,24 @@ class _EditEntryDateDialogState extends State<EditEntryDateDialog> {
}
}
void _submit(BuildContext context) => Navigator.pop(context, _getModifier());
void _validate() {
switch (_action) {
case DateEditAction.setCustom:
case DateEditAction.copyField:
case DateEditAction.copyItem:
case DateEditAction.extractFromTitle:
_isValidNotifier.value = true;
break;
case DateEditAction.shift:
case DateEditAction.remove:
_isValidNotifier.value = _fields.isNotEmpty;
break;
}
}
void _submit(BuildContext context) {
if (_isValidNotifier.value) {
Navigator.pop(context, _getModifier());
}
}
}

View file

@ -36,6 +36,8 @@ class _RenameAlbumDialogState extends State<RenameAlbumDialog> {
@override
void dispose() {
_nameController.dispose();
_existsNotifier.dispose();
_isValidNotifier.dispose();
super.dispose();
}
@ -66,7 +68,7 @@ class _RenameAlbumDialogState extends State<RenameAlbumDialog> {
child: Text(context.l10n.applyButtonLabel),
);
},
)
),
],
);
}