| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | import 'package:flutter_quill/flutter_quill.dart';import 'package:flutter_quill/models/documents/style.dart';import 'package:flutter/material.dart';import 'package:app_flowy/generated/locale_keys.g.dart';import 'package:easy_localization/easy_localization.dart';import 'toolbar_icon_button.dart';class FlowyHeaderStyleButton extends StatefulWidget {  const FlowyHeaderStyleButton({    required this.controller,    this.iconSize = defaultIconSize,    Key? key,  }) : super(key: key);  final QuillController controller;  final double iconSize;  @override  _FlowyHeaderStyleButtonState createState() => _FlowyHeaderStyleButtonState();}class _FlowyHeaderStyleButtonState extends State<FlowyHeaderStyleButton> {  Attribute? _value;  Style get _selectionStyle => widget.controller.getSelectionStyle();  @override  void initState() {    super.initState();    setState(() {      _value = _selectionStyle.attributes[Attribute.header.key] ?? Attribute.header;    });    widget.controller.addListener(_didChangeEditingValue);  }  @override  Widget build(BuildContext context) {    final _valueToText = <Attribute, String>{      Attribute.h1: 'H1',      Attribute.h2: 'H2',      Attribute.h3: 'H3',    };    final _valueAttribute = <Attribute>[Attribute.h1, Attribute.h2, Attribute.h3];    final _valueString = <String>['H1', 'H2', 'H3'];    final _attributeImageName = <String>['editor/H1', 'editor/H2', 'editor/H3'];    return Row(      mainAxisSize: MainAxisSize.min,      children: List.generate(3, (index) {        // final child =        //     _valueToText[_value] == _valueString[index] ? svg('editor/H1', color: Colors.white) : svg('editor/H1');        final headerTitle = "${LocaleKeys.toolbar_header.tr()} ${index + 1}";        final _isToggled = _valueToText[_value] == _valueString[index];        return ToolbarIconButton(          onPressed: () {            if (_isToggled) {              widget.controller.formatSelection(Attribute.header);            } else {              widget.controller.formatSelection(_valueAttribute[index]);            }          },          width: widget.iconSize * kIconButtonFactor,          iconName: _attributeImageName[index],          isToggled: _isToggled,          tooltipText: headerTitle,        );      }),    );  }  void _didChangeEditingValue() {    setState(() {      _value = _selectionStyle.attributes[Attribute.header.key] ?? Attribute.header;    });  }  @override  void didUpdateWidget(covariant FlowyHeaderStyleButton oldWidget) {    super.didUpdateWidget(oldWidget);    if (oldWidget.controller != widget.controller) {      oldWidget.controller.removeListener(_didChangeEditingValue);      widget.controller.addListener(_didChangeEditingValue);      _value = _selectionStyle.attributes[Attribute.header.key] ?? Attribute.header;    }  }  @override  void dispose() {    widget.controller.removeListener(_didChangeEditingValue);    super.dispose();  }}
 |