Flutter阴影效果插件shadows的使用

Flutter阴影效果插件shadows的使用

工作进度

该插件目前处于开发阶段。它提供了对阴影的多种操作功能。

参考文档

BoxShadowUtils 扩展类

  • BoxShadowUtils 提供了对 BoxShadow 的扩展方法,用于通过 copyWith 操作阴影。
  • copyWith 方法用于替换 BoxShadow 属性。
  • "Multiply" this BoxShadow by a Color 未实现。
  • "Multiply" this blurRadius by a num 未实现。
  • "Add" to this spreadRadius a double smudgeSpread 可以增加阴影的扩散半径。
  • "Subtract" from this spreadRadius a double squishSpread 可以减少阴影的扩散半径。
  • "Modulate" this offset by Offset offsetScale 可以调整阴影的偏移量。

BoxShadowsUtils 扩展类

  • BoxShadowsUtils 提供了对 List<BoxShadow> 的扩展方法,用于批量操作阴影。
  • colorize 方法可以为 List<BoxShadow> 添加单个颜色或颜色列表,并可选择保留原透明度。
  • rampOpacity 方法可以为 List<BoxShadow> 设置透明度渐变,可以选择同时改变颜色。

Elevation 类

  • Elevation 类提供了静态方法来简化生成 BoxDecoration 的过程,从 Flutter 的顶层 kElevationToShadow 获取阴影。
  • asBoxShadows(double elevation, {Color? color}) 方法根据高度生成阴影列表。
  • asBoxDecoration(double elevation, {Color? color}) 方法根据高度生成带有阴影的 BoxDecoration

ElevationUtils 扩展类

  • ElevationUtils 提供了对 List<BoxShadow> 的扩展方法。
  • materialize 方法将标准的材料阴影透明度映射应用到 List<BoxShadow> 上。

示例

Elevation 示例

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Shadows Example')),
        body: Center(
          child: Container(
            width: 100,
            height: 100,
            decoration: Elevation.asBoxDecoration(2),
            child: Center(child: Text('Elevation 2')),
          ),
        ),
      ),
    );
  }
}

ElevationUtils 示例

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('ElevationUtils Example')),
        body: Center(
          child: Container(
            width: 100,
            height: 100,
            decoration: BoxDecoration(
              boxShadow: [
                BoxShadow(blurRadius: 4.0, color: Colors.black),
                BoxShadow(blurRadius: 8.0, color: Colors.grey),
              ],
            ).materialize(),
            child: Center(child: Text('ElevationUtils Materialize')),
          ),
        ),
      ),
    );
  }
}

BoxShadowUtils 示例

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('BoxShadowUtils Example')),
        body: Center(
          child: Container(
            width: 100,
            height: 100,
            decoration: BoxDecoration(
              boxShadow: [
                BoxShadow(blurRadius: 4.0, color: Colors.black).copyWith(spreadRadius: 2.0),
              ],
            ),
            child: Center(child: Text('BoxShadowUtils CopyWith')),
          ),
        ),
      ),
    );
  }
}

BoxShadowsUtils 示例

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('BoxShadowsUtils Example')),
        body: Center(
          child: Container(
            width: 100,
            height: 100,
            decoration: BoxDecoration(
              boxShadow: [
                BoxShadow(blurRadius: 4.0, color: Colors.black),
                BoxShadow(blurRadius: 8.0, color: Colors.grey),
              ].colorize(Colors.red),
            ),
            child: Center(child: Text('BoxShadowsUtils Colorize')),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter阴影效果插件shadows的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter阴影效果插件shadows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,虽然没有一个官方直接名为 shadows 的插件专门用于处理阴影效果,但Flutter本身已经提供了强大的阴影效果支持,主要是通过 Containerdecoration 属性中的 BoxDecoration 类来设置的。下面是一个如何使用阴影效果的代码示例:

示例代码

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Shadow Effect'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 使用 Container 和 BoxDecoration 设置阴影效果
              Container(
                margin: EdgeInsets.all(20.0),
                decoration: BoxDecoration(
                  color: Colors.blue,
                  borderRadius: BorderRadius.circular(15.0),
                  boxShadow: [
                    BoxShadow(
                      color: Colors.black.withOpacity(0.5),
                      spreadRadius: 5,
                      blurRadius: 7,
                      offset: Offset(0, 3), // changes position of shadow
                    ),
                  ],
                ),
                width: 200,
                height: 100,
                child: Center(
                  child: Text(
                    'Shadow Box',
                    style: TextStyle(color: Colors.white),
                  ),
                ),
              ),

              // 使用 Card 小部件并设置阴影效果
              Card(
                margin: EdgeInsets.all(20.0),
                elevation: 10, // 控制阴影的大小
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(15.0),
                ),
                child: Container(
                  width: 200,
                  height: 100,
                  child: Center(
                    child: Text(
                      'Elevated Card',
                      style: TextStyle(color: Colors.black),
                    ),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

代码说明

  1. Container 和 BoxDecoration:

    • 使用 Container 小部件,并通过其 decoration 属性设置 BoxDecoration
    • BoxDecoration 中,boxShadow 属性接受一个 BoxShadow 列表,用于定义阴影效果。
    • 每个 BoxShadow 对象可以设置阴影的颜色(color)、扩散半径(spreadRadius)、模糊半径(blurRadius)和偏移量(offset)。
  2. Card 小部件:

    • Card 小部件自带阴影效果,通过 elevation 属性控制阴影的大小。
    • shape 属性可以用来设置卡片的形状,这里使用了圆角矩形。

通过上述代码,你可以在Flutter应用中轻松实现带有阴影效果的UI组件。如果你需要更复杂的阴影效果,可以组合使用不同的 BoxShadow 配置,或者结合其他UI组件和布局技巧来实现。

回到顶部