Expanded(
            flex: 1,
            child: Padding(
              padding: const EdgeInsets.only(top: 80, right: 230),
              child: Text(
                'Gifts \n& Wishes',
                style: TextStyle(
                  fontFamily: 'GreatVibes',
                  fontSize: 42,
                ),
              ),
            ),
          ),

我目前有这个:

enter image description here

但我想要的是:

enter image description here

如何在Fighter中更改此文本的混合模式?

推荐答案

对于 colored颜色 混合2小工具,特别是如果我们想要将images或其他color texturetext混合,我们必须利用Flutter 画布的核心绘制功能来允许混合效果,就像在类似于CSS、SVG或Photoshop的应用程序中一样.

以下是一个完整的例子,基于this SO post个:

创建一个blendmask.dart文件并粘贴以下代码:

import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';

class BlendMask extends SingleChildRenderObjectWidget {
  final BlendMode blendMode;
  final double opacity;

  BlendMask({
    required this.blendMode,
    this.opacity = 1.0,
    Key? key,
    Widget? child,
  }) : super(key: key, child: child);

  @override
  RenderObject createRenderObject(context) {
    return RenderBlendMask(blendMode, opacity);
  }

  @override
  void updateRenderObject(BuildContext context, RenderBlendMask renderObject) {
    renderObject.blendMode = blendMode;
    renderObject.opacity = opacity;
  }
}

class RenderBlendMask extends RenderProxyBox {
  BlendMode blendMode;
  double opacity;

  RenderBlendMask(this.blendMode, this.opacity);

  @override
  void paint(context, offset) {
    context.canvas.saveLayer(
        offset & size,
        Paint()
          ..blendMode = blendMode
          ..color = Color.fromARGB((opacity * 255).round(), 255, 255, 255));

    super.paint(context, offset);

    context.canvas.restore();
  }
}

这是你的main.dart分:

import 'package:flutter/material.dart';
import 'blendmask.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Blend Color Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Title"),
      ),
      body: SizedBox.expand(
      child: Stack(
        children: [
          SizedBox.expand(
            child: Image.network(
                fit: BoxFit.cover,
                "https://images.unsplash.com/photo-1620641788421-7a1c342ea42e?ixlib=rb-0.3.5&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA&s=a0c8d632e977f94e5d312d9893258f59&auto=format&fit=crop&w=1355&q=80"),
          ),
          BlendMask(
            opacity: 1.0,
            blendMode: BlendMode.difference,
            child: const SizedBox.expand(
              child: Text(
                "\n \n This is \n \t\t a Title ",
                style: TextStyle(
                  fontSize: 100,
                  fontWeight: FontWeight.w600,
                  color: Color.fromARGB(255, 53, 250, 119),
                ),
              ),
            ),
          ),
        ],
      ),
    ),
    );
  }
}

这就是结果: 请注意,您可以更改为different color blend modes.

enter image description here

Flutter相关问答推荐

飘动的文本用/字符绕转

Flutter在创建时为提供者调用初始化函数

Flutter 中的多页表现

如何将 colored颜色 阴影作为默认容器 colored颜色 应用于自定义窗口小工具?

修复后期变量的抖动皮棉

在Flutter 中每次点击按钮时都很难调用自定义函数

使用ImageFilter模糊并剪裁同一renderObject中的元素

如何让两个展开的Widget根据其子窗口的屏幕大小

Flutter如何将2个以上的值传递到ListView上的另一个屏幕?

使用现有Map方法对子类克隆方法的逻辑进行Dart标准化

Flutter Xcode 15 错误(Xcode):DT_TOOLCHAIN_DIR 无法用于判断 LIBRARY_SEARCH_PATHS

Flutter 使用扩展的 TextField 定位小部件

在参数为空时保持命名参数的默认值

我在手机上找不到我的 Flutter 应用缓存数据

当我将主题更改为深色然后返回浅色模式时,Getx 会Flutter 更改主题,它不会加载我的自定义主题

如何修复int类型不是String类型的子类型

Flutter 如何要求用户在应用程序中设置电话密码?

Firebase Firestore 查询

如何在 Flutter 中创建类似箭头标签的设计

如何在Flutter 中一次判断共享首选项中是否存在多个值