group chat started

pull/9/head
Sultan khan 2 years ago
parent b227f11c7b
commit 9cb71b525e

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 392.601 392.601" xml:space="preserve">
<g>
<g>
<path d="M117.659,132.85c-29.479,0-53.463,23.984-53.463,53.463s23.984,53.463,53.463,53.463
c29.543,0,53.463-23.984,53.463-53.463S147.138,132.85,117.659,132.85z M117.659,217.989c-17.455,0-31.677-14.222-31.677-31.677
s14.222-31.677,31.677-31.677s31.677,14.222,31.677,31.677S135.114,217.989,117.659,217.989z"/>
</g>
</g>
<g>
<g>
<path d="M301.32,192.842c-23.531,0-42.731,19.2-42.731,42.731c0,23.596,19.135,42.731,42.731,42.731
c23.596,0,42.731-19.135,42.731-42.731C344.051,211.977,324.916,192.842,301.32,192.842z M301.32,256.518
c-11.507,0-20.945-9.374-20.945-20.945s9.438-20.945,20.945-20.945c11.572,0,20.945,9.374,20.945,20.945
C322.265,247.08,312.891,256.518,301.32,256.518z"/>
</g>
</g>
<g>
<g>
<path d="M301.32,292.591c-32.194,0-60.832,17.325-76.994,43.119c-18.554-40.792-59.604-69.495-106.731-69.495
c-63.547,0-116.234,51.717-117.592,115.2c-0.065,2.909,1.099,5.818,3.103,7.887c2.069,2.069,4.848,3.232,7.822,3.232h370.166
c2.909,0,5.689-1.164,7.822-3.232c2.133-2.069,3.168-4.978,3.103-7.887C390.984,332.478,350.257,292.591,301.32,292.591z
M22.758,370.813c6.465-46.545,46.998-82.683,94.901-82.683c47.903,0,88.372,36.137,94.901,82.683H22.758z M233.57,370.813
c6.012-31.935,34.327-56.307,67.685-56.307s61.737,24.436,67.685,56.307H233.57z"/>
</g>
</g>
<g>
<g>
<path d="M274.427,0.066c-65.164,0-118.174,36.913-118.174,82.36c0,22.109,12.541,43.184,34.844,58.505v44.865
c0,3.685,1.875,7.111,4.913,9.115c2.78,1.875,7.24,2.069,10.343,0.84l70.4-31.095c64.065-0.776,115.846-37.43,115.846-82.23
C392.601,36.979,339.59,0.066,274.427,0.066z M274.427,142.87c-1.552,0-3.038,0.323-4.396,0.905l-57.212,25.277v-34.069
c0-3.814-2.004-7.37-5.236-9.244c-18.747-11.507-29.608-27.281-29.608-43.378c0.065-32.776,44.218-60.509,96.452-60.509
s96.388,27.733,96.388,60.509C370.815,115.201,326.661,142.87,274.427,142.87z"/>
</g>
</g>
<g>
<g>
<path d="M219.671,69.238h-5.107c-6.012,0-10.925,4.849-10.925,10.925c0.065,6.077,4.913,10.925,10.925,10.925h5.107
c6.012,0,10.925-4.849,10.925-10.925C230.597,74.151,225.748,69.238,219.671,69.238z"/>
</g>
</g>
<g>
<g>
<path d="M276.948,69.238h-5.107c-6.012,0-10.925,4.849-10.925,10.925c0,6.077,4.978,10.925,10.925,10.925h5.107
c6.012,0,10.925-4.849,10.925-10.925C287.873,74.151,283.025,69.238,276.948,69.238z"/>
</g>
</g>
<g>
<g>
<path d="M334.289,69.238h-5.107c-6.012,0-10.925,4.849-10.925,10.925c0,6.077,4.913,10.925,10.925,10.925h5.107
c6.012,0,10.925-4.849,10.925-10.925C345.215,74.151,340.366,69.238,334.289,69.238z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -524,5 +524,7 @@
"fakeLocation": ".لقد تتبعنا أنك تحاول استخدام موقع مزيف! يعتبر هذا مخالفة وقد تم إخطار الموارد البشرية",
"noWinner": "حزين! لم يفز أحد اليوم.",
"myTeam" : "فريقي",
"youCanPlayDemo": "لكن يمكنك لعب العرض"
"youCanPlayDemo": "لكن يمكنك لعب العرض",
"group" : "مجموعة",
"searchGroup": "مجموعة البحث"
}

@ -524,5 +524,7 @@
"fakeLocation": "We traced out that you try to use a fake location! This is considered a violation, and HR has been notified.",
"noWinner": "Sad! No one won today.",
"myTeam" : "My Team",
"youCanPlayDemo": "But you can play demo"
"youCanPlayDemo": "But you can play demo",
"group": "Groups",
"searchGroup": "Search Group"
}

@ -13,6 +13,7 @@ import 'package:mohem_flutter_app/exceptions/api_exception.dart';
import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/chat/chat_user_image_model.dart';
import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
import 'package:mohem_flutter_app/models/chat/get_user_groups_by_id.dart' as groups;
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as user;
import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav;
@ -187,4 +188,24 @@ class ChatApiClient {
}
return imagesData;
}
//group chat apis start here.
Future<groups.GetUserGroups> getGroupsByUserId() async {
try {
Response response = await ApiClient().getJsonForResponse(
"${ApiConsts.getGroupByUserId}${AppState().chatDetails!.response!.id}",
token: AppState().chatDetails!.response!.token,
);
if (!kReleaseMode) {
logger.i("res: " + response.body);
}
return groups.GetUserGroups.fromRawJson(response.body);
} catch (e) {
//if fail api returning 500 hence just printing here
print(e);
throw e;
}
}
}

@ -77,7 +77,7 @@ class AppState {
bool get getIsDemoMarathon => _isDemoMarathon;
final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 3.9, mobileType: Platform.isAndroid ? "android" : "ios");
final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.2, mobileType: Platform.isAndroid ? "android" : "ios");
void setPostParamsInitConfig() {
isAuthenticated = false;
@ -180,5 +180,4 @@ class AppState {
}
bool cancelRequestTrancsection = true;
}

@ -3,8 +3,8 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
class ApiConsts {
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server
// static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA server
// static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
static String baseUrl = "https://hmgwebservices.com"; // Live server
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
// static String baseUrl = "https://hmgwebservices.com"; // Live server
static String baseUrlServices = baseUrl + "/Services/"; // server
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";
@ -19,6 +19,10 @@ class ApiConsts {
static String chatLoginTokenUrl = chatServerBaseApiUrl + "user/";
static String chatHubConnectionUrl = chatServerBaseUrl + "ConnectionChatHub";
//Groups
static String getGroupByUserId = chatServerBaseApiUrl + "group/getgroupsbyuserid/";
// static String chatSearchMember = chatLoginTokenUrl + "user/";
static String chatRecentUrl = chatServerBaseApiUrl + "UserChatHistory/"; //For a Mem
static String chatSingleUserHistoryUrl = chatServerBaseApiUrl + "UserChatHistory/";

@ -511,4 +511,6 @@ abstract class LocaleKeys {
static const noWinner = 'noWinner';
static const myTeam = 'myTeam';
static const youCanPlayDemo = 'youCanPlayDemo';
static const group = 'group';
static const searchGroup = 'searchGroup';
}

@ -16,7 +16,7 @@ import 'package:geolocator_web/geolocator_web.dart';
import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
import 'package:image_picker_for_web/image_picker_for_web.dart';
import 'package:just_audio_web/just_audio_web.dart';
import 'package:record_web/record_web.dart';
// import 'package:record_web/record_web.dart';
import 'package:shared_preferences_web/shared_preferences_web.dart';
import 'package:url_launcher_web/url_launcher_web.dart';
import 'package:video_player_web/video_player_web.dart';
@ -35,7 +35,7 @@ void registerPlugins(Registrar registrar) {
GoogleMapsPlugin.registerWith(registrar);
ImagePickerPlugin.registerWith(registrar);
JustAudioPlugin.registerWith(registrar);
RecordPluginWeb.registerWith(registrar);
//RecordPluginWeb.registerWith(registrar);
SharedPreferencesPlugin.registerWith(registrar);
UrlLauncherPlugin.registerWith(registrar);
VideoPlayerPlugin.registerWith(registrar);

@ -0,0 +1,260 @@
import 'dart:convert';
class GetUserGroups {
List<Response>? response;
Null? errorResponses;
GetUserGroups({this.response, this.errorResponses});
factory GetUserGroups.fromRawJson(String str) => GetUserGroups.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
GetUserGroups.fromJson(Map<String, dynamic> json) {
if (json['response'] != null) {
response = <Response>[];
json['response'].forEach((v) {
response!.add(new Response.fromJson(v));
});
}
errorResponses = json['errorResponses'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
if (this.response != null) {
data['response'] = this.response!.map((v) => v.toJson()).toList();
}
data['errorResponses'] = this.errorResponses;
return data;
}
}
class Response {
int? groupId;
String? groupName;
Null? groupIcon;
bool? isDeleted;
bool? isAdmin;
bool? canVideoC;
bool? canAudioC;
bool? canShareS;
bool? canAttach;
bool? canArchive;
bool? isMeeting;
Null? meetingTime;
Null? extUserLink;
int? callStatus;
int? groupUnreadMessageCount;
AdminUser? adminUser;
List<GroupUserList>? groupUserList;
Response(
{this.groupId,
this.groupName,
this.groupIcon,
this.isDeleted,
this.isAdmin,
this.canVideoC,
this.canAudioC,
this.canShareS,
this.canAttach,
this.canArchive,
this.isMeeting,
this.meetingTime,
this.extUserLink,
this.callStatus,
this.groupUnreadMessageCount,
this.adminUser,
this.groupUserList});
Response.fromJson(Map<String, dynamic> json) {
groupId = json['groupId'];
groupName = json['groupName'];
groupIcon = json['groupIcon'];
isDeleted = json['isDeleted'];
isAdmin = json['isAdmin'];
canVideoC = json['canVideoC'];
canAudioC = json['canAudioC'];
canShareS = json['canShareS'];
canAttach = json['canAttach'];
canArchive = json['canArchive'];
isMeeting = json['isMeeting'];
meetingTime = json['meetingTime'];
extUserLink = json['extUserLink'];
callStatus = json['callStatus'];
groupUnreadMessageCount = json['groupUnreadMessageCount'];
adminUser = json['adminUser'] != null
? new AdminUser.fromJson(json['adminUser'])
: null;
if (json['groupUserList'] != null) {
groupUserList = <GroupUserList>[];
json['groupUserList'].forEach((v) {
groupUserList!.add(new GroupUserList.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['groupId'] = this.groupId;
data['groupName'] = this.groupName;
data['groupIcon'] = this.groupIcon;
data['isDeleted'] = this.isDeleted;
data['isAdmin'] = this.isAdmin;
data['canVideoC'] = this.canVideoC;
data['canAudioC'] = this.canAudioC;
data['canShareS'] = this.canShareS;
data['canAttach'] = this.canAttach;
data['canArchive'] = this.canArchive;
data['isMeeting'] = this.isMeeting;
data['meetingTime'] = this.meetingTime;
data['extUserLink'] = this.extUserLink;
data['callStatus'] = this.callStatus;
data['groupUnreadMessageCount'] = this.groupUnreadMessageCount;
if (this.adminUser != null) {
data['adminUser'] = this.adminUser!.toJson();
}
if (this.groupUserList != null) {
data['groupUserList'] =
this.groupUserList!.map((v) => v.toJson()).toList();
}
return data;
}
}
class AdminUser {
int? id;
String? userName;
String? email;
Null? phone;
String? title;
int? userStatus;
Null? image;
int? unreadMessageCount;
Null? userAction;
bool? isPin;
bool? isFav;
bool? isAdmin;
Null? rKey;
int? totalCount;
AdminUser(
{this.id,
this.userName,
this.email,
this.phone,
this.title,
this.userStatus,
this.image,
this.unreadMessageCount,
this.userAction,
this.isPin,
this.isFav,
this.isAdmin,
this.rKey,
this.totalCount});
AdminUser.fromJson(Map<String, dynamic> json) {
id = json['id'];
userName = json['userName'];
email = json['email'];
phone = json['phone'];
title = json['title'];
userStatus = json['userStatus'];
image = json['image'];
unreadMessageCount = json['unreadMessageCount'];
userAction = json['userAction'];
isPin = json['isPin'];
isFav = json['isFav'];
isAdmin = json['isAdmin'];
rKey = json['rKey'];
totalCount = json['totalCount'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['userName'] = this.userName;
data['email'] = this.email;
data['phone'] = this.phone;
data['title'] = this.title;
data['userStatus'] = this.userStatus;
data['image'] = this.image;
data['unreadMessageCount'] = this.unreadMessageCount;
data['userAction'] = this.userAction;
data['isPin'] = this.isPin;
data['isFav'] = this.isFav;
data['isAdmin'] = this.isAdmin;
data['rKey'] = this.rKey;
data['totalCount'] = this.totalCount;
return data;
}
}
class GroupUserList {
int? id;
String? userName;
String? email;
Null? phone;
String? title;
int? userStatus;
Null? image;
int? unreadMessageCount;
int? userAction;
bool? isPin;
bool? isFav;
bool? isAdmin;
Null? rKey;
int? totalCount;
GroupUserList(
{this.id,
this.userName,
this.email,
this.phone,
this.title,
this.userStatus,
this.image,
this.unreadMessageCount,
this.userAction,
this.isPin,
this.isFav,
this.isAdmin,
this.rKey,
this.totalCount});
GroupUserList.fromJson(Map<String, dynamic> json) {
id = json['id'];
userName = json['userName'];
email = json['email'];
phone = json['phone'];
title = json['title'];
userStatus = json['userStatus'];
image = json['image'];
unreadMessageCount = json['unreadMessageCount'];
userAction = json['userAction'];
isPin = json['isPin'];
isFav = json['isFav'];
isAdmin = json['isAdmin'];
rKey = json['rKey'];
totalCount = json['totalCount'];
}
Map<String, dynamic> toJson() {
Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['userName'] = this.userName;
data['email'] = this.email;
data['phone'] = this.phone;
data['title'] = this.title;
data['userStatus'] = this.userStatus;
data['image'] = this.image;
data['unreadMessageCount'] = this.unreadMessageCount;
data['userAction'] = this.userAction;
data['isPin'] = this.isPin;
data['isFav'] = this.isFav;
data['isAdmin'] = this.isAdmin;
data['rKey'] = this.rKey;
data['totalCount'] = this.totalCount;
return data;
}
}

@ -21,6 +21,7 @@ import 'package:mohem_flutter_app/main.dart';
import 'package:mohem_flutter_app/models/chat/chat_user_image_model.dart';
import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
import 'package:mohem_flutter_app/models/chat/get_single_user_chat_list_model.dart';
import 'package:mohem_flutter_app/models/chat/get_user_groups_by_id.dart' as groups;
import 'package:mohem_flutter_app/models/chat/get_user_login_token_model.dart' as userLoginToken;
import 'package:mohem_flutter_app/models/chat/make_user_favotire_unfavorite_chat_model.dart' as fav;
import 'package:mohem_flutter_app/models/my_team/get_employee_subordinates_list.dart';
@ -40,6 +41,8 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
TextEditingController message = TextEditingController();
TextEditingController search = TextEditingController();
TextEditingController searchGroup = TextEditingController();
List<SingleUserChatModel> userChatHistory = [], repliedMsg = [];
List<ChatUser>? pChatHistory, searchedChats;
String chatCID = '';
@ -67,7 +70,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
late PlayerController playerController;
List<GetEmployeeSubordinatesList> getEmployeeSubordinatesList = [];
List<ChatUser> teamMembersList = [];
groups.GetUserGroups userGroups =groups.GetUserGroups();
Material.TextDirection textDirection = Material.TextDirection.ltr;
//Chat Home Page Counter
@ -125,6 +128,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
Future<void> getUserRecentChats() async {
ChatUserModel recentChat = await ChatApiClient().getRecentChats();
ChatUserModel favUList = await ChatApiClient().getFavUsers();
userGroups = await ChatApiClient().getGroupsByUserId();
if (favUList.response != null && recentChat.response != null) {
favUsersList = favUList.response!;
favUsersList.sort((ChatUser a, ChatUser b) => a.userName!.toLowerCase().compareTo(b.userName!.toLowerCase()));
@ -1466,4 +1470,11 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
}
}
}
//group chat functions added here
void filterGroups(String value) async {
// filter function added here.
notifyListeners();
}
}

@ -10,6 +10,7 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/ui/chat/chat_home_screen.dart';
import 'package:mohem_flutter_app/ui/chat/favorite_users_screen.dart';
import 'package:mohem_flutter_app/ui/chat/group_chat.dart';
import 'package:mohem_flutter_app/ui/chat/my_team_screen.dart';
import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
@ -46,6 +47,7 @@ class _ChatHomeState extends State<ChatHome> {
data.getUserAutoLoginToken().whenComplete(() async {
await data.buildHubConnection();
data.getUserRecentChats();
});
return;
}
@ -89,8 +91,9 @@ class _ChatHomeState extends State<ChatHome> {
child: Row(
children: <Widget>[
myTab(LocaleKeys.mychats.tr(), 0),
myTab(LocaleKeys.favorite.tr(), 1),
AppState().getempStatusIsManager ? myTab(LocaleKeys.myTeam.tr(), 2) : const SizedBox(),
myTab(LocaleKeys.group.tr(), 1),
myTab(LocaleKeys.favorite.tr(), 2),
AppState().getempStatusIsManager ? myTab(LocaleKeys.myTeam.tr(), 3) : const SizedBox(),
],
),
),
@ -104,6 +107,7 @@ class _ChatHomeState extends State<ChatHome> {
},
children: <Widget>[
ChatHomeScreen(),
GropChatHomeScreen(),
ChatFavoriteUsersScreen(),
AppState().getempStatusIsManager ? const MyTeamScreen() : const SizedBox(),
],

@ -0,0 +1,182 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/ui/chat/chat_detailed_screen.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/bottom_sheets/search_employee_bottom_sheet.dart';
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
import 'package:provider/provider.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class GropChatHomeScreen extends StatefulWidget {
const GropChatHomeScreen({Key? key}) : super(key: key);
@override
State<GropChatHomeScreen> createState() => _GropChatHomeScreenState();
}
class _GropChatHomeScreenState extends State<GropChatHomeScreen> {
TextEditingController search = TextEditingController();
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
search.clear();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: MyColors.white,
body: Consumer<ChatProviderModel>(
builder: (BuildContext context, ChatProviderModel m, Widget? child) {
return m.isLoading
? ChatHomeShimmer(
isDetailedScreen: false,
)
: Column(
children: <Widget>[
TextField(
controller: m.searchGroup,
style: const TextStyle(color: MyColors.darkTextColor, fontWeight: FontWeight.w500, fontSize: 12),
onChanged: (String val) {
m.filter(val);
},
decoration: InputDecoration(
border: fieldBorder(radius: 5, color: 0xFFE5E5E5),
focusedBorder: fieldBorder(radius: 5, color: 0xFFE5E5E5),
enabledBorder: fieldBorder(radius: 5, color: 0xFFE5E5E5),
contentPadding: const EdgeInsets.all(11),
hintText: LocaleKeys.searchGroup.tr(),
hintStyle: const TextStyle(color: MyColors.lightTextColor, fontStyle: FontStyle.italic, fontWeight: FontWeight.w500, fontSize: 12),
filled: true,
fillColor: MyColors.greyF7Color,
suffixIconConstraints: const BoxConstraints(),
suffixIcon: m.search.text.isNotEmpty
? IconButton(
constraints: const BoxConstraints(),
onPressed: () {
m.clearSelections();
},
icon: const Icon(Icons.clear, size: 22),
color: MyColors.redA3Color,
)
: null,
),
).paddingOnly(top: 20, bottom: 14),
if (m.userGroups.response != null)
ListView.separated(
itemCount: m.userGroups.response!.length,
shrinkWrap: true,
physics: const ClampingScrollPhysics(),
padding: const EdgeInsets.only(bottom: 80.0),
itemBuilder: (BuildContext context, int index) {
return SizedBox(
height: 55,
child: Row(
children: [
Container(
alignment: Alignment.center,
width: 48,
height: 48,
padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.0),
border: Border.all(width: 1, color: Colors.black),
),
child: SvgPicture.asset(
"assets/images/chat-group.svg",
)),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
(m.userGroups?.response![index].groupName!.toText14(color: MyColors.darkTextColor).paddingOnly(left: 11, top: 16)
)!.expanded,
])
],
),
).onPress(() {
Navigator.pushNamed(
context,
AppRoutes.chatDetailed,
arguments: ChatDetailedScreenParams(m.searchedChats![index], false),
).then((Object? value) {
m.clearSelections();
m.notifyListeners();
});
});
},
separatorBuilder: (BuildContext context, int index) => const Divider(color: MyColors.black).paddingOnly(left: 59),
).expanded,
],
).paddingOnly(left: 21, right: 21);
},
),
floatingActionButton: FloatingActionButton(
child: Container(
width: 60,
height: 60,
decoration: const BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
transform: GradientRotation(.46),
begin: Alignment.topRight,
end: Alignment.bottomLeft,
colors: [
MyColors.gradiantEndColor,
MyColors.gradiantStartColor,
],
),
),
child: const Icon(
Icons.add,
size: 30,
color: MyColors.white,
),
),
onPressed: () async {
print(AppState().chatDetails!.response!.token);
showMyBottomSheet(
context,
callBackFunc: () {},
child: SearchEmployeeBottomSheet(
title: LocaleKeys.searchForEmployee.tr(),
apiMode: LocaleKeys.delegate.tr(),
fromChat: true,
onSelectEmployee: (_selectedEmployee) {},
),
);
},
),
);
}
OutlineInputBorder fieldBorder({required double radius, required int color}) {
return OutlineInputBorder(
borderRadius: BorderRadius.circular(radius),
borderSide: BorderSide(
color: Color(color),
),
);
}
}
Loading…
Cancel
Save