Flutter图像处理插件figmage的使用

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

Flutter图像处理插件figmage的使用

介绍

FigMage 是一个用于从 Figma 设计系统生成 Flutter 包的命令行工具。它使用 Figma API 来获取已发布的样式和变量,并支持完整的模式支持。

Example Screenshot of a Variables Section

文档

FigMage 配套了详细的文档,你可以在这里找到它们:FigMage 文档

如果你是第一次使用 FigMage,建议你查看我们的 入门指南

特性

  • ✨ 从 Figma 设计系统生成 Flutter 包
  • 🎨 支持多种类型的令牌:
    • 🌈 颜色 样式和变量
    • 🖋️ 字体 样式(可选 google_fonts 支持!)
    • 🔢 数字 变量,可以生成为填充和分隔符
  • 🌗 模式 支持:为不同的主题(如深色/浅色)生成不同的令牌
  • 📦 生成:所有令牌都集中在方便的包中。从你的应用依赖它,并在必要时更新它!
  • 🤝 无缝 集成到 material.dartTheme 中:生成的类是 ThemeExtension,因此可以轻松集成到你的应用主题中!
  • 🎯 使用 BuildContext 扩展进行快速访问。
  • 🔮 便携:FigMage 是一个纯 Dart 包,因此可以轻松集成到你的 CI/CD 管道中,自动获取项目的最新令牌!

示例代码

生成颜色代码

假设你在 Figma 中有一个颜色变量部分,如上图所示。通过运行 figmage forge 命令,你可以将其转换为以下 Dart 代码:

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

@immutable
class ColorsMyCollection extends ThemeExtension<ColorsMyCollection> {
  const ColorsMyCollection({
    required this.background,
    required this.primary,
  });

  const ColorsMyCollection.dark()
      : background = const Color(0xff665555),
        primary = const Color(0xffef86a6);

  const ColorsMyCollection.light()
      : background = const Color(0xfffff4f4),
        primary = const Color(0xff7d4052);

  final Color background;

  final Color primary;

  [@override](/user/override)
  ColorsMyCollection copyWith([
    Color? background,
    Color? primary,
  ]) {
    /// ...
  }

  [@override](/user/override)
  ColorsMyCollection lerp(
    ColorsMyCollection other,
    double t,
  ) {
    /// ...
  }
}

extension ColorsMyCollectionBuildContextX on BuildContext {
  ColorsMyCollection get colorsMyCollection =>
      Theme.of(this).extension<ColorsMyCollection>()!;
}

在应用中使用生成的颜色代码

你可以在 Flutter 应用中像这样使用生成的颜色代码:

[@override](/user/override)
Widget build(BuildContext context, WidgetRef ref) {
  final colors = context.colorsDesignSystem;
  final typography = context.typographyDesignSystem;

  return Container(
    color: colors.primary,
    child: Text('Hello world!', style: typography.body1),
  );
  // ...
}

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

1 回复

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


当然,以下是如何在Flutter应用中使用figmage插件进行图像处理的一个简单示例。figmage是一个用于图像处理和增强的Flutter插件,它提供了一系列的功能,比如滤镜、裁剪、旋转等。

首先,确保你已经在pubspec.yaml文件中添加了figmage依赖:

dependencies:
  flutter:
    sdk: flutter
  figmage: ^最新版本号 # 请替换为当前最新版本号

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

接下来是一个简单的示例,展示如何使用figmage对图像应用滤镜。

示例代码

import 'package:flutter/material.dart';
import 'package:figmage/figmage.dart';
import 'dart:ui' as ui;
import 'dart:typed_data';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ImageProcessingScreen(),
    );
  }
}

class ImageProcessingScreen extends StatefulWidget {
  @override
  _ImageProcessingScreenState createState() => _ImageProcessingScreenState();
}

class _ImageProcessingScreenState extends State<ImageProcessingScreen> {
  Uint8List? imageBytes;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Figmage Image Processing'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            imageBytes == null
                ? Text('No image loaded.')
                : Image.memory(imageBytes!),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _loadImage,
              child: Text('Load Image'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _applyFilter,
              child: Text('Apply Filter'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _loadImage() async {
    // 这里应该加载一个本地或网络图片,为了简单起见,我们使用一个占位符图片
    final ByteData bytes = await rootBundle.load('assets/sample_image.jpg'); // 确保在pubspec.yaml中声明了assets
    setState(() {
      imageBytes = bytes.buffer.asUint8List();
    });
  }

  Future<void> _applyFilter() async {
    if (imageBytes == null) return;

    // 使用figmage加载图像
    final FigmageImage figmageImage = FigmageImage.fromUint8List(imageBytes!);

    // 应用一个简单的滤镜,例如灰度滤镜
    final FigmageImage processedImage = await figmageImage.applyFilter(
      FigmageFilter.grayscale(),
    );

    // 获取处理后的图像数据
    final Uint8List processedImageBytes = processedImage.toUint8List();

    // 更新UI
    setState(() {
      imageBytes = processedImageBytes;
    });
  }
}

注意事项

  1. 图像资源:在上面的代码中,我使用了rootBundle.load('assets/sample_image.jpg')来加载一个本地图片。你需要确保在pubspec.yaml中声明了这个图片资源:
flutter:
  assets:
    - assets/sample_image.jpg
  1. 权限:如果你的应用需要从设备存储加载图片,请确保在AndroidManifest.xmlInfo.plist中声明了必要的权限。

  2. 依赖版本:请确保你使用的是figmage的最新版本,并且检查其文档以获取最新的API和功能。

这个示例展示了如何使用figmage插件加载图像并应用一个简单的灰度滤镜。figmage提供了许多其他的图像处理功能,你可以参考其文档进行更深入的探索和使用。

回到顶部