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

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

Flutter自定义组件创建富文本输入框 🚀

包含RTFTextFieldController用于自定义文本、提示和标签文本样式 😊
给予一些❤️并收藏仓库以支持项目!

Pub License: MIT Repository views Pub

Pub likes Pub popularity Pub points


📌 功能 #

  • ✅ 自定义提示
  • ✅ 自定义标签
  • ✅ 数据序列化 (以JSON格式存储和获取带样式的文本)
  • ✅ 使用RTFTextFieldController自定义文本特性 (改变颜色、样式、大小等)

📌 开始使用 #

请遵循以下步骤来使用此包。

添加依赖 #

dependencies:
  sunday_rtf_textfield: ^1.0.1

导入包 #

import 'package:sunday_rtf_textfield/sunday_rtf_textfield.dart';

易于使用 #

以下是使用RTFTextField的简单示例。
将此代码放在您的项目中并了解其工作原理 😊

截图 截图 截图

组件部分:

RTFTextField(
   onTapOutside: (event) {
      FocusManager.instance.primaryFocus?.unfocus();
   },
   decoration: const RichInputDecoration(
      border: OutlineInputBorder(
      borderRadius: BorderRadius.all(Radius.circular(16)),
   ),
      enabledBorder: OutlineInputBorder(
         borderSide: BorderSide(
            color: Colors.grey,
         ),
         borderRadius: BorderRadius.all(Radius.circular(16)),
      ),
      labelTextSpan: TextSpan(
         text: '请输入您的名字',
         children: [
            TextSpan(
               text: ' *',
               style: TextStyle(
                  color: Colors.red,
               ),
            ),
         ],
      ),
      hintTextSpan: TextSpan(
         text: 'Yelaman',
         ),
      ),
   controller: controller,
),

通过RTFTextFieldController更改文本粗细:

controller.toggleBold();

📌 示例 #

您可以在此处检查更多使用此包的示例 此处为链接


感谢所有为这个包做出贡献的人


示例代码

example/lib/main.dart

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final RTFTextFieldController controller = RTFTextFieldController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Image.asset(
          '../assets/images/rich_text_field.png',
          height: 50,
        ),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: <Widget>[
            RTFTextField(
              onTapOutside: (event) {
                FocusManager.instance.primaryFocus?.unfocus();
              },
              decoration: const RichInputDecoration(
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.all(Radius.circular(16)),
                ),
                enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(
                    color: Colors.grey,
                  ),
                  borderRadius: BorderRadius.all(Radius.circular(16)),
                ),
                labelTextSpan: TextSpan(
                  text: '请输入您的名字',
                  children: [
                    TextSpan(
                      text: ' *',
                      style: TextStyle(
                        color: Colors.red,
                      ),
                    ),
                  ],
                ),
                hintTextSpan: TextSpan(
                  text: 'Yelaman',
                ),
              ),
              controller: controller,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          controller.toggleBold();
        },
        tooltip: '加粗',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用sunday_rtf_textfield插件来实现富文本编辑功能的示例代码。sunday_rtf_textfield是一个用于Flutter的富文本编辑插件,允许用户在文本字段中插入各种格式的文本(如粗体、斜体、下划线等)。

首先,确保在你的pubspec.yaml文件中添加sunday_rtf_textfield依赖:

dependencies:
  flutter:
    sdk: flutter
  sunday_rtf_textfield: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,在你的Dart文件中使用SundayRTFTextField组件。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Rich Text Field Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 用于存储富文本内容的变量
  late RTFTextFieldController _controller;

  @override
  void initState() {
    super.initState();
    // 初始化RTFTextFieldController
    _controller = RTFTextFieldController();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Rich Text Field Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // 富文本编辑字段
            RTFTextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter Rich Text',
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(8.0),
                ),
              ),
              style: TextStyle(fontSize: 16.0),
              // 可选:设置初始文本格式
              initialText: '<p><b>Bold</b> and <i>Italic</i> Text</p>',
              // 可选:设置工具栏按钮的样式
              toolbarOptions: RTFToolbarOptions(
                iconColor: Colors.blue,
                backgroundColor: Colors.white,
              ),
            ),
            SizedBox(height: 20.0),
            // 显示富文本内容
            ElevatedButton(
              onPressed: () {
                // 获取富文本内容并显示
                _controller.getText().then((text) {
                  showDialog(
                    context: context,
                    builder: (context) => AlertDialog(
                      title: Text('Rich Text Content'),
                      content: SingleChildScrollView(
                        child: RichText(
                          text: TextSpan(
                            style: TextStyle(fontSize: 16.0),
                            children: <InlineSpan>[
                              // 解析并显示富文本
                              TextSpan(
                                text: text,
                                style: TextStyle(color: Colors.black),
                              ),
                            ],
                          ),
                        ),
                      ),
                      actions: <Widget>[
                        TextButton(
                          onPressed: () => Navigator.of(context).pop(),
                          child: Text('Close'),
                        ),
                      ],
                    ),
                  );
                });
              },
              child: Text('Show Rich Text'),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 释放控制器资源
    _controller.dispose();
    super.dispose();
  }
}

在这个示例中:

  1. 我们创建了一个Flutter应用,并在主页中使用RTFTextField组件。
  2. RTFTextFieldController用于管理富文本字段的状态。
  3. RTFTextField组件允许用户输入和编辑富文本。
  4. 通过点击“Show Rich Text”按钮,我们可以获取并显示富文本内容。

注意:sunday_rtf_textfield插件的具体API和用法可能会随着版本更新而变化,因此请参考官方文档以获取最新和最准确的用法信息。

回到顶部