build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(BuildStep buildStep) async {
  final configFile =
      (await buildStep.findAssets(Glob('lib/tokenbuilder.yaml')).toList())
          .first;
  final configString = await buildStep.readAsString(configFile);
  final yaml = loadYaml(configString) as YamlMap;
  final config = BuilderConfig.fromYaml(yaml);
  final tokenFilePath = config.tokenFilePath;

  final tokenAsset = await buildStep.findAssets(Glob(tokenFilePath)).toList();
  final string = await buildStep.readAsString(tokenAsset.first);
  final token = jsonDecode(string);

  final processedToken = prepareTokens(token);
  final processedDefaultSet = processedToken[config.defaultSetName];

  await buildStep.writeAsString(
    AssetId(buildStep.inputId.package, 'lib/tokens.dart'),
    '''// GENERATED CODE - DO NOT MODIFY BY HAND

import 'dart:ui';

import 'package:flutter/material.dart';

final attributes = ${buildAttributeMap(processedDefaultSet, config)};

abstract class GeneratedThemeData {
ThemeData get themeData;
}

class BrightnessAdapted<T> {
const BrightnessAdapted({required this.light, required this.dark});

final T light;
final T dark;
}

${buildTokenSet(processedToken, config: config)}

${ef.buildExtensions(processedToken, config: config)}

${buildContextExtension(processedToken, config: config)}\n''',
  );
}