关键词:
【中文标题】如何在 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类,查... 查看详情