文字装飾

入力したテキストの文字装飾が可能な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
  }
);