Flutter富文本编辑器插件flutter_minimal_html_editor的使用
Flutter富文本编辑器插件flutter_minimal_html_editor的使用
Minimal HTML WYSIWYG编辑器仅支持上下文菜单格式化选项(目前)。
这主要是为了解决其他基于HTML的WYSIWYG编辑器的一些问题:
- 使用Summernote作为底层库且过于臃肿。
- 在屏幕阅读器上的表现不佳。
- 不提供精细的UI定制。
- 缺少常见的文本字段回调和方法。
特性
支持精细的UI定制
- 固定高度或灵活高度
- 自定义占位符和初始文本
- 背景颜色
- 内边距
- Android混合组合
- WebView标题(用于屏幕阅读器)
- 编辑器高度变化时自动调整滚动
- 文本缩放
常见文本字段回调
- 获取焦点
- 失去焦点
- 内容改变
控制器方法
- 设置HTML
- 获取HTML
- 获取焦点
- 失去焦点
轻量级
仅包含基本的HTML、CSS和JS,无任何依赖库或jQuery。
暴露控制器
通过HtmlEditor.controller
可以访问EditorController.webViewController
。
如何使用
最小示例
无需构造函数参数,只需将以下代码插入到你的widget树中:
HtmlEditor(),
简单示例
带固定高度、自定义占位符和初始内容、灰色背景以及onChange回调以更新内容:
HtmlEditor(
backgroundColorCssCode: "gray",
minHeight: 300,
initialText: "Some initial text",
placeholder: "Edit me",
onChange: (content, height) => update(content),
),
完整功能示例
具有自定义外观、灵活高度、避免编辑时文本在键盘下消失的自动滚动、屏幕阅读器的自定义WebView标题和回调动作:
ListView(
controller: scrollController,
children: [
...,
HtmlEditor(
backgroundColorCssCode: "#555555",
minHeight: 300,
padding: EdgeInsets.zero,
flexibleHeight: true,
autoAdjustScroll: true,
// 另外,为此创建一个变量以获取web控制器和编辑器方法
controller: EditorController(
scrollController: scrollController,
),
initialText: "Some initial text",
placeholder: "Edit me",
padding: EdgeInsets.all(10),
scaleFactor: 1.5,
showLoadingWheel: true,
onChange: (content, height) => update(content),
onFocus: () => doSomething(),
onBlur: () => doSomeOtherThing(),
printWebViewLog: true,
webViewTitle: "Editor",
useAndroidHybridComposition: true,
),
...,
],
),
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_minimal_html_editor/flutter_minimal_html_editor.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Minimal Html Editor',
home: MyHomePage(title: 'Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _scrollController = ScrollController();
late EditorController _editorController;
[@override](/user/override)
void initState() {
_editorController = EditorController(scrollController: _scrollController);
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return DefaultTabController(
initialIndex: 0,
length: 2,
child: Scaffold(
appBar: AppBar(
title: Text("Minimal Html Editor demo"),
bottom: TabBar(
tabs: [
Text("Flexible height, magenta background"),
Text("Fixed height and scrollable"),
],
),
),
body: TabBarView(
children: [
SingleChildScrollView(
controller: _scrollController,
child: Column(
children: <Widget>[
Center(
child: Text(
"Flexible height, magenta background",
style: TextStyle(fontSize: 20),
),
),
HtmlEditor(
flexibleHeight: true,
autoAdjustScroll: true,
controller: _editorController,
minHeight: 150,
padding: EdgeInsets.all(20),
backgroundColorCssCode: "magenta",
initialText: "Some initial text",
placeholder: "Chào thế giới",
printWebViewLog: true,
useAndroidHybridComposition: true,
showLoadingWheel: true,
scaleFactor: 2,
onChange: (content, height) => print(content),
),
Center(
child: Text(
"Flexible height, magenta background",
style: TextStyle(fontSize: 20),
),
),
],
),
),
SingleChildScrollView(
child: Column(
children: <Widget>[
Center(
child: Text(
"Fixed height and scrollable",
style: TextStyle(fontSize: 20),
),
),
HtmlEditor(
backgroundColorCssCode: "#fafafa",
minHeight: 250,
initialText: "Some initial text",
placeholder: "Chào thế giới",
),
Center(
child: Text(
"Fixed height and scrollable",
style: TextStyle(fontSize: 20),
),
),
],
),
),
],
),
),
);
}
}
更多关于Flutter富文本编辑器插件flutter_minimal_html_editor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter富文本编辑器插件flutter_minimal_html_editor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用Flutter富文本编辑器插件flutter_minimal_html_editor
的代码示例。这个示例将展示如何集成和使用该插件来创建一个简单的富文本编辑器。
首先,确保在你的pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
flutter_minimal_html_editor: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
接下来,在你的Flutter应用中创建一个页面来使用flutter_minimal_html_editor
。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_minimal_html_editor/flutter_minimal_html_editor.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Minimal HTML Editor Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Minimal HTML Editor Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: MinimalHtmlEditor(
controller: _controller,
hint: 'Compose your message here...',
initialHtml: '<p>Hello, <b>world</b>!</p>', // 初始HTML内容
toolbarOptions: [
ToolbarOptions.bold,
ToolbarOptions.italic,
ToolbarOptions.underline,
ToolbarOptions.heading1,
ToolbarOptions.heading2,
ToolbarOptions.paragraph,
ToolbarOptions.quote,
ToolbarOptions.ul,
ToolbarOptions.ol,
ToolbarOptions.link,
ToolbarOptions.image,
],
onImagePicked: (File file) async {
// 处理图片选择逻辑
// 这里可以上传图片或将其转换为Base64等
print('Image picked: ${file.path}');
},
onLinkPicked: (String url) {
// 处理链接选择逻辑
print('Link picked: $url');
},
),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {
// 获取编辑器内容
final String htmlContent = _controller.text;
print('HTML Content: $htmlContent');
// 这里可以将htmlContent保存到数据库或进行其他处理
},
child: Text('Get HTML Content'),
),
],
),
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个flutter_minimal_html_editor
编辑器。以下是代码的主要部分解释:
- 依赖添加:在
pubspec.yaml
文件中添加flutter_minimal_html_editor
依赖。 - 页面结构:使用
MaterialApp
和Scaffold
来创建应用的基本结构。 - 编辑器:使用
MinimalHtmlEditor
小部件来创建富文本编辑器。controller
:用于控制编辑器内容的TextEditingController
。hint
:编辑器中的提示文本。initialHtml
:编辑器的初始HTML内容。toolbarOptions
:工具栏选项,指定哪些工具按钮应该显示在编辑器工具栏中。onImagePicked
和onLinkPicked
:分别处理图片和链接选择的回调。
- 获取HTML内容:点击按钮时,从
TextEditingController
中获取编辑器的HTML内容。
这个示例提供了一个基本框架,你可以根据需求进一步自定义和扩展。