flutter-渐变色边框和渐变色文字和渐变色背景

文章目录

  • [1. 介绍](#1. 介绍)
  • [2. 代码实现](#2. 代码实现)
    • [2-1. 渐变色背景](#2-1. 渐变色背景)
    • [2-2. 渐变色边框](#2-2. 渐变色边框)
    • [2-3. 宽高由内容撑起的渐变色边框](#2-3. 宽高由内容撑起的渐变色边框)
    • [2-4. 渐变色文本](#2-4. 渐变色文本)
  • [3. 完整例子](#3. 完整例子)

1. 介绍

在 flutter 中,渐变有三种,线性渐变 LinearGradient、放射状渐变 RadialGradient、扇形渐变 SweepGradient。一般都是使用线性渐变 LinearGradient,下面是本文带你实现的几个渐变色效果:

2. 代码实现

LinearGradient 类接受三个参数:

  • begin:渐变的起始点,例如 Alignment.centerLeft 表示从左侧开始渐变
  • end:渐变的结束点,例如 Alignment.centerRight 表示渐变到右侧结束
  • colors:渐变过程中的颜色数组

2-1. 渐变色背景

dart 复制代码
Container(
  height: 200,
  alignment: Alignment.center,
  margin: const EdgeInsets.symmetric(vertical: 30),
  decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(12),
      gradient: const LinearGradient(
          begin: Alignment.topLeft,
          end: Alignment.bottomRight,
          colors: colorList)),
  child: const Text('渐变色背景',
      style:
          TextStyle(color: Colors.white, fontSize: 16)))

2-2. 渐变色边框

需要先安装gradient_borders库。

shell 复制代码
flutter pub add gradient_borders
dart 复制代码
import 'package:gradient_borders/box_borders/gradient_box_border.dart';

Container(
  height: 200,
  alignment: Alignment.center,
  margin: const EdgeInsets.only(bottom: 30),
  decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(12),
      border: const GradientBoxBorder(
          gradient: LinearGradient(colors: colorList),
          width: 2)),
  child: const Text('渐变色边框',
      style:
          TextStyle(color: Colors.white, fontSize: 16)))

2-3. 宽高由内容撑起的渐变色边框

dart 复制代码
Container(
  padding: const EdgeInsets.all(10),
  margin: const EdgeInsets.only(bottom: 30),
  decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(12),
      border: const GradientBoxBorder(
          gradient: LinearGradient(colors: colorList),
          width: 2)),
  child: const Text('宽高不固定由内容撑起来的渐变色边框',
      style:
          TextStyle(color: Colors.white, fontSize: 16)))

2-4. 渐变色文本

dart 复制代码
Container(
  height: 50,
  alignment: Alignment.center,
  child: ShaderMask(
      shaderCallback: (rect) {
        return const LinearGradient(
          begin: Alignment.topLeft,
          end: Alignment.bottomRight,
          colors: colorList,
        ).createShader(rect);
      },
      child: const Text('渐变色文字',
          style: TextStyle(
              color: Colors.white, fontSize: 16))))

3. 完整例子

dart 复制代码
import 'package:flutter/material.dart';
import 'package:gradient_borders/box_borders/gradient_box_border.dart';

/// 渐变色背景和边框和文字
class GradientColorPage extends StatelessWidget {
  const GradientColorPage({super.key});

  @override
  Widget build(BuildContext context) {
    const List<Color> colorList = [Colors.red, Colors.yellow, Colors.blue];

    return Scaffold(
        backgroundColor: Colors.black,
        body: SafeArea(
            child: Container(
                alignment: Alignment.center,
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.height,
                padding: const EdgeInsets.all(20),
                child: Column(
                  mainAxisSize: MainAxisSize.max,
                  children: [
                    /// 渐变色背景
                    Container(
                        height: 200,
                        alignment: Alignment.center,
                        margin: const EdgeInsets.symmetric(vertical: 30),
                        decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(12),
                            gradient: const LinearGradient(
                                begin: Alignment.topLeft,
                                end: Alignment.bottomRight,
                                colors: colorList)),
                        child: const Text('渐变色背景',
                            style:
                                TextStyle(color: Colors.white, fontSize: 16))),

                    /// 渐变色边框
                    Container(
                        height: 200,
                        alignment: Alignment.center,
                        margin: const EdgeInsets.only(bottom: 30),
                        decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(12),
                            border: const GradientBoxBorder(
                                gradient: LinearGradient(colors: colorList),
                                width: 2)),
                        child: const Text('渐变色边框',
                            style:
                                TextStyle(color: Colors.white, fontSize: 16))),

                    /// 宽高不固定由内容撑起来的渐变色边框
                    Container(
                        padding: const EdgeInsets.all(10),
                        margin: const EdgeInsets.only(bottom: 30),
                        decoration: BoxDecoration(
                            borderRadius: BorderRadius.circular(12),
                            border: const GradientBoxBorder(
                                gradient: LinearGradient(colors: colorList),
                                width: 2)),
                        child: const Text('宽高不固定由内容撑起来的渐变色边框',
                            style:
                                TextStyle(color: Colors.white, fontSize: 16))),

                    /// 渐变色文字
                    Container(
                        height: 50,
                        alignment: Alignment.center,
                        child: ShaderMask(
                            shaderCallback: (rect) {
                              return const LinearGradient(
                                begin: Alignment.topLeft,
                                end: Alignment.bottomRight,
                                colors: colorList,
                              ).createShader(rect);
                            },
                            child: const Text('渐变色文字',
                                style: TextStyle(
                                    color: Colors.white, fontSize: 16))))
                  ],
                ))));
  }
}

往期文章

个人主页

相关推荐
向哆哆2 小时前
打造高校四六级报名管理系统:基于 Flutter × OpenHarmony 的跨端开发实践
flutter·开源·鸿蒙·openharmony·开源鸿蒙
2501_940007892 小时前
Flutter for OpenHarmony三国杀攻略App实战 - 设置功能实现
flutter
lbb 小魔仙3 小时前
【Harmonyos】开源鸿蒙跨平台训练营DAY9:获取分类数据并渲染
flutter·华为·harmonyos
mocoding3 小时前
Flutter 3D 翻转动画flip_card三方库在鸿蒙版天气预报卡片中的实战教程
flutter·3d·harmonyos
2601_949809595 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
2601_949868365 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
一起养小猫6 小时前
Flutter for OpenHarmony 实战:别踩白方块游戏完整开发指南
flutter·游戏
●VON7 小时前
Flutter for OpenHarmony 21天训练营 Day03 总结:从学习到输出,迈出原创第一步
学习·flutter·openharmony·布局·技术
程序员清洒7 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6668 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart