aves/lib/labs/outlined_text.dart
2020-05-24 10:21:43 +09:00

78 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
typedef OutlinedWidgetBuilder = Widget Function(BuildContext context, bool isShadow);
class OutlinedText extends StatelessWidget {
final OutlinedWidgetBuilder leadingBuilder, trailingBuilder;
final String text;
final TextStyle style;
final double outlineWidth;
final Color outlineColor;
static const widgetSpanAlignment = PlaceholderAlignment.middle;
const OutlinedText({
Key key,
this.leadingBuilder,
@required this.text,
this.trailingBuilder,
@required this.style,
double outlineWidth,
Color outlineColor,
}) : outlineWidth = outlineWidth ?? 1,
outlineColor = outlineColor ?? Colors.black,
super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
Text.rich(
TextSpan(
children: [
if (leadingBuilder != null)
WidgetSpan(
alignment: widgetSpanAlignment,
child: leadingBuilder(context, true),
),
TextSpan(
text: text,
style: style.copyWith(
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = outlineWidth
..color = outlineColor,
),
),
if (trailingBuilder != null)
WidgetSpan(
alignment: widgetSpanAlignment,
child: trailingBuilder(context, true),
),
],
),
),
Text.rich(
TextSpan(
children: [
if (leadingBuilder != null)
WidgetSpan(
alignment: widgetSpanAlignment,
child: leadingBuilder(context, false),
),
TextSpan(
text: text,
style: style,
),
if (trailingBuilder != null)
WidgetSpan(
alignment: widgetSpanAlignment,
child: trailingBuilder(context, false),
),
],
),
),
],
);
}
}