Flutter富文本编辑插件simple_rich_text的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter富文本编辑插件simple_rich_text的使用

simple_rich_text 是一个Flutter插件,它允许开发者通过简单的格式化字符来快速为文本添加颜色和格式。这个插件旨在以最低的开发摩擦力为文本增加样式。

格式化字符

这些格式化字符是非标准的(即不与Markdown兼容),但在作者看来更加直观:

格式化字符 格式效果 simple_rich_text字符串输入 Flutter输出
星号 (*) 加粗 “this is bold this is bold
斜杠 (/) 斜体 “this is /italicized/” this is italicized
下划线 (_) 下划线 “this is underlined this is underlined

示例输入

SimpleRichText(r'*_/this is all three*_/ (*{color:red}bold*, _{color:green}underlined_, and /{color:brown}italicized/). _{push:home;color:blue}clickable hyperlink to home screen_')

示例Flutter输出

Screenshot

属性

属性对放在花括号中紧跟在第一个字符标记之后。每个对用分号(;)分隔,可以任意顺序。每个对的语法是name:value

key 意义 实现的Dart代码
color 红色、蓝色等 textStyle.color: color-value
pop 弹出导航栈 Navigator.pop(context);
push 将值推入导航栈 Navigator.pushNamed(context, ‘/$route’);
repl 替换导航栈顶部路由 Navigator.popAndPushNamed(context, ‘/$route’);

颜色支持示例

"this is blue hyperlink to the _{color:blue,push:calendar}calendar_ screen"

特性

  • 支持通过在格式化文本前加上路由名称来创建到其他屏幕的文本超链接,例如:"… {calendar}转到日历页面".

示例输入

以下是一些simple_rich_text支持的输入样例:

'this is /italic/'
'this is *bold*'
'*_/this is all three*_/ (*bold*, _underlined_, and /italicized/)'
'you can quote characters to NOT format a word \*bold\*'
'this is _underline_'
'go to _{/myroute}home_ page'
'this is ~important~(red).'
'this is _*bold and underlined*_.'

注意事项

你可以同时使用多个字符,并且不像HTML那样需要严格的匹配顺序。比如:

"these are */equivalent/* and works without problems."
"these are */equivalent*/ and works without problems."

要求

父级组件必须设置textDirection(由内部RichText小部件要求),可以通过MaterialApp小部件或显式地用Directionality小部件包装来实现:

Directionality(
    child: SimpleRichText('Peter', term: 't'),
    textDirection: TextDirection.ltr)

示例代码

以下是一个完整的示例代码,演示了如何使用simple_rich_text插件:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String text =
        r'Now you can change the ~{fontSize:32}size~ of the text. \nInsert a new line.\nChange the ~{backgroundColor:yellow}background color~\nAnd modify more style as: fontFamily, _{decorationColor:blue}decorationColor_, ~{height:3}height~, etc\n\nToo you can open url: _{http:www.google.com;color:blue}go to Google_\nFinaly, you can define textAlign, maxLines and textOverflow';

    return MaterialApp(
      builder: (BuildContext context, Widget child) {
        final MediaQueryData data = MediaQuery.of(context);
        return MediaQuery(
          data: data.copyWith(textScaleFactor: 3),
          child: child,
        );
      },
      home: Scaffold(
        body: Center(
          child: SimpleRichText(
            text,
            logIt: false,
            maxLines: 20,
            pre: TextSpan(
                text: 'PRE',
                style: TextStyle(color: Colors.purple)),
            post: TextSpan(
                text: 'POST',
                style: TextStyle(color: Colors.purple)),
            style: TextStyle(color: Colors.orange),
            textAlign: TextAlign.center,
            textOverflow: TextOverflow.ellipsis,
            textScaleFactor: 1.5,
          ),
        ),
      ),
    );
  }
}

此代码展示了如何配置SimpleRichText,包括文本内容、前置和后置文本、文本样式、对齐方式、超出显示省略号等属性。此外,还展示了如何通过MediaQuery调整全局文本缩放因子。


更多关于Flutter富文本编辑插件simple_rich_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter富文本编辑插件simple_rich_text的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 simple_rich_text 插件在 Flutter 中实现富文本编辑的示例代码。这个插件允许你创建和编辑包含多种样式(如粗体、斜体、下划线、颜色等)的文本。

首先,确保你的 pubspec.yaml 文件中已经添加了 simple_rich_text 依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_rich_text: ^x.y.z  # 请替换为最新版本号

然后,运行 flutter pub get 来获取依赖。

接下来,你可以在你的 Flutter 应用中使用 SimpleRichText 小部件。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Simple Rich Text Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: MyRichTextEditor(),
        ),
      ),
    );
  }
}

class MyRichTextEditor extends StatefulWidget {
  @override
  _MyRichTextEditorState createState() => _MyRichTextEditorState();
}

class _MyRichTextEditorState extends State<MyRichTextEditor> {
  late TextEditingController _controller;
  late SimpleRichTextController _richTextController;

  @override
  void initState() {
    super.initState();
    _controller = TextEditingController(text: 'Hello, **bold** text and *italic* text!');
    _richTextController = SimpleRichTextController(textEditingController: _controller);
  }

  @override
  void dispose() {
    _controller.dispose();
    _richTextController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SimpleRichText(
      controller: _richTextController,
      toolbarOptions: [
        ToolbarOptions(
          child: IconButton(
            icon: Icon(Icons.bold),
            onPressed: () => _richTextController.toggleBold(),
          ),
        ),
        ToolbarOptions(
          child: IconButton(
            icon: Icon(Icons.italic),
            onPressed: () => _richTextController.toggleItalic(),
          ),
        ),
        // 你可以根据需要添加更多的工具栏选项,如下划线、颜色选择等
      ],
      styles: [
        // 你可以定义自定义的样式
        TextStyleModel(
          pattern: r'\*(.*?)\*', // 斜体匹配模式
          style: TextStyle(fontStyle: FontStyle.italic),
        ),
        TextStyleModel(
          pattern: r'\*\*(.*?)\*\*', // 粗体匹配模式
          style: TextStyle(fontWeight: FontWeight.bold),
        ),
      ],
    );
  }
}

在这个示例中:

  1. 我们创建了一个 MyApp 应用程序,其中包含一个 Scaffold 和一个 Padding 小部件,用于容纳我们的富文本编辑器。
  2. MyRichTextEditor 是一个有状态的小部件,它初始化了 TextEditingControllerSimpleRichTextController
  3. initState 方法中,我们设置了初始文本,并将其传递给 TextEditingController
  4. SimpleRichText 小部件用于显示和编辑富文本。我们传递了 controllertoolbarOptions,其中 toolbarOptions 包含了一些按钮,用于切换粗体和斜体文本。
  5. styles 属性定义了我们想要应用的文本样式。在这个例子中,我们定义了斜体和粗体的匹配模式和样式。

这个示例展示了如何使用 simple_rich_text 插件来创建一个简单的富文本编辑器,并包含了一些基本的文本样式选项。你可以根据需要扩展这个示例,添加更多的工具栏选项和自定义样式。

回到顶部