Flutter图像模糊处理插件blur的使用

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

Flutter图像模糊处理插件blur的使用

Flutter中,blur插件提供了一种简单而有效的方法来为你的应用添加模糊效果。无论是简单的文本、图片还是复杂的布局,blur都能帮助你实现类似iOS毛玻璃的效果,提升用户体验。

开始使用

添加依赖

在开始之前,你需要将blur包添加到项目的pubspec.yaml文件中作为依赖项:

dependencies:
  blur: ^4.0.0

然后运行flutter pub get以下载并安装该包。

导入库

接下来,在需要使用模糊效果的Dart文件顶部导入blur库:

import 'package:blur/blur.dart';

使用示例

下面是一个完整的示例代码,展示了如何在Flutter应用中使用blur插件创建不同类型的模糊效果。此示例包括了基本的模糊、图片模糊以及带有叠加层的模糊效果。

完整示例代码

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Blur Wrapper widget',
      theme: ThemeData(
        primaryColor: Colors.blueAccent,
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const MyHomePage(title: 'Blur Wrapper widget'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  double blurValue = 0;

  @override
  Widget build(BuildContext context) {
    var theme = Theme.of(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            Row(
              children: [
                Expanded(
                  child: Image.asset('assets/cat.png').blurred(
                    blur: blurValue,
                    blurColor: theme.primaryColor,
                    borderRadius: const BorderRadius.horizontal(left: Radius.circular(20)),
                  ),
                ),
                const SizedBox(width: 20.0),
                Expanded(
                  child: Image.asset('assets/cat.png').blurred(
                    colorOpacity: 0.2,
                    borderRadius: const BorderRadius.horizontal(
                      right: Radius.circular(20),
                    ),
                    blur: blurValue,
                    overlay: Text(
                      'Cat',
                      style: theme.textTheme.displayMedium?.copyWith(
                        color: theme.scaffoldBackgroundColor,
                      ),
                    ),
                  ),
                ),
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                Stack(
                  alignment: Alignment.center,
                  children: [
                    Image.asset(
                      'assets/cat.png',
                      scale: 3.5,
                    ),
                    Column(
                      children: [
                        const Icon(Icons.image),
                        Text(
                          'Frost',
                          style: theme.textTheme.headlineMedium,
                        ),
                      ],
                    ).frosted(
                      blur: blurValue,
                      borderRadius: BorderRadius.circular(20),
                      padding: const EdgeInsets.all(8),
                    )
                  ],
                ),
                Blur(
                  blur: blurValue,
                  blurColor: theme.primaryColor,
                  child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Text(
                      'Blur',
                      style: theme.textTheme.displaySmall,
                    ),
                  ),
                ),
              ],
            ),
            Stack(
              alignment: Alignment.center,
              children: [
                Image.asset(
                  'assets/cat.png',
                  width: MediaQuery.of(context).size.width - 40,
                  height: 200,
                  fit: BoxFit.fill,
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Text(
                      'Frost text',
                      style: theme.textTheme.displaySmall,
                    ).frosted(
                      blur: blurValue,
                      padding: const EdgeInsets.all(8),
                    ),
                    const SizedBox(width: 20),
                    const Icon(Icons.image).frosted(
                      padding: const EdgeInsets.all(8),
                      blur: blurValue,
                    ),
                  ],
                ),
              ],
            ),
            Slider(
              value: blurValue,
              max: 20,
              onChanged: (double value) {
                setState(() {
                  blurValue = value;
                });
              },
            )
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个包含多个部分的应用界面:

  • 第一行:两个扩展的图像,左边是简单的模糊效果,右边则是带有文本覆盖的模糊。
  • 第二行:一个居中的图标和文字,使用了“霜”(Frost)效果,并旁边有一个普通文本的模糊框。
  • 第三部分:一张全屏宽度的图片上覆盖着模糊的文字和图标。
  • 最后:一个滑块用来动态调整所有模糊元素的强度。

通过这个例子,你可以看到blur插件是多么容易集成到你的项目中,并且能够快速地为你的应用添加美观且实用的视觉效果。


更多关于Flutter图像模糊处理插件blur的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter图像模糊处理插件blur的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,我可以为你提供一个关于如何在Flutter中使用blur插件来进行图像模糊处理的代码示例。blur插件是一个流行的Flutter插件,用于对图像进行模糊处理。以下是一个简单的示例,展示如何在Flutter项目中使用该插件。

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

dependencies:
  flutter:
    sdk: flutter
  blur: ^3.0.0  # 请检查最新版本号并替换

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下方式使用blur插件来对图像进行模糊处理:

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

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

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

class ImageBlurExample extends StatefulWidget {
  @override
  _ImageBlurExampleState createState() => _ImageBlurExampleState();
}

class _ImageBlurExampleState extends State<ImageBlurExample> {
  double _blurSigma = 0.0; // 初始模糊值

  void _increaseBlur() {
    setState(() {
      _blurSigma += 2.0; // 每次增加2.0的模糊值
    });
  }

  void _decreaseBlur() {
    setState(() {
      _blurSigma = _blurSigma > 0 ? _blurSigma - 2.0 : 0.0; // 减少模糊值,但不小于0
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Blur(
          sigmaX: _blurSigma,
          sigmaY: _blurSigma,
          child: Image.network(
            'https://via.placeholder.com/600x400', // 示例图片URL
            fit: BoxFit.cover,
          ),
        ),
        SizedBox(height: 20),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _increaseBlur,
              child: Text('Increase Blur'),
            ),
            SizedBox(width: 20),
            ElevatedButton(
              onPressed: _decreaseBlur,
              child: Text('Decrease Blur'),
            ),
          ],
        ),
      ],
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个图像和一个模糊处理效果。通过点击按钮,可以增加或减少图像的模糊程度。

  • Blur 组件用于应用模糊效果,其中 sigmaXsigmaY 参数控制模糊的程度。
  • _increaseBlur_decreaseBlur 方法用于调整模糊程度。
  • Image.network 用于从网络加载图像。

请注意,你需要确保你有一个可以访问的网络图像URL,或者你可以使用本地图像并相应地调整代码。

希望这个示例对你有所帮助!

回到顶部