ruby_html_plus 0.1.1 copy "ruby_html_plus: ^0.1.1" to clipboard
ruby_html_plus: ^0.1.1 copied to clipboard

A Flutter widget for customizable display of ruby annotation syntax (furigana).

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:ruby_html_plus/ruby_html_plus.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  var isShowOverlay = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.grey,
        appBar: AppBar(title: Text("RubyTextPlus Example")),
        body: ListView(
          children: [
            _buildRubyHtml(),
            _buildRubyHtmlWithoutRuby(),
            _buildRubyHtmlWithHighlight(),
            _buildRubyHtmlOverlayWithIndex(),
            _buildRubyHtmlOverlayWithSymbols(),
            _buildRubyHtmlBoldWithIndex(),
            _buildRubyHtmlBoldWithSymbol(),
            _buildRubyHtmlPlainTextWithSymbols(),
          ],
        ),
      ),
    );
  }

  Widget _buildRubyHtml() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: GestureDetector(
              onTap: () {
                setState(() {
                  isShowOverlay = !isShowOverlay;
                });
              },
              child:
                  isShowOverlay
                      ? RubyHtmlPlus.overlayWithSymbol(
                        '<ruby>#昨日<rt>きのう</rt></ruby>は<ruby>雨#<rt>あめ</rt></ruby>%だったのに、%<ruby>今日<rt>きょう</rt></ruby>は<ruby>%晴<rt>はれ</rt></ruby>で%す。',
                        shouldShowRubyText: true,
                        context: context,
                      )
                      : RubyHtmlPlus(
                        '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>雨<rt>あめ</rt></ruby>だったのに、<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
                        boldIndex: [1, 2, 3, 4, 5, 6, 7, 8, 13, 14],
                        shouldShowRubyText: true,
                      ),
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlWithoutRuby() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus(
              '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>雨<rt>あめ</rt></ruby>だったのに、<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
              boldIndex: [1, 2, 3, 4, 5, 6, 7, 8, 13, 14],
              shouldShowRubyText: false,
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlOverlayWithSymbols() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus.overlayWithSymbol(
              '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>#雨#<rt>あめ</rt></ruby>だったのに、<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
              overlaySymbol: '#',
              shouldShowRubyText: true,
              context: context,
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlWithHighlight() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus.overlay(
              'はい。「<ruby>週<rt>しゅう</rt></ruby>に4<ruby>日<rt>び</rt></ruby><ruby>働<rt>はたら</rt></ruby>けます。<ruby>月曜日<rt>げつようび</rt></ruby>と<ruby>水曜日<rt>すいようび</rt></ruby>がいいです。」',
              shouldShowRubyText: true,
              matchingText: 'はい週に4日働けます月曜日と水曜日がいいです',
              matchedColor: Color(0xffD14704),
              overlayIndex: [],
              context: context,
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlOverlayWithIndex() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus.overlay(
              '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>雨<rt>あめ</rt></ruby>だったのに、<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
              shouldShowRubyText: true,
              context: context,
              overlayIndex: [0, 1, 8],
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlBoldWithIndex() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus(
              '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>雨<rt>あめ</rt></ruby>だったのに、<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
              shouldShowRubyText: true,
              boldIndex: [0, 1, 3, 10, 11, 13],
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlBoldWithSymbol() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus.overlayWithSymbol(
              '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>雨<rt>あめ</rt></ruby>%だったのに、%<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
              shouldShowRubyText: true,
              boldSymbol: '%',
              overlaySymbol: '',
              context: context,
            ),
          ),
        ),
      ],
    );
  }

  Widget _buildRubyHtmlPlainTextWithSymbols() {
    return Row(
      children: [
        Expanded(
          child: Container(
            margin: const EdgeInsets.all(20),
            padding: const EdgeInsets.all(20),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(20)),
            ),
            child: RubyHtmlPlus.overlayWithSymbol(
              '<ruby>昨日<rt>きのう</rt></ruby>は<ruby>雨<rt>あめ</rt></ruby>だったのに、<ruby>今日<rt>きょう</rt></ruby>は<ruby>晴<rt>はれ</rt></ruby>です。',
              plainTextWithSymbol: "#昨日は雨#%だったのに%、今日は晴れです。",
              shouldShowRubyText: true,
              boldSymbol: '%',
              overlaySymbol: '#',
              boldFontWeight: FontWeight.w600,
              context: context,
            ),
          ),
        ),
      ],
    );
  }
}
1
likes
150
points
26
downloads

Publisher

verified publisherixiaoxiang.cn

Weekly Downloads

A Flutter widget for customizable display of ruby annotation syntax (furigana).

Homepage

Documentation

API reference

License

MIT (license)

Dependencies

equatable, flutter, flutter_hooks, get, html, tuple

More

Packages that depend on ruby_html_plus