Messaging
Implemented Chat Screens, Profile Pages, Search Pages WIP: User profile, new chat button Intended: Groups, Calls, Voice Messages Properly deleting chats, offline storage of messages
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:messaging_app/components/messaging_provider.dart';
|
||||
import 'package:messaging_app/models/users.dart';
|
||||
import 'package:messaging_app/pages/conversations_page.dart';
|
||||
import 'package:messaging_app/service/navigation_service.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:timeago/timeago.dart' as timeago;
|
||||
|
||||
@@ -21,7 +25,8 @@ class SearchPage extends StatefulWidget {
|
||||
|
||||
class _SearchPageState extends State<SearchPage> {
|
||||
late String _searchText;
|
||||
late List<Users> _usersData;
|
||||
late List<User> _usersData;
|
||||
//
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -31,12 +36,14 @@ class _SearchPageState extends State<SearchPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
height: widget.deviceHeight,
|
||||
width: widget.deviceWidth,
|
||||
child: ChangeNotifierProvider.value(
|
||||
value: MessagingProviders.instance,
|
||||
child: _searchPaheUI(),
|
||||
return SingleChildScrollView(
|
||||
child: SizedBox(
|
||||
height: widget.deviceHeight,
|
||||
width: widget.deviceWidth,
|
||||
child: ChangeNotifierProvider.value(
|
||||
value: MessagingProviders.instance,
|
||||
child: _searchPaheUI(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -82,7 +89,7 @@ class _SearchPageState extends State<SearchPage> {
|
||||
}
|
||||
|
||||
Widget _searchPageUIList() {
|
||||
return StreamBuilder<List<Users>>(
|
||||
return StreamBuilder<List<User>>(
|
||||
stream: MessagingProviders.instance.getAllUsers(_searchText.trim()),
|
||||
builder: (_, _snapshot) {
|
||||
if (_snapshot.hasData) {
|
||||
@@ -105,6 +112,53 @@ class _SearchPageState extends State<SearchPage> {
|
||||
),
|
||||
);
|
||||
return ListTile(
|
||||
enabled: true,
|
||||
onTap: () async {
|
||||
String _chatId;
|
||||
String _linkId =
|
||||
'${widget._auth.user!.$id}${_userData.id}';
|
||||
|
||||
_chatId = await MessagingProviders.instance
|
||||
.getConversationLink(
|
||||
_linkId.substring(0, 36));
|
||||
|
||||
if (_chatId.isEmpty) {
|
||||
List<dynamic> _members = [
|
||||
widget._auth.user!.$id,
|
||||
_userData.id
|
||||
];
|
||||
|
||||
List<String> messagesTemp = [];
|
||||
messagesTemp = [
|
||||
json.encode({
|
||||
widget._auth.user!.$id: [],
|
||||
}),
|
||||
json.encode({
|
||||
_userData.id: [],
|
||||
})
|
||||
];
|
||||
|
||||
Map<String, dynamic> _chat = {
|
||||
"ownerId": widget._auth.user!.$id,
|
||||
"members": _members,
|
||||
"messages": messagesTemp
|
||||
};
|
||||
_chatId = await MessagingProviders.instance
|
||||
.newMesaage(_chat);
|
||||
}
|
||||
|
||||
NavigationService.instance.navigateToRoute(
|
||||
MaterialPageRoute(
|
||||
builder: (BuildContext _context) {
|
||||
return ConversationsPage(
|
||||
chatId: _chatId,
|
||||
chatName: _userData.name,
|
||||
chatImage: _userData.image,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
title: Text(_userData.name),
|
||||
leading: Container(
|
||||
width: 50,
|
||||
|
||||
Reference in New Issue
Block a user