Flutter遮罩视图插件flutter_mask_view的使用

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

Flutter遮罩视图插件flutter_mask_view的使用

flutter_mask_view 是一个用于在Flutter应用中显示遮罩视图的插件。它可以用来创建引导新用户的功能,或者显示带有进度条的图像。

特性

  • 为新用户显示高亮遮罩。
  • 创建图像进度条。

使用方法

导入包

首先需要导入 flutter_mask_view 包:

import 'package:flutter_mask_view/flutter_mask_view.dart';

显示高亮遮罩

下面是一个简单的示例,展示了如何为新用户显示高亮遮罩:

Scaffold(
  body: Stack(
    children: [
      // 仅用于演示背景
      Image.asset('path_to_your_image'), 
      
      // 配置
      HeightLightMaskView(
        // 设置视图大小
        maskViewSize: Size(720, 1080),
        // 设置遮罩颜色
        backgroundColor: Colors.blue.withOpacity(0.6),
        // 设置高亮颜色
        color: Colors.transparent,
        // 设置高亮形状
        rRect: RRect.fromRectAndRadius(
          Rect.fromLTWH(100, 100, 50, 50),
          Radius.circular(50),
        ),
      )
    ],
  ),
)

更多自定义选项:

HeightLightMaskView(
  maskViewSize: Size(720, 1080),
  backgroundColor: Colors.blue.withOpacity(0.6),
  color: Colors.transparent,
  // 自定义高亮形状
  pathBuilder: (Size size) {
    return Path()
      ..moveTo(100, 100)
      ..lineTo(50, 150)
      ..lineTo(150, 150);
  },
  // 在高亮视图上绘制内容
  drawAfter: (Canvas canvas, Size size) {
    Paint paint = Paint()
      ..color = Colors.red
      ..strokeWidth = 15
      ..style = PaintingStyle.stroke;
    canvas.drawCircle(Offset(150, 150), 50, paint);
  },
  // 是否重绘,默认返回false
  rePaintDelegate: (CustomPainter oldDelegate){
    return false;
  },
)

创建图像进度条

下面是一个创建图像进度条的例子:

ImageProgressMaskView(
  size: Size(360, 840),
  // 背景图片路径
  backgroundRes: 'images/bg.png',
  // 当前进度
  progress: 0.5,
  // 遮罩形状,内置:
  // PathProviders.sRecPathProvider:波浪进度条
  // PathProviders.createWaveProvider:矩形裁剪进度条
  
  // 可以创建更多形状
  pathProvider: PathProviders.createWaveProvider(60, 100),
)

内置形状示例

  • 使用 PathProviders.sRecPathProvider 的效果:

sRecPathProvider

  • 使用 PathProviders.createWaveProvider 的效果:

createWaveProvider

动画示例

以下代码展示了如何结合动画控制器来动态更新进度条:

class MaskTestApp extends StatefulWidget {
  [@override](/user/override)
  _MaskTestAppState createState() => _MaskTestAppState();
}

class _MaskTestAppState extends State<MaskTestApp> with SingleTickerProviderStateMixin {
  late AnimationController _controller;

  [@override](/user/override)
  void initState() {
    _controller = AnimationController(duration: Duration(seconds: 5), vsync: this);
    _controller.forward();
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: Center(
        child: AnimatedBuilder(
          animation: _controller,
          builder: (context, child) {
            return Stack(
              alignment: Alignment.center,
              children: [
                ImageProgressMaskView(
                  size: Size(300, 300),
                  backgroundRes: 'images/image.png',
                  progress: _controller.value,
                  pathProvider: PathProviders.createWaveProvider(60, 40),
                  rePaintDelegate: (_) => true,
                ),
                Text(
                  '${(_controller.value * 100).toInt()} %',
                  style: TextStyle(
                    color: Colors.red,
                    fontWeight: FontWeight.bold,
                    fontSize: 30,
                  ),
                )
              ],
            );
          },
        ),
      ),
    );
  }
}

更多关于Flutter遮罩视图插件flutter_mask_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter遮罩视图插件flutter_mask_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter中使用flutter_mask_view插件的一个代码示例。这个插件允许你创建带有遮罩效果的视图,非常适合用于创建复杂的UI形状。

首先,你需要在你的pubspec.yaml文件中添加这个插件的依赖项:

dependencies:
  flutter:
    sdk: flutter
  flutter_mask_view: ^latest_version  # 请确保替换为最新版本号

然后,运行flutter pub get来获取依赖项。

以下是一个完整的示例,展示了如何使用flutter_mask_view来创建一个带有遮罩效果的视图:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Mask View Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              SizedBox(height: 50),
              MaskViewExample(),
            ],
          ),
        ),
      ),
    );
  }
}

class MaskViewExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack(
      alignment: Alignment.center,
      children: <Widget>[
        // 背景图像或颜色
        Container(
          width: 300,
          height: 300,
          decoration: BoxDecoration(
            color: Colors.grey.withOpacity(0.5),
          ),
        ),
        // 遮罩视图
        MaskView(
          mask: Container(
            width: 300,
            height: 300,
            decoration: BoxDecoration(
              shape: BoxShape.circle,
              color: Colors.white.withOpacity(0.0), // 透明色,仅用于形状
            ),
          ),
          child: Container(
            decoration: BoxDecoration(
              color: Colors.blue,
              borderRadius: BorderRadius.circular(150), // 圆形边缘
            ),
            child: Center(
              child: Text(
                'Masked View',
                style: TextStyle(color: Colors.white, fontSize: 24),
              ),
            ),
          ),
        ),
      ],
    );
  }
}

在这个示例中:

  1. MaskView被用来创建一个遮罩视图。mask属性定义了一个形状(在这个例子中是一个圆形),而child属性定义了实际显示的内容(在这个例子中是一个带有蓝色背景和白色文本的容器)。

  2. StackContainer被用来将背景、遮罩和显示内容叠加在一起。

  3. 你可以根据需要调整maskchild的属性和样式。

这个示例展示了如何使用flutter_mask_view插件来创建一个基本的遮罩效果。根据你的具体需求,你可以进一步自定义和扩展这个示例。

回到顶部