Как украсить обводку текста во флаттере? - PullRequest
0 голосов
/ 03 сентября 2018

Как украсить обводку текста во флаттере? Это как -webkit-text-stroke - CSS

Ответы [ 3 ]

0 голосов
/ 07 апреля 2019

Вдохновленный этой статьей , для достижения эффекта я предпочитаю использовать технику, которая смешивает два текстовых виджета и свойство TextStype.foreground с пользовательской функцией Paint ():

class StrokeText extends StatelessWidget {
  final String text;
  final double fontSize;
  final FontWeight fontWeight;
  final Color color;
  final Color strokeColor;
  final double strokeWidth;

  const StrokeText(
    this.text, {
    Key key,
    this.fontSize,
    this.fontWeight,
    this.color,
    this.strokeColor,
    this.strokeWidth,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Text(
          text,
          style: TextStyle(
            fontSize: fontSize,
            fontWeight: fontWeight,
            foreground: Paint()..color = color,
          ),
        ),
        Text(
          text,
          style: TextStyle(
            fontSize: fontSize,
            fontWeight: fontWeight,
            foreground: Paint()
              ..strokeWidth = strokeWidth
              ..color = strokeColor
              ..style = PaintingStyle.stroke,
          ),
        ),
      ],
    );
  }
}
0 голосов
/ 27 июля 2019

Инсульт стал возможен без обходных путей с момента добавления красок переднего плана в TextStyle. Явный пример обводки при заполнении заштрихованным текстом был добавлен в документацию TextStyle: https://master -api.flutter.dev / flutter / painting / TextStyle-class.html # painting.TextStyle.6

Этот пример воспроизводится здесь:

enter image description here

Stack(
  children: <Widget>[
    // Stroked text as border.
    Text(
      'Greetings, planet!',
      style: TextStyle(
        fontSize: 40,
        foreground: Paint()
          ..style = PaintingStyle.stroke
          ..strokeWidth = 6
          ..color = Colors.blue[700],
      ),
    ),
    // Solid text as fill.
    Text(
      'Greetings, planet!',
      style: TextStyle(
        fontSize: 40,
        color: Colors.grey[300],
      ),
    ),
  ],
)

Обводка сама по себе возможна, удалив стек и просто использовав первый виджет Текст обводки. Порядок обводки / заливки также можно изменить, поменяв местами первый и второй текстовые виджеты.

0 голосов
/ 08 ноября 2018

Я тоже искал, не смог найти. Но я нашел обходной путь, используя 4 тени в TextStyle:

Text("Border test",
    style: TextStyle(
      inherit: true,
      fontSize: 48.0,
      color: Colors.pink,
      shadows: [
        Shadow( // bottomLeft
          offset: Offset(-1.5, -1.5),
          color: Colors.white
        ),
        Shadow( // bottomRight
          offset: Offset(1.5, -1.5),
          color: Colors.white
        ),
        Shadow( // topRight
          offset: Offset(1.5, 1.5),
          color: Colors.white
        ),
        Shadow( // topLeft
          offset: Offset(-1.5, 1.5),
          color: Colors.white
        ),
      ]
    ),
);

Я также открыл проблему на GitHub: https://github.com/flutter/flutter/issues/24108

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...