info: highlight titles with custom decoration instead of gradient

This commit is contained in:
Thibault Deckers 2020-01-18 00:12:43 +09:00
parent a31fe91ec2
commit 04c8c966bd
2 changed files with 30 additions and 13 deletions

View file

@ -0,0 +1,28 @@
import 'package:flutter/material.dart';
class HighlightDecoration extends Decoration {
final Color color;
const HighlightDecoration({@required this.color});
@override
HighlightDecorationPainter createBoxPainter([VoidCallback onChanged]) {
return HighlightDecorationPainter(this, onChanged);
}
}
class HighlightDecorationPainter extends BoxPainter {
final HighlightDecoration decoration;
const HighlightDecorationPainter(this.decoration, VoidCallback onChanged) : super(onChanged);
@override
void paint(Canvas canvas, Offset offset, ImageConfiguration configuration) {
final size = configuration.size;
final confHeight = size.height;
final paintHeight = confHeight * .4;
final rect = Rect.fromLTWH(offset.dx, offset.dy + confHeight - paintHeight, size.width, paintHeight);
final paint = Paint()..color = decoration.color;
canvas.drawRect(rect, paint);
}
}

View file

@ -3,6 +3,7 @@ import 'dart:async';
import 'package:aves/model/image_entry.dart'; import 'package:aves/model/image_entry.dart';
import 'package:aves/model/metadata_service.dart'; import 'package:aves/model/metadata_service.dart';
import 'package:aves/utils/color_utils.dart'; import 'package:aves/utils/color_utils.dart';
import 'package:aves/widgets/common/fx/highlight_decoration.dart';
import 'package:aves/widgets/fullscreen/info/info_page.dart'; import 'package:aves/widgets/fullscreen/info/info_page.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
@ -112,7 +113,7 @@ class _Directory extends StatelessWidget {
children: [ children: [
if (directoryName.isNotEmpty) if (directoryName.isNotEmpty)
Container( Container(
decoration: _DirectoryTitleDecoration( decoration: HighlightDecoration(
color: stringToColor(directoryName), color: stringToColor(directoryName),
), ),
margin: const EdgeInsets.symmetric(vertical: 4.0), margin: const EdgeInsets.symmetric(vertical: 4.0),
@ -141,15 +142,3 @@ class _Directory extends StatelessWidget {
); );
} }
} }
class _DirectoryTitleDecoration extends BoxDecoration {
_DirectoryTitleDecoration({@required Color color})
: super(
gradient: LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
stops: [0, .4, .4],
colors: [color, color, Colors.transparent],
),
);
}