flutter_html_class_to_css 0.2.0 copy "flutter_html_class_to_css: ^0.2.0" to clipboard
flutter_html_class_to_css: ^0.2.0 copied to clipboard

Plumbing for flutter_html extensions that translate an element's class attribute into inline CSS.

example/example.md

Example #

This package is the plumbing under the class-to-CSS extensions in this family. It carries no utility-class vocabulary of its own. You write a resolver that maps class names to inline CSS, and you expose it as an extension.

import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html_class_to_css/flutter_html_class_to_css.dart';

class HighlightResolver implements ClassListCssResolver {
  @override
  bool matches(List<String> orderedClasses) =>
      orderedClasses.contains('highlight');

  @override
  String resolve(List<String> orderedClasses) =>
      'background-color: #ffff00; color: #000000';
}

class HighlightExtension extends ClassToInlineCssExtension {
  const HighlightExtension();

  @override
  List<ClassListCssResolver> get resolvers => [HighlightResolver()];
}

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

  @override
  Widget build(BuildContext context) => MaterialApp(
        home: Scaffold(
          body: Html(
            data: '''
              <p>Plain text, untouched.</p>
              <p class="highlight">Highlighted.</p>
              <p class="highlight" style="padding: 8px;">Padded and highlighted.</p>
            ''',
            extensions: const [HighlightExtension()],
          ),
        ),
      );
}

void main() => runApp(const ExampleApp());

Two resolvers on one element #

resolvers is a list. Every resolver that matches the element contributes its declarations, in list order. The later resolver wins where two resolvers write the same property.

class MutedResolver implements ClassListCssResolver {
  @override
  bool matches(List<String> orderedClasses) => orderedClasses.contains('muted');

  @override
  String resolve(List<String> orderedClasses) => 'color: #6c757d';
}

class CardExtension extends ClassToInlineCssExtension {
  const CardExtension();

  @override
  List<ClassListCssResolver> get resolvers => [
        HighlightResolver(),
        MutedResolver(), // on class="highlight muted", color: #6c757d wins
      ];
}
0
likes
160
points
62
downloads

Documentation

API reference

Publisher

verified publisherchaosworld.cc

Weekly Downloads

Plumbing for flutter_html extensions that translate an element's class attribute into inline CSS.

Repository (GitLab)
View/report issues
Contributing

Topics

#flutter-html #css #html #extension #utility-classes

License

MPL-2.0 (license)

Dependencies

flutter, flutter_html, html

More

Packages that depend on flutter_html_class_to_css