Flutter自定义边框插件fancy_border的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter自定义边框插件fancy_border的使用

本插件提供了一个名为FancyBorder的自定义Flutter边框类,允许你绘制具有更多样式选项的边框。它支持以下功能:

  • 渐变:应用渐变以获得更装饰性的外观。
  • 图案:使用定义的图案创建虚线或点状边框。

预览

Demo

使用方法

Container(
  width: 100,
  height: 50,
  decoration: const ShapeDecoration(
    color: Colors.yellow,
    shape: FancyBorder(
      /// 底层边框形状。
      shape: RoundedRectangleBorder(),
      /// 边框样式。
      style: FancyBorderStyle.dashed,
      /// 边框宽度。
      width: 4,
      /// 边框描边偏移。
      offset: 2,
      /// 要替换为渐变的颜色。
      color: Colors.red,
      /// 边框使用的渐变。
      gradient: LinearGradient(colors: [Colors.blue, Colors.red]),
      /// 边框的圆角半径。
      corners: BorderRadius.all(Radius.circular(10)),
    ),
  ),
  alignment: Alignment.center,
  child: const Text('Rounded'),
)

边框样式

FancyBorderStyle 类定义了可用于边框的不同样式:

  • FancyBorderStyle.solid(默认):实线边框样式。
  • FancyBorderStyle.dotted:点状边框样式。
  • FancyBorderStyle.dashed:虚线边框样式。
  • FancyBorderStyle.morse:类似摩尔斯码的边框样式。

你可以根据需要添加更多样式到枚举中。

要深入了解fancy_border类的技术细节、方法和属性,请参阅官方API文档

示例代码

以下是完整的示例代码,展示了如何在应用中使用FancyBorder插件:

import 'package:flutter/material.dart';
import 'package:fancy_border/fancy_border.dart';
import 'package:wx_text/wx_text.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fancy Border Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const WxText.displayLarge(
              'FancyBorder',
              fontWeight: FontWeight.bold,
              outlineColor: Colors.white,
              outlineWidth: .5,
              shadows: [
                Shadow(
                  color: Colors.green,
                  blurRadius: 3,
                ),
              ],
              gradient: LinearGradient(
                colors: [
                  Colors.green,
                  Colors.blue,
                ],
                begin: Alignment.topCenter,
                end: Alignment.bottomCenter,
              ),
            ),
            const SizedBox(height: 45),
            Wrap(
              spacing: 30,
              children: [
                Container(
                  width: 100,
                  height: 50,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: RoundedRectangleBorder(),
                      style: FancyBorderStyle.solid,
                      width: 4,
                      offset: 2,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(10)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Rounded'),
                ),
                Container(
                  width: 100,
                  height: 50,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: ContinuousRectangleBorder(),
                      style: FancyBorderStyle.solid,
                      width: 4,
                      offset: 2,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(40)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Continuous'),
                ),
              ],
            ),
            const SizedBox(height: 30),
            Wrap(
              spacing: 30,
              children: [
                Container(
                  width: 100,
                  height: 50,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: BeveledRectangleBorder(),
                      style: FancyBorderStyle.dashed,
                      width: 4,
                      offset: 2,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(10)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Beveled'),
                ),
                Container(
                  width: 100,
                  height: 50,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: StadiumBorder(),
                      style: FancyBorderStyle.dashed,
                      width: 4,
                      offset: 2,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(10)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Stadium'),
                ),
              ],
            ),
            const SizedBox(height: 30),
            Wrap(
              crossAxisAlignment: WrapCrossAlignment.center,
              spacing: 30,
              children: [
                Container(
                  width: 60,
                  height: 60,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: CircleBorder(),
                      style: FancyBorderStyle.dotted,
                      width: 5,
                      offset: 2,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(10)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Circle'),
                ),
                Container(
                  width: 100,
                  height: 50,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: OvalBorder(),
                      style: FancyBorderStyle.dotted,
                      width: 5,
                      offset: 2,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(10)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Oval'),
                ),
              ],
            ),
            const SizedBox(height: 30),
            Wrap(
              crossAxisAlignment: WrapCrossAlignment.center,
              spacing: 30,
              children: [
                Container(
                  width: 90,
                  height: 90,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: StarBorder(innerRadiusRatio: .6),
                      style: FancyBorderStyle.morse,
                      width: 3,
                      offset: 5,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.all(Radius.circular(10)),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Star'),
                ),
                Container(
                  width: 100,
                  height: 60,
                  decoration: const ShapeDecoration(
                    color: Colors.yellow,
                    shape: FancyBorder(
                      shape: RoundedRectangleBorder(),
                      style: FancyBorderStyle.morse,
                      width: 3,
                      offset: 3,
                      gradient:
                          LinearGradient(colors: [Colors.blue, Colors.red]),
                      corners: BorderRadius.only(
                        topLeft: Radius.circular(35),
                        bottomRight: Radius.circular(35),
                      ),
                    ),
                  ),
                  alignment: Alignment.center,
                  child: const Text('Leaf'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter自定义边框插件fancy_border的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义边框插件fancy_border的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用自定义边框插件 fancy_border 的代码示例。假设你已经将 fancy_border 插件添加到了你的 pubspec.yaml 文件中,并且已经运行了 flutter pub get 命令。

首先,确保你的 pubspec.yaml 文件中包含以下依赖项:

dependencies:
  flutter:
    sdk: flutter
  fancy_border: ^最新版本号  # 替换为实际的最新版本号

然后,在你的 Dart 文件中,你可以这样使用 fancy_border 插件来创建一个带有自定义边框的组件。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:fancy_border/fancy_border.dart'; // 导入 fancy_border 插件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Fancy Border Example'),
        ),
        body: Center(
          child: FancyBorderExample(),
        ),
      ),
    );
  }
}

class FancyBorderExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            'This is a widget with a fancy border:',
            style: TextStyle(fontSize: 20),
          ),
          SizedBox(height: 20),
          FancyBorder(
            // 设置边框的宽度、颜色和样式
            borderWidth: 5.0,
            borderColor: Colors.blue,
            borderStyle: BorderStyle.dashed, // 可以是 solid, dashed, dotted 等
            child: Container(
              width: 200,
              height: 100,
              color: Colors.lightGreen,
              alignment: Alignment.center,
              child: Text(
                'Fancy Bordered Box',
                style: TextStyle(color: Colors.white, fontSize: 18),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 导入 fancy_border 插件。
  2. 创建一个简单的 Flutter 应用,其中包含一个 FancyBorderExample 组件。
  3. FancyBorderExample 组件中,使用 FancyBorder 包裹一个 Container
  4. 通过 FancyBorder 的属性设置边框的宽度、颜色和样式。

FancyBorder 的主要属性包括:

  • borderWidth: 边框的宽度。
  • borderColor: 边框的颜色。
  • borderStyle: 边框的样式(如 solid, dashed, dotted 等)。

你可以根据需要调整这些属性来实现不同的边框效果。

请确保你使用的是 fancy_border 插件的最新版本,并根据实际情况调整代码。如果插件有更新或者提供了更多的配置选项,请参考最新的文档或插件仓库。

回到顶部