文字装飾
入力したテキストの文字装飾が可能なhtml_editor_enhauncedパッケージと、
文字装飾ありのテキストデータの表示に使用するflutter_htmlパッケージについて紹介します。
1.html_editor_enhaunced
インプットフィールドに入力したテキストの文字装飾が可能なFlutterパッケージ。
インプットフィールド(HtmlEditor)と上部のツールバー(ToolbarWidget)に分けて設定します。
HtmlEditor
装飾機能付きインプットフィールド

- controller
ToolbarWidgetと同じHtmlEditorControllerを指定します。 - htmlEditorOptions
最大文字数、ヒントテキスト等、インプットフィールドの基本設定を行います。
使用例 – htmlEditorOptions:
htmlEditorOptions: HtmlEditorOptions( characterLimit: 3000, hint: 'Your text here...', shouldEnsureVisible: true, ),
- htmlToolbarOptions
ToolbarWidgetを使用しない場合は、ここでツールバーの設定を行います。
ToolbarWidgetを使用する場合は下記の設定を行います。
設定例 – toolbarPosition:
htmlToolbarOptions: const HtmlToolbarOptions( toolbarPosition: ToolbarPosition.custom, ),
- otherOptions
高さや装飾等、インプットフィールドの見た目部分の設定を行います。設定例:otherOptions
otherOptions: OtherOptions( height: 450, ),
- callbacks
文字入力時やフォーカス時のコールバックを設定します。
インプットフィールド下部のスライダーは、デフォルトで表示されるようになっています。
下記の設定を行うことで非表示にできます。
callbacks: Callbacks( onInit: () => controller.setFullScreen(), ),
- plugins
インプットフィールドで使用するプラグインを設定する。設定例:SummernoteAtMention(メンション機能)
plugins: [
SummernoteAtMention(
//returns the dropdown items on mobile
getSuggestionsMobile: (String value) {
// @を入力した際に表示するメンションリスト
List<String> mentions = ['user1', 'user2', 'user3'];
return mentions
.where((element) => element.contains(value))
.toList();
},
onSelect: (String value) {
// メンションリストを選択した際のコールバック
print(value);
}
),
]
ToolbarWidget
文字装飾テキストフィールドのツールバー部分

- controller
HtmlEditorと同じHtmlEditorControllerを指定します。 - htmlToolbarOptions
ツールバーの高さや表示位置、装飾ボタンの表示設定を行います。
デフォルトだと表示設定になっている装飾ボタンが多く、
defaultToolbarButtonsで表示しない為の設定が必要となります。
設定例:htmlToolbarOptions
defaultToolbarButtons: [
FontSettingButtons(fontName: false, fontSizeUnit: false),
ColorButtons(highlightColor: false),
FontButtons(
bold: true,
italic: false,
underline: true,
clearAll: false,
strikethrough: false,
superscript: false,
subscript: false,
),
],

2.flutter_html
HTMLコンテンツをFlutterWidgetとして表示できるパッケージ。
html_editor_enhauncedパッケージで作成した文字装飾ありのテキストを、
FlutterWidgetとして表示することができます。

基本的にHtmlウェジェットのdataにhtmlデータを指定するだけで使用できます。
使用例 – data:
Widget html = Html(
data: """<div>
<h1>Demo Page</h1>
</div>""",
);
選択可能なテキストの場合は、Htmlウェジェットの代わりに、SelectableHtmlウェジェットを使用します。
リンクがある場合は、onLinkTapにリンクがタップされたときにウィジェットが
実行する動作を定義します。
使用例 – onLinkTap:
data: """<p>
Linking to <a href='https://github.com'>websites</a> has never been easier.
</p>""",
onLinkTap: (String? url, RenderContext context, Map<String, String> attributes, dom.Element? element) {
//open URL in webview, or launch URL in browser, or any other logic here
}
);