figma_theme_generator 0.1.8
figma_theme_generator: ^0.1.8 copied to clipboard
Generate themes from Figma styles.
figma_theme_generator #
Generate a set of Flutter classes from the style library (colors, borders, corner radii, gradients, effects, text styles) of a Figma document.
Install #
To use [figma_theme_generator], you will need your typical [build_runner]/code-generator setup.
First, install [build_runner] and [figma_theme] by adding them to your pubspec.yaml file:
# pubspec.yaml
dependencies:
figma_theme:
dev_dependencies:
build_runner:
figma_theme_generator:
This installs three packages:
- build_runner, the tool to run code-generators
- figma_theme, a package containing annotations for [figma_theme_generator]
- figma_theme_generator, the code generator.
Usage #
Generation #
First, you should have a Figma document that contains local styles.

You need two things to link the Figma document to your dart code :
- Figma API Token :
- Login to your
Figma account. - Head to the
Account Settingsfrom the top-left menu inside Figma. - Find the
Personal Access Tokenssection. - Click
Create new token. - A token will be generated. This will be your only chance to copy the token, so make sure you keep a copy of this in a secure place.
- Login to your
- File Key : Extract it from the link of your document
Sharebutton in Figma.

https://www.figma.com/file/**2n1EmQ6tqjbeydW2w2odZF**/figma_theme_generator?node-id=0%3A1
You then can define a class decorated with a @FigmaTheme annotation with the previous arguments.
You can for example define an InheritedWidget :
import 'package:example/credentials.dart';
import 'package:figma_theme/figma_theme.dart';
import 'package:flutter/widgets.dart';
part 'theme.g.dart';
@FigmaTheme(
1, // Increment this number each time an update is needed
fileKey: '<file_key>',
apiToken: '<api_token>',
)
class ExampleTheme extends InheritedWidget {
final ExampleThemeData data;
ExampleTheme({
Key key,
@required Widget child,
@required this.data,
}) : super(
key: key,
child: child,
);
static ExampleThemeData of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<ExampleTheme>()?.data ??
ExampleThemeData.fallback();
}
@override
bool updateShouldNotify(ExampleTheme oldWidget) {
return oldWidget.data != data;
}
}
To generate the theme.g.dart containing the ExampleThemeData data class, run the build runner command :
> flutter pub run build_runner build
And now you're ready to use your theme!
ExampleTheme(
data: ExampleThemeData.fallback(),
child: MaterialApp(
/// ...
)
)
final exampleTheme = ExampleTheme.of(context);

Regeneration #
Because of the caching system of the build_runner, it can't detect if there is a change on the distant document and it can't know if a new generation is needed.
The first version parameter of the @FigmaTheme annotation solves this issue.
Each time you want to trigger a new generation, simply increment that version number and call the build runner again.