Flutter富文本编辑器插件clia_flutter_quill的使用

Flutter富文本编辑器插件clia_flutter_quill的使用

clia_flutter_quill 是对 flutter_quill 的修改版本,使其与 flutter_quill_extensions 兼容。以下是其使用方法及相关代码示例。

背景信息

  • flutter_quill_extensions 依赖于 math_keyboard,而 math_keyboard 依赖于 flutter_localizations(来自 SDK),flutter_localizations 又依赖于 intl 版本 0.17.0。
  • flutter_quill 依赖于 i18n_extension 版本 7.0.0,而 i18n_extension 依赖于 intl 版本 0.18.0。

为了解决版本冲突问题,将 i18n_extension 的版本降级到 6.0.0,以兼容 flutter_quill_extensions


示例代码

以下是一个完整的示例代码,展示如何在 Flutter 应用中集成 clia_flutter_quill 插件。

示例代码:主程序文件 (main.dart)

// 导入必要的库
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; // 支持多语言
import 'pages/home_page.dart'; // 自定义页面

void main() {
  // 确保 Flutter 框架已初始化
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp()); // 启动应用
}

// 定义应用程序根组件
class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false, // 隐藏调试标签
      title: 'Quill Demo', // 应用名称
      theme: ThemeData(
        primarySwatch: Colors.blue, // 主色调
        visualDensity: VisualDensity.adaptivePlatformDensity, // 自适应屏幕密度
      ),
      // 支持多语言
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      // 支持的语言列表
      supportedLocales: [
        const Locale('en', 'US'), // 英文
        const Locale('zh', 'HK'), // 中文(香港)
      ],
      home: HomePage(), // 启动页面
    );
  }
}

示例代码:富文本编辑器页面 (home_page.dart)

// 导入必要的库
import 'package:flutter/material.dart';
import 'package:clia_flutter_quill/clia_flutter_quill.dart'; // 引入 clia_flutter_quill

class HomePage extends StatefulWidget {
  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  late final QuillController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller = QuillController.basic(); // 初始化控制器
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Clia Flutter Quill 示例'), // 设置标题
      ),
      body: Column(
        children: [
          Expanded(
            child: QuillEditor(
              controller: _controller, // 绑定控制器
              scrollController: ScrollController(), // 滚动控制器
              scrollable: true, // 是否允许滚动
              focusNode: FocusNode(), // 焦点节点
              autoFocus: true, // 自动获取焦点
              readOnly: false, // 是否只读模式
              expands: false, // 是否扩展到全屏
              padding: EdgeInsets.all(16), // 内边距
            ),
          ),
          Row(
            children: [
              ElevatedButton(
                onPressed: () {
                  // 获取编辑器内容
                  final DocumentSnapshot snapshot = _controller.document;
                  print(snapshot.toDelta().toJson());
                },
                child: Text('打印内容'),
              ),
              SizedBox(width: 16),
              ElevatedButton(
                onPressed: () {
                  // 清空编辑器内容
                  _controller.clear();
                },
                child: Text('清空内容'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


clia_flutter_quill 是一个基于 flutter_quill 的富文本编辑器插件,用于在 Flutter 应用中实现富文本编辑功能。它提供了丰富的文本格式支持,包括加粗、斜体、下划线、字体颜色、背景颜色、链接、图片、视频等。

以下是使用 clia_flutter_quill 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 clia_flutter_quill 依赖:

dependencies:
  flutter:
    sdk: flutter
  clia_flutter_quill: ^1.0.0

然后运行 flutter pub get 来安装依赖。

2. 导入包

在需要使用富文本编辑器的 Dart 文件中导入 clia_flutter_quill 包:

import 'package:clia_flutter_quill/clia_flutter_quill.dart';

3. 创建富文本编辑器

使用 CliaQuillEditor 组件来创建富文本编辑器:

class MyEditor extends StatefulWidget {
  [@override](/user/override)
  _MyEditorState createState() => _MyEditorState();
}

class _MyEditorState extends State<MyEditor> {
  final QuillController _controller = QuillController.basic();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Rich Text Editor'),
      ),
      body: Column(
        children: [
          QuillToolbar.basic(controller: _controller),
          Expanded(
            child: CliaQuillEditor(
              controller: _controller,
              readOnly: false,
            ),
          ),
        ],
      ),
    );
  }
}

4. 获取和设置编辑器内容

你可以通过 _controller.document.toDelta() 来获取编辑器的内容,或者通过 _controller.document = Document.fromDelta(delta) 来设置编辑器的内容。

// 获取内容
Delta delta = _controller.document.toDelta();

// 设置内容
_controller.document = Document.fromDelta(delta);

5. 处理图片和视频

clia_flutter_quill 支持图片和视频的插入。你可以通过 QuillToolbar 提供的按钮来插入图片和视频,或者直接在代码中插入:

// 插入图片
_controller.document.insert(0, BlockEmbed.image('https://example.com/image.png'));

// 插入视频
_controller.document.insert(0, BlockEmbed.video('https://example.com/video.mp4'));

6. 自定义工具栏

你可以通过自定义 QuillToolbar 来添加或删除工具栏按钮。例如:

QuillToolbar.basic(
  controller: _controller,
  fontSizeValues: {'Small': '10', 'Medium': '20', 'Large': '30'},
  customButtons: [
    QuillToolbarCustomButton(
      icon: Icons.code,
      onTap: () {
        // 自定义按钮的逻辑
      },
    ),
  ],
);

7. 保存和加载内容

你可以将编辑器的内容保存为 JSON 或其他格式,并在需要时加载:

// 保存内容
String json = jsonEncode(_controller.document.toDelta().toJson());

// 加载内容
_controller.document = Document.fromJson(jsonDecode(json));

8. 处理键盘事件

如果你想处理键盘事件,可以通过 CliaQuillEditoronKeyEvent 回调来实现:

CliaQuillEditor(
  controller: _controller,
  onKeyEvent: (event) {
    // 处理键盘事件
  },
);

9. 其他功能

clia_flutter_quill 还支持其他功能,如撤销/重做、查找替换、拼写检查等。你可以通过 QuillControllerQuillToolbar 来实现这些功能。

10. 示例代码

以下是一个完整的示例代码:

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

class MyEditor extends StatefulWidget {
  [@override](/user/override)
  _MyEditorState createState() => _MyEditorState();
}

class _MyEditorState extends State<MyEditor> {
  final QuillController _controller = QuillController.basic();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Rich Text Editor'),
      ),
      body: Column(
        children: [
          QuillToolbar.basic(controller: _controller),
          Expanded(
            child: CliaQuillEditor(
              controller: _controller,
              readOnly: false,
            ),
          ),
        ],
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: MyEditor(),
  ));
}
回到顶部