如何在 Flutter 的消息中实现用户提及?

     2023-04-18     255

关键词:

【中文标题】如何在 Flutter 的消息中实现用户提及?【英文标题】:How to implement user mentions in messages on Flutter? 【发布时间】:2019-12-21 05:02:35 【问题描述】:

我需要在消息中实现用户提及,就像在 Flutter 上的流行信使中一样。当我单击输入字段中的某个按钮时,有必要出现一个小部件,其中包含我提到的用户的姓名和图像。

我试过extended_text_field,但它有问题

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

试试这个

UserTextfield 类

class UserTextfield extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return BlocProvider(
      create: (context) => UserBloc(UrlUserRepository()),
      child: UserTextfieldPage(),
    );
  


class UserTextfieldPage extends StatefulWidget 
  @override
  _UserTextfieldPageState createState() => _UserTextfieldPageState();


class _UserTextfieldPageState extends State<UserTextfieldPage> 
  bool _visibility = false;

  @override
  Widget build(BuildContext context) 

    return BlocBuilder<UserBloc, UserState>(
      builder: (context, state) 
        return Column(
          children: <Widget>[
            TextField(
              onChanged: (value) 
                final _tagRegex =
                    RegExp(r"\B@\w*[a-zA-Z]+\w*", caseSensitive: false);
                final sentences = value.split('\n');
                sentences.forEach(
                  (sentence) 
                    final words = sentence.split(' ');
                    String withat = words.last;
                    if (_tagRegex.hasMatch(withat)) 
                      String withoutat = withay.substring(1);
                      BlocProvider.of<UserBloc>(context).add(
                        Searchuser(searchtext: withoutat),
                      );
                      setState(() 
                        _visibility = true;
                      );
                     else 
                      setState(() 
                        _visibility = false;
                      );
                    
                  ,
                );
              ,
            ),
            _listviewWidget(state),
          ],
        );
      ,
    );
  

  Widget _listviewWidget(UserState state) 
    if (state is UserLoading) 
      return Center(
        child: CircularProgressIndicator(
          valueColor: new AlwaysStoppedAnimation<Color>(Colors.black),
        ),
      );
     else if (state is UserLoaded) 
      return Expanded(
        child: Visibility(
          visible: _visibility,
          maintainSize: true,
          maintainAnimation: true,
          maintainState: true,
          child: ListView.builder(
            itemCount: state.userModel.userResult.length,
            itemBuilder: (context, index) 
              var listitem = state.userModel.userResult[index];
              return ListTile(
                title: Text(listitem.topic),
              );
            ,
          ),
        ),
      );
     else if (state is UserError) 
      return Align(
        alignment: Alignment.topCenter,
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Text(state.message),
        ),
      );
     else 
      return Container();
    
  

UserBloc 类

import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:your project file location/user_model.dart';
import 'package:your project file location/user_repository.dart';

part 'user_event.dart';
part 'user_state.dart';

class UserBloc extends Bloc<UserEvent, UserState> 
  final UserRepository userRepository;

  UserBloc(this.userRepository)
      : assert(userRepository != null),
        super(UserInitial());

  @override
  Stream<UserState> mapEventToState(
    UserEvent event,
  ) async* 
    if (event is Searchuser) 
      yield UserLoading();
      try 
        final userModel = await userRepository.getuser(event.searchtext);
        yield UserLoaded(userModel);
       catch (_) 
        yield UserError(message: 'Something went to wrong');
      
    
  

UserEvent 类

part of 'User_bloc.dart';

abstract class UserEvent extends Equatable
  const UserEvent();


class Searchuser extends UserEvent 
  final String searchtext;

  const Searchuser(this.searchtext);

  List<Object> get props => [searchtext];

  @override
  String toString() =>
      'Searchuser  searchtext: $searchtext ';

UserState 类

part of 'user_bloc.dart';

abstract class UserState extends Equatable 
  const UserState();


class UserInitial extends UserState 
  @override
  List<Object> get props => [];


class UserLoading extends UserState 
  const UserLoading();

  @override
  List<Object> get props => [];


class UserLoaded extends UserState 
  final UserModel userModel;

  const UserLoaded(this.userModel);

  @override
  List<Object> get props => [userModel];


class UserError extends UserState 
  final String message;

  const UserError(this.message);

  @override
  List<Object> get props => [message];

  @override
  String toString() => 'UserError  message: $message ';

UserModel 类

import 'package:equatable/equatable.dart';

class UserModel extends Equatable
  final bool error;
  final List<UserResult> userResult;

  UserModel(this.error, this.userResult);

  factory UserModel.fromJson(Map<String, dynamic> json) 
    var resultList = json['data'] as List;

    List<UserResult> userResult =
        resultList.map((i) => UserResult.fromJson(i)).toList();

    return UserModel(
      error: json['error'],
      userResult: userResult,
    );
  

  @override
  List<Object> get props => [error, userResult];


class UserResult extends Equatable 
  final String name;

  UserResult(this.name);

  factory UserResult.fromJson(Map<String, dynamic> json) 
    return UserResult(
      name: json["name"],
    );
  
  @override
  List<Object> get props => [name];
  

UserRepository 类

import 'dart:async';
import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:your project file location/user_model.dart';

abstract class UserRepository 
  Future<UserModel> getuser(String searchtext);


class UrlUserRepository implements UserRepository 
  @override
  Future<UserModel> getuser(String searchtext) async 
    Map<String, dynamic> stringParams = 'searchtext': searchtext;

    var uriResponse = await http.post(your api, body: stringParams);

    if (uriResponse.statusCode == 200) 
      final String res = uriResponse.body;
      var resdata = json.decode(res);
      return UserModel.fromJson(resdata);
     else 
      throw Exception('please, try again!');
    
  

json 数据


    "data": [
        
            "name": "bharat"
        ,
        
            "name": "india"
        ,
        
            "name": "abbcc"
        ,
        
            "name": "abc"
        ,
        
            "name": "user"
        ,
        
            "name": "user1"
        ,
        
            "name": "user2"
        ,
        
            "name": "user3"
        ,
        
            "name": "user4"
        
    ],
    "error": false,
    "message": "user feteched"

【讨论】:

如何在 Flutter Dart 中实现插件架构

】如何在FlutterDart中实现插件架构【英文标题】:HowtoimplementthePluginArchitectureinFlutterDart【发布时间】:2020-02-0914:24:37【问题描述】:我想在FlutterDart中实现一个插件架构。流程如下:1.用户下载应用。2.用户从我们的网站加载插件... 查看详情

如何在flutter中实现包月? (新方法)

】如何在flutter中实现包月?(新方法)【英文标题】:Howtoimplementsubscriptionmonthlyinflutter?(Newmethods)【发布时间】:2021-08-1020:12:58【问题描述】:我正在尝试使用应用内购买包实现对我的Flutter应用的每月订阅。经过数小时的搜索,... 查看详情

如何在 Flutter 中实现应用内购买订阅?

】如何在Flutter中实现应用内购买订阅?【英文标题】:HowtoimplementIn-AppPurchasesSubscriptioninFlutter?【发布时间】:2019-05-2115:59:57【问题描述】:我想在我的Flutter应用中为iOS和Android设备提供自动续订订阅。用户可以订阅1个月。目前... 查看详情

如何在 Flutter 应用中实现支付?

】如何在Flutter应用中实现支付?【英文标题】:HowtoimplementpaymentsinaFlutterapp?【发布时间】:2019-08-0412:35:30【问题描述】:我正在使用Flutter构建我的第一个应用程序。该应用程序旨在让用户能够相互买卖产品,我想设置功能以通... 查看详情

如何在 PaginatedDataTable Flutter Web 中实现搜索

】如何在PaginatedDataTableFlutterWeb中实现搜索【英文标题】:HowtoimplementsearchinPaginatedDataTableFlutterWeb【发布时间】:2021-03-2915:33:22【问题描述】:嗨,我有一个PaginatedDataTable,现在我想让它可以搜索,所以当我输入一些关键字时,它... 查看详情

如何在 Flutter 中实现应用栏操作文本而不是操作图标?

】如何在Flutter中实现应用栏操作文本而不是操作图标?【英文标题】:HowtoimplementappbaractiontextinsteadofactioniconinFlutter?【发布时间】:2018-12-1314:14:33【问题描述】:我正在尝试在颤振应用程序中实现appbar。我可以添加一个关闭应用... 查看详情

如何在 Flutter 中实现 Agora 云录制 api?

】如何在Flutter中实现Agora云录制api?【英文标题】:HowtoimplementAgoraCloudRecordingapiinflutter?【发布时间】:2020-07-2606:37:39【问题描述】:我正在研究使用AgoraCloud录制API通过设备摄像头录制用户的视频。Agora网站有所需的RESTfulAPI调用... 查看详情

在 Flutter 的登录屏幕中显示循环进度对话框,如何在 Flutter 中实现进度对话框?

】在Flutter的登录屏幕中显示循环进度对话框,如何在Flutter中实现进度对话框?【英文标题】:ShowCircularProgressDialoginLoginScreeninFlutter,howtoimplementprogressdialoginflutter?【发布时间】:2018-12-2703:41:51【问题描述】:我有一个登录表单,... 查看详情

如何在 Flutter 中实现 SingleLine 水平 CalendarView

】如何在Flutter中实现SingleLine水平CalendarView【英文标题】:HowtoachieveSingleLineHorizontalCalendarViewinFlutter【发布时间】:2020-02-0209:29:56【问题描述】:我是Flutter的新手。如何在颤动中实现SingleLine水平滚动CalendarView和日期选择。请找到... 查看详情

如何在 Flutter 中实现 CheckBox?

】如何在Flutter中实现CheckBox?【英文标题】:HowtoimplementCheckBoxinFlutter?【发布时间】:2019-03-1917:20:07【问题描述】:这里我提到了我的复选框代码。我是Flutter的新手,所以我必须实现它以实现记住我的功能。代码:Container(padding:... 查看详情

如何在 Flutter 应用中实现 reCaptcha

】如何在Flutter应用中实现reCaptcha【英文标题】:HowtoimplementreCaptchaintoaflutterapp【发布时间】:2020-06-2518:30:40【问题描述】:我正在尝试在我的颤振应用程序中实现reCaptcha功能,但在验证码注册中,我需要提供一个我没有用于移动... 查看详情

如何在 Flutter 中实现可滚动的画布?

】如何在Flutter中实现可滚动的画布?【英文标题】:HowtoachievescrollablecanvasinFlutter?【发布时间】:2019-01-2401:55:37【问题描述】:我是一位经验丰富的iOS开发人员,但对Flutter完全陌生。现在我在Flutter中遇到了ScrollView的问题。我想... 查看详情

如何在 Flutter 中实现 GooglePlay TabBar?

】如何在Flutter中实现GooglePlayTabBar?【英文标题】:HowtoimplementGooglePlayTabBarinflutter?【发布时间】:2020-06-1415:26:18【问题描述】:在大家开始发布一些初学者UI教程视频的链接之前,请知道这是一个已知问题,我正在寻找解决方法... 查看详情

如何在 Flutter 中实现这种类型的 Button?

】如何在Flutter中实现这种类型的Button?【英文标题】:HowcanIimplementthistypeofButtoninFlutter?【发布时间】:2021-01-0514:01:33【问题描述】:我尝试了其他各种方法,例如FAB循环菜单,但我无法达到这个结果。任何帮助表示赞赏。Thisisfr... 查看详情

如何在 Flutter(Android 和 Ios)中实现与 WebRTC 的电话会议视频聊天

】如何在Flutter(Android和Ios)中实现与WebRTC的电话会议视频聊天【英文标题】:HowcaniimplementconferencecallvideochatwithWebRTCinflutter(Android&Ios)【发布时间】:2022-01-2404:56:17【问题描述】:我正在尝试在FlutterforAndroid和Ios中使用WebRTC实... 查看详情

如何在 Flutter 中实现具有自动完成和搜索等功能的列表

】如何在Flutter中实现具有自动完成和搜索等功能的列表【英文标题】:HowcanIachievealistwhichhasfeatureslikeautocompleteandsearchinFlutter【发布时间】:2021-12-1718:51:33【问题描述】:我想在Flutter中实现这种类型的UI-我尝试了AutocompleteClass,... 查看详情

如何在 Flutter 中实现可扩展面板?

】如何在Flutter中实现可扩展面板?【英文标题】:HowtoimplementexpandablepanelsinFlutter?【发布时间】:2022-01-1909:52:56【问题描述】:有没有一种简单的方法来创建可展开/可折叠的?单击“显示更多详细信息”按钮时的屏幕截图,描述... 查看详情

如何在 Flutter 中实现这种排序查询?

】如何在Flutter中实现这种排序查询?【英文标题】:HowtoachievethiskindofsortingqueryinFlutter?【发布时间】:2021-09-0112:24:53【问题描述】:IM试图通过下图实现外观,数据来自本地数据库,使用sqflite。我有db"model"类和用于int的db类,查... 查看详情