Flutter文本提及与高亮插件flutter_quill_mentions的使用
Flutter 包基于 flutter_quill 提供提及和标签功能。
特性 #
列出你的包可以做什么。可能包括图片、GIF或视频。
开始使用 #
列出先决条件,并提供或指向有关如何开始使用该包的信息。
使用 #
为用户提供简短且有用的示例。将更长的示例添加到/example
文件夹。
const like = 'sample';
额外信息 #
告诉用户更多关于该包的信息:在哪里找到更多信息,如何贡献于该包,如何提交问题,他们可以期望从包作者那里得到什么响应等。
```示例代码
引入依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
flutter_quill_mentions: ^版本号
初始化Quill Editor
首先,确保你已经引入了 flutter_quill_mentions
包,并且初始化了 Quill Editor。
import 'package:flutter/material.dart';
import 'package:flutter_quill/flutter_quill.dart' hide Text;
import 'package:flutter_quill_mentions/flutter_quill_mentions.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Mentions Example'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: QuillEditor.basic(
controller: QuillController(
document: Document(),
selection: TextSelection.collapsed(offset: 0),
),
readOnly: false, // true if you want to disable editing
),
),
),
);
}
}
配置提及和标签
接下来,配置提及和标签的功能。
class MyApp extends StatelessWidget {
final QuillController _controller = QuillController.basic();
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Mentions Example'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: QuillEditor(
controller: _controller,
scrollController: ScrollController(),
scrollable: true,
focusNode: FocusNode(),
autoFocus: true,
readOnly: false,
expands: false,
padding: EdgeInsets.zero,
customStyles: DefaultStyles(
paragraph: DefaultTextBlockStyle(
const TextStyle(fontSize: 16, height: 1.4),
const Offset(0, 0),
const Offset(0, 0),
null,
),
),
embedBuilders: QuillOptions.getEmbedBuilders(context),
mentionConfigurations: [
MentionConfiguration(
trigger: '@', // 触发字符
suggestionItems: [
MentionItem('@user1'),
MentionItem('@user2'),
MentionItem('@user3'),
],
mentionSpanBuilder: (mentionItem, index) {
return MentionSpan(
mentionItem: mentionItem,
prefix: mentionConfigurations.first.trigger,
style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
);
},
),
],
),
),
),
);
}
}
处理提及事件
你可以监听提及事件并执行相应的操作。
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final QuillController _controller = QuillController.basic();
void _onMentionSelected(MentionItem item) {
print('Selected mention: ${item.value}');
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Mentions Example'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: QuillEditor(
controller: _controller,
scrollController: ScrollController(),
scrollable: true,
focusNode: FocusNode(),
autoFocus: true,
readOnly: false,
expands: false,
padding: EdgeInsets.zero,
customStyles: DefaultStyles(
paragraph: DefaultTextBlockStyle(
const TextStyle(fontSize: 16, height: 1.4),
const Offset(0, 0),
const Offset(0, 0),
null,
),
),
embedBuilders: QuillOptions.getEmbedBuilders(context),
mentionConfigurations: [
MentionConfiguration(
trigger: '@',
suggestionItems: [
MentionItem('@user1'),
MentionItem('@user2'),
MentionItem('@user3'),
],
mentionSpanBuilder: (mentionItem, index) {
return MentionSpan(
mentionItem: mentionItem,
prefix: mentionConfigurations.first.trigger,
style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
);
},
onSuggestionSelected: (MentionItem item) {
_onMentionSelected(item);
},
),
],
),
),
),
);
}
}
更多关于Flutter文本提及与高亮插件flutter_quill_mentions的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文本提及与高亮插件flutter_quill_mentions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_quill_mentions
是一个用于 Flutter 的插件,它允许你在富文本编辑器(基于 flutter_quill
)中实现提及(Mentions)功能。这个插件通常用于在文本编辑器中输入“@”符号后,显示一个用户列表(或其他可提及的项),并允许用户选择一个项,然后将其插入到文本中。
安装
首先,你需要在 pubspec.yaml
文件中添加 flutter_quill_mentions
依赖:
dependencies:
flutter:
sdk: flutter
flutter_quill: ^x.x.x # 请使用最新版本
flutter_quill_mentions: ^x.x.x # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
-
导入包:
import 'package:flutter_quill/flutter_quill.dart'; import 'package:flutter_quill_mentions/flutter_quill_mentions.dart';
-
创建 Mention 数据:
你需要定义一个
Mention
数据模型,通常包含id
和display
字段。class Mention { final String id; final String display; Mention({required this.id, required this.display}); }
-
创建 Mention 列表:
创建一个包含
Mention
对象的列表,这些对象将用于在用户输入“@”符号时显示。final mentions = [ Mention(id: '1', display: 'Alice'), Mention(id: '2', display: 'Bob'), Mention(id: '3', display: 'Charlie'), ];
-
配置 MentionOptions:
使用
MentionOptions
来配置提及功能的行为。final mentionOptions = MentionOptions( mentionBuilder: (context, mention) { return Text( mention.display, style: TextStyle(color: Colors.blue), ); }, onMentionAdd: (mention) { print('Mention added: ${mention.display}'); }, onMentionRemove: (mention) { print('Mention removed: ${mention.display}'); }, );
-
创建 Quill 编辑器:
使用
QuillEditor
和QuillToolbar
来创建一个富文本编辑器,并将mentionOptions
传递给QuillEditor
。final quillController = QuillController.basic(); [@override](/user/override) Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Quill Mentions Example'), ), body: Column( children: [ QuillToolbar.basic(controller: quillController), Expanded( child: QuillEditor( controller: quillController, scrollController: ScrollController(), scrollable: true, padding: EdgeInsets.all(10), autoFocus: true, expands: false, mentionOptions: mentionOptions, ), ), ], ), ); }
-
处理提及:
当用户输入“@”符号时,插件会自动触发提及功能,并显示一个下拉列表,用户可以从中选择一个提及项。
自定义提及样式
你可以通过 mentionBuilder
来自定义提及项的显示样式。例如,你可以显示头像、名称等。
final mentionOptions = MentionOptions(
mentionBuilder: (context, mention) {
return Row(
children: [
CircleAvatar(
backgroundImage: NetworkImage('https://via.placeholder.com/150'),
),
SizedBox(width: 8),
Text(mention.display),
],
);
},
);
处理提及事件
你可以通过 onMentionAdd
和 onMentionRemove
来处理提及项的添加和删除事件。
final mentionOptions = MentionOptions(
onMentionAdd: (mention) {
print('Mention added: ${mention.display}');
},
onMentionRemove: (mention) {
print('Mention removed: ${mention.display}');
},
);