123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import 'package:flutter/material.dart';
- import 'package:flutter_svg/flutter_svg.dart';
- /// The class for FlowySvgData that the code generator will implement
- class FlowySvgData {
- /// The svg data
- const FlowySvgData(
- this.path,
- );
- /// The path to the svg data in appflowy assets/images
- final String path;
- }
- /// For icon that needs to change color when it is on hovered
- ///
- /// Get the hover color from ThemeData
- class FlowySvg extends StatelessWidget {
- /// Construct a FlowySvg Widget
- const FlowySvg(
- this.svg, {
- super.key,
- this.size,
- this.color,
- this.blendMode = BlendMode.srcIn,
- });
- /// The data for the flowy svg. Will be generated by the generator in this
- /// package within bin/flowy_svg.dart
- final FlowySvgData svg;
- /// The size of the svg
- final Size? size;
- /// The color of the svg.
- ///
- /// This property will not be applied to the underlying svg widget if the
- /// blend mode is null, but the blend mode defaults to [BlendMode.srcIn]
- /// if it is not explicitly set to null.
- final Color? color;
- /// The blend mode applied to the svg.
- ///
- /// If the blend mode is null then the icon color will not be applied.
- /// Set both the icon color and blendMode in order to apply color to the
- /// svg widget.
- final BlendMode? blendMode;
- @override
- Widget build(BuildContext context) {
- final iconColor = color ?? Theme.of(context).iconTheme.color;
- return SvgPicture.asset(
- _normalized(),
- width: size?.width,
- height: size?.height,
- colorFilter: iconColor != null && blendMode != null
- ? ColorFilter.mode(
- iconColor,
- blendMode!,
- )
- : null,
- );
- }
- /// If the SVG's path does not start with `assets/`, it is
- /// normalized and directed to `assets/images/`
- ///
- /// If the SVG does not end with `.svg`, then we append the file extension
- ///
- String _normalized() {
- var path = svg.path;
- if (!path.toLowerCase().startsWith('assets/')) {
- path = 'assets/images/$path';
- }
- if (!path.toLowerCase().endsWith('.svg')) {
- path = '$path.svg';
- }
- return path;
- }
- }
|