Flutter文本高亮提及插件highlight_mentions的使用

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

Flutter文本高亮提及插件highlight_mentions的使用

概述

highlight_mentions 是一个用于在Flutter应用中添加提及(mentions)功能并支持高亮显示的包。它提供了用于渲染和与文本输入字段中的提及进行交互的小部件和工具。

特性

  • 支持用户输入时高亮提及。
  • 可定制普通文本、提及文本和特殊提及的样式。
  • 支持动态可提及用户名。
  • 组件模块化且易于复用。

平台支持

Android iOS MacOS Web Linux Windows

自定义

高亮样式

你可以通过提供 TextStyle 对象来定制普通文本、提及文本和特殊提及(如@All)的样式:

  • normalStyle: 普通文本的样式。
  • highlightedStyle: 被提及文本的样式。
  • specialStyle: 特殊提及的样式,例如 @All

TextField 参数

HighlightedTextField 支持所有标准的 TextField 属性,比如:

  • focusNode
  • keyboardType
  • textInputAction
  • cursorColor
  • maxLines
  • onChanged
  • 等等。

示例代码

以下是一个完整的示例,展示了如何使用 highlight_mentions 包创建一个包含提及功能的应用程序:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:highlight_mentions/highlight_mentions.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HighlightTextScreen(),
    );
  }
}

class HighlightTextScreen extends StatefulWidget {
  const HighlightTextScreen({Key? key}) : super(key: key);

  @override
  State<HighlightTextScreen> createState() => _HighlightTextScreenState();
}

class _HighlightTextScreenState extends State<HighlightTextScreen> {
  final String _currentUsername = 'john';
  late List<String> mentionableNames = ['alice', 'bob', 'sss'];
  late HighlightTextEditingController _controller;
  final FocusNode _focusNode = FocusNode();

  String text = '';

  @override
  void initState() {
    super.initState();
    _controller = HighlightTextEditingController(
      mentionableNames: mentionableNames,
      currentUsername: _currentUsername,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Highlight Mentions')),
      body: Padding(
        padding: const EdgeInsets.all(24.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            HighlightedText(
              input: text,
              mentionableNames: mentionableNames,
              currentUsername: _currentUsername,
            ),
            SizedBox(height: 20),
            MentionableTextField(
              focusNode: _focusNode,
              currentUsername: _currentUsername,
              mentionableNames: mentionableNames,
              onMentionSelected: (mention) {
                if (kDebugMode) {
                  print('Mention selected: $mention');
                }
              },
              textFieldDecoration: InputDecoration(
                border: OutlineInputBorder(),
                hintText: 'Type @ to mention...',
              ),
              suggestionDecoration: BoxDecoration(
                color: Colors.white,
                boxShadow: [
                  BoxShadow(
                    color: Colors.grey,
                    blurRadius: 10,
                    offset: Offset(0, 3),
                  ),
                ],
              ),
              controller: _controller,
            ),
          ],
        ),
      ),
    );
  }
}

此示例演示了如何集成 highlight_mentions 插件到你的Flutter项目中,并实现基本的提及和高亮功能。请注意,根据需要调整样式和配置以满足特定需求。


更多关于Flutter文本高亮提及插件highlight_mentions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本高亮提及插件highlight_mentions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用highlight_mentions插件来实现文本高亮提及功能的一个简单示例。highlight_mentions插件可以帮助你在文本中自动检测并高亮特定的提及(例如用户名、标签等)。

首先,你需要在你的pubspec.yaml文件中添加highlight_mentions依赖项:

dependencies:
  flutter:
    sdk: flutter
  highlight_mentions: ^x.y.z  # 请使用最新版本号

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

接下来,我们编写一个示例代码来展示如何使用这个插件。在这个示例中,我们将创建一个简单的聊天界面,其中消息中的用户名会被高亮显示。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Highlight Mentions Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChatScreen(),
    );
  }
}

class ChatScreen extends StatelessWidget {
  final List<String> users = ['@Alice', '@Bob', '@Charlie'];
  final String message = 'Hey @Alice, can you help me with this? @Bob said he could also help.';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: MentionsText(
          text: message,
          onMentionPressed: (mention) {
            print("Mention pressed: $mention");
          },
          type: MentionType.username,
          mentionStyle: TextStyle(
            color: Colors.blue,
            backgroundColor: Colors.lightGray.withOpacity(0.5),
            fontWeight: FontWeight.bold,
          ),
          mentions: users,
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个ChatScreen小部件,它包含一个文本消息和一组用户名。
  2. 我们使用MentionsText小部件来显示消息,并自动高亮提及的用户名。
  3. MentionsText的参数包括:
    • text:要显示的文本消息。
    • onMentionPressed:当用户点击提及项时的回调函数。
    • type:提及的类型(在这个例子中,我们使用的是MentionType.username)。
    • mentionStyle:提及项的样式(颜色、背景颜色、字体粗细等)。
    • mentions:需要高亮显示的提及项列表。

运行这个Flutter应用时,你会看到文本中的@Alice@Bob被高亮显示,并且点击它们时会在控制台打印出相应的信息。

这个示例只是一个基本的实现,你可以根据需求进一步自定义和扩展。

回到顶部