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))))
                  ],
                ))));
  }
}

往期文章

个人主页

相关推荐
爱意随风起风止意难平3 分钟前
003 flutter初始文件讲解(2)
学习·flutter
每次的天空1 小时前
Android第十一次面试flutter篇
android·flutter·面试
getapi7 小时前
为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
flutter·uni-app
getapi7 小时前
使用 Flutter 开发 App 时,想要根据 Figma 设计稿开发出响应式 UI 界面
flutter·ui·figma
只可远观7 小时前
Flutter GridView网格组件
flutter
jianleepb9 小时前
2025Flutter(安卓)面试题详解
flutter
90后的晨仔12 小时前
Flutter 中常见的几种页面跳转方式
前端·flutter
90后的晨仔12 小时前
Flutter滚动组件全面解析
前端·flutter
张风捷特烈14 小时前
每日一题 Flutter#2 | 如何理解 Widget 的不可变性
android·flutter·面试
李新_1 天前
我们使用了哪些Flutter 三方库(二)
android·flutter·ios