css_filter 1.0.3

SDKflutter
Platformandroidioswindowslinuxmacosweb

Apply various filter effects in a CSS-like way in flutter, can be used on any widget, not just images, support custom filters and control filter intensity.

CSS Filter for Flutter

在 Flutter 上使用 CSS 滤镜效果。

Version Build Status

IFstruct parser 支持从 iofod 可视化编辑的项目生成 Flutter 代码。我们将其滤镜模块代码分离,并添加了许多预设效果,形成了现在的工具库,方便了所有 Flutter 项目使用 Web 的优秀设计:CSS 滤镜

特色

  • 简洁高效的 API
  • 支持多滤镜叠加
  • 丰富的预设
  • 全平台支持
  • 自定义效果
  • Null-safety

起步

导入依赖后,可以通过CSSFilter使用基本滤镜。

import 'package:css_filter/css_filter.dart';

CSSFilter.contrast(child: const Text('foo'), value: 1.2);

支持的基础滤镜如下:

  • contrast()
  • grayscale()
  • sepia()
  • hueRotate()
  • brightness()
  • saturate()
  • invert()
  • blur()
  • opacity()

你可以像使用 CSS 滤镜一样在 Flutter 中组合叠加使用这些滤镜。将 CSSFilter.applyCSSFilterMatrix() 结合使用。如:

CSSFilter.apply(
  child: const Text('bar'),
  value: CSSFilterMatrix().contrast(1.2).sepia(0.8).hueRotate(90.0).invert(0.9).opacity(0.9)
);

注意: 链式调用的顺序代表了滤镜的应用顺序,应用顺序会影响最终的结果。

使用预设

CSSgram 项目十分牛逼,给 CSS 世界带来了类 Instagram 滤镜,instagram.css 对其补充了更多滤镜效果。我们将这两个库结合起来封装了一系列预设,可以通过 CSSFilterPresets 调用。

支持的预设效果和预览:

预设预览示例代码
originoriginCSSFilterPresets.origin(child: Image(...))
ins1977ins1977CSSFilterPresets.ins1977(child: Image(...))
ins1977V2ins1977V2CSSFilterPresets.ins1977V2(child: Image(...))
insAdeninsAdenCSSFilterPresets.insAden(child: Image(...))
insAmaroinsAmaroCSSFilterPresets.insAmaro(child: Image(...))
insAshbyinsAshbyCSSFilterPresets.insAshby(child: Image(...))
insBrannaninsBrannanCSSFilterPresets.insBrannan(child: Image(...))
insBrooklyninsBrooklynCSSFilterPresets.insBrooklyn(child: Image(...))
insClarendoninsClarendonCSSFilterPresets.insClarendon(child: Image(...))
insDogpatchinsDogpatchCSSFilterPresets.insDogpatch(child: Image(...))
insEarlybirdinsEarlybirdCSSFilterPresets.insEarlybird(child: Image(...))
insGinghaminsGinghamCSSFilterPresets.insGingham(child: Image(...))
insHelenainsHelenaCSSFilterPresets.insHelena(child: Image(...))
insHudsoninsHudsonCSSFilterPresets.insHudson(child: Image(...))
insInkwellinsInkwellCSSFilterPresets.insInkwell(child: Image(...))
insInkwellV2insInkwellV2CSSFilterPresets.insInkwellV2(child: Image(...))
insJunoinsJunoCSSFilterPresets.insJuno(child: Image(...))
insKelvininsKelvinCSSFilterPresets.insKelvin(child: Image(...))
insLarkinsLarkCSSFilterPresets.insLark(child: Image(...))
insLofiinsLofiCSSFilterPresets.insLofi(child: Image(...))
insLudwiginsLudwigCSSFilterPresets.insLudwig(child: Image(...))
insMaveninsMavenCSSFilterPresets.insMaven(child: Image(...))
insMayfairinsMayfairCSSFilterPresets.insMayfair(child: Image(...))
insMooninsMoonCSSFilterPresets.insMoon(child: Image(...))
insMoonV2insMoonV2CSSFilterPresets.insMoonV2(child: Image(...))
insNashvilleinsNashvilleCSSFilterPresets.insNashville(child: Image(...))
insNashvilleV2insNashvilleV2CSSFilterPresets.insNashvilleV2(child: Image(...))
insPerpetuainsPerpetuaCSSFilterPresets.insPerpetua(child: Image(...))
insPoprocketinsPoprocketCSSFilterPresets.insPoprocket(child: Image(...))
insReyesinsReyesCSSFilterPresets.insReyes(child: Image(...))
insRiseinsRiseCSSFilterPresets.insRise(child: Image(...))
insSierrainsSierraCSSFilterPresets.insSierra(child: Image(...))
insSkylineinsSkylineCSSFilterPresets.insSkyline(child: Image(...))
insSlumberinsSlumberCSSFilterPresets.insSlumber(child: Image(...))
insStinsoninsStinsonCSSFilterPresets.insStinson(child: Image(...))
insSutroinsSutroCSSFilterPresets.insSutro(child: Image(...))
insToasterinsToasterCSSFilterPresets.insToaster(child: Image(...))
insToasterV2insToasterV2CSSFilterPresets.insToasterV2(child: Image(...))
insValenciainsValenciaCSSFilterPresets.insValencia(child: Image(...))
insVesperinsVesperCSSFilterPresets.insVesper(child: Image(...))
insWaldeninsWaldenCSSFilterPresets.insWalden(child: Image(...))
insWaldenV2insWaldenV2CSSFilterPresets.insWaldenV2(child: Image(...))
insWillowinsWillowCSSFilterPresets.insWillow(child: Image(...))
insXpro2insXpro2CSSFilterPresets.insXpro2(child: Image(...))

CSSFilter 类似,我们为 CSSFilterPresets 提供了 apply 方法来统一调用预设,apply 还支持设置滤镜的强度。比如:

/// 可以将 value 参数替换为任何支持的效果。
CSSFilterPresets.apply(
  child: YourWidget,
  value: CSSFilterPresets.insNashville, 
  strength: 0.7
);

自定义滤镜预设

CSSFilter提供了最基本的滤镜,CSSFilterPresets收集了常用的滤镜组合作为预设,也就是说你也可以根据基本滤镜来自定义滤镜预设。


customPreset({ required Widget child }) {
  return CSSFilter.apply(
    child: child, 
    value: CSSFilterMatrix().sepia(0.2).saturate(1.4)
  );
}

/// 利用 CSSFilterPresets 设置效果的强度。
CSSFilterPresets.apply(
  child: YourWidget,
  value: customPreset,
  strength: 0.9
);

/// 也支持直接调用。
customPreset(child: YourWidget);

更多示例

更多使用示例,请查看 example