fixed sliver app bar title opacity

This commit is contained in:
Thibault Deckers 2021-12-30 15:11:39 +09:00
parent 25311c5fcb
commit b5e4fecf2f
5 changed files with 45 additions and 10 deletions

View file

@ -20,6 +20,7 @@ import 'package:aves/widgets/common/app_bar_subtitle.dart';
import 'package:aves/widgets/common/app_bar_title.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/sliver_app_bar_title.dart';
import 'package:aves/widgets/dialogs/tile_view_dialog.dart';
import 'package:aves/widgets/search/search_delegate.dart';
import 'package:flutter/material.dart';
@ -116,7 +117,9 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
builder: (context, queryEnabled, child) {
return SliverAppBar(
leading: appMode.hasDrawer ? _buildAppBarLeading(isSelecting) : null,
title: _buildAppBarTitle(isSelecting),
title: SliverAppBarTitleWrapper(
child: _buildAppBarTitle(isSelecting),
),
actions: _buildActions(
isSelecting: isSelecting,
selectedItemCount: selectedItemCount,
@ -177,7 +180,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
);
}
Widget? _buildAppBarTitle(bool isSelecting) {
Widget _buildAppBarTitle(bool isSelecting) {
final l10n = context.l10n;
if (isSelecting) {

View file

@ -0,0 +1,23 @@
import 'package:flutter/material.dart';
// as of Flutter v2.8.1, fading opacity in `SliverAppBar`
// is not applied to title when `appBarTheme.titleTextStyle` is defined,
// so this wrapper manually applies opacity to the default text style
class SliverAppBarTitleWrapper extends StatelessWidget {
final Widget child;
const SliverAppBarTitleWrapper({
Key? key,
required this.child,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final toolbarOpacity = context.dependOnInheritedWidgetOfExactType<FlexibleSpaceBarSettings>()!.toolbarOpacity;
final baseColor = (DefaultTextStyle.of(context).style.color ?? Theme.of(context).primaryTextTheme.headline6!.color!);
return DefaultTextStyle.merge(
style: TextStyle(color: baseColor.withOpacity(toolbarOpacity)),
child: child,
);
}
}

View file

@ -16,6 +16,7 @@ import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:aves/widgets/common/identity/empty.dart';
import 'package:aves/widgets/common/providers/selection_provider.dart';
import 'package:aves/widgets/common/sliver_app_bar_title.dart';
import 'package:aves/widgets/dialogs/filter_editors/create_album_dialog.dart';
import 'package:aves/widgets/filter_grids/albums_page.dart';
import 'package:aves/widgets/filter_grids/common/action_delegates/album_set.dart';
@ -141,9 +142,11 @@ class _AlbumPickAppBar extends StatelessWidget {
return SliverAppBar(
leading: const BackButton(),
title: SourceStateAwareAppBarTitle(
title: Text(title()),
source: source,
title: SliverAppBarTitleWrapper(
child: SourceStateAwareAppBarTitle(
title: Text(title()),
source: source,
),
),
bottom: _AlbumQueryBar(
queryNotifier: queryNotifier,

View file

@ -8,6 +8,7 @@ import 'package:aves/widgets/common/app_bar_subtitle.dart';
import 'package:aves/widgets/common/app_bar_title.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/sliver_app_bar_title.dart';
import 'package:aves/widgets/filter_grids/common/action_delegates/chip_set.dart';
import 'package:aves/widgets/search/search_delegate.dart';
import 'package:flutter/material.dart';
@ -74,7 +75,9 @@ class _FilterGridAppBarState<T extends CollectionFilter> extends State<FilterGri
_isSelectingNotifier.value = isSelecting;
return SliverAppBar(
leading: appMode.hasDrawer ? _buildAppBarLeading(isSelecting) : null,
title: _buildAppBarTitle(isSelecting),
title: SliverAppBarTitleWrapper(
child: _buildAppBarTitle(isSelecting),
),
actions: _buildActions(appMode, selection),
titleSpacing: 0,
floating: true,
@ -103,7 +106,7 @@ class _FilterGridAppBarState<T extends CollectionFilter> extends State<FilterGri
);
}
Widget? _buildAppBarTitle(bool isSelecting) {
Widget _buildAppBarTitle(bool isSelecting) {
if (isSelecting) {
return Selector<Selection<FilterGridItem<T>>, int>(
selector: (context, selection) => selection.selectedItems.length,

View file

@ -5,6 +5,7 @@ import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/app_bar_title.dart';
import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/sliver_app_bar_title.dart';
import 'package:aves/widgets/viewer/action/entry_info_action_delegate.dart';
import 'package:aves/widgets/viewer/info/info_search.dart';
import 'package:aves/widgets/viewer/info/metadata/metadata_section.dart';
@ -37,9 +38,11 @@ class InfoAppBar extends StatelessWidget {
onPressed: onBackPressed,
tooltip: context.l10n.viewerInfoBackToViewerTooltip,
),
title: InteractiveAppBarTitle(
onTap: () => _goToSearch(context),
child: Text(context.l10n.viewerInfoPageTitle),
title: SliverAppBarTitleWrapper(
child: InteractiveAppBarTitle(
onTap: () => _goToSearch(context),
child: Text(context.l10n.viewerInfoPageTitle),
),
),
actions: [
IconButton(