Recent Conversations Page, Conversations Page implemented'
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||
import 'package:messaging_app/components/messaging_provider.dart';
|
||||
import 'package:messaging_app/models/conversations.dart';
|
||||
import 'package:messaging_app/pages/conversations_page.dart';
|
||||
import 'package:messaging_app/service/navigation_service.dart';
|
||||
import 'package:messaging_app/service/snackbar_service.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:timeago/timeago.dart' as timeago;
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class RecentConverstationsPage extends StatelessWidget {
|
||||
//
|
||||
final double _deviceHeight;
|
||||
final double _deviceWidth;
|
||||
late MessagingProviders _auth;
|
||||
|
||||
RecentConverstationsPage(this._deviceHeight, this._deviceWidth);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
height: _deviceHeight,
|
||||
width: _deviceWidth,
|
||||
child: ChangeNotifierProvider<MessagingProviders>.value(
|
||||
value: MessagingProviders.instance,
|
||||
child: _conversationView(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _conversationView() {
|
||||
return Builder(builder: (_context) {
|
||||
SnackBarService.instance.buildContext = _context;
|
||||
_auth = Provider.of<MessagingProviders>(_context);
|
||||
return SizedBox(
|
||||
height: _deviceHeight,
|
||||
width: _deviceWidth,
|
||||
child: StreamBuilder<List<Conversations>>(
|
||||
stream: MessagingProviders.instance
|
||||
.getUserConversation(_auth.user!.$id),
|
||||
builder: (_, _snapshot) {
|
||||
if (_snapshot.hasData) {
|
||||
return ListView.builder(
|
||||
itemCount: _snapshot.data!.length,
|
||||
itemBuilder: (_context, _index) {
|
||||
var _details = _snapshot.data![_index].details;
|
||||
var _chatId = _snapshot.data![_index].chatId;
|
||||
return ListTile(
|
||||
onTap: () {
|
||||
//
|
||||
NavigationService.instance.navigateToRoute(
|
||||
MaterialPageRoute(
|
||||
builder: (BuildContext _context) {
|
||||
return ConversationsPage(
|
||||
conversationId: _chatId,
|
||||
chatName: _details.name,
|
||||
chatImage: _details.image,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
title: Text(_details.name),
|
||||
subtitle: Text(_details.lastMessage!),
|
||||
leading: Container(
|
||||
width: 50,
|
||||
height: 50,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
image: DecorationImage(
|
||||
fit: BoxFit.cover,
|
||||
image: NetworkImage(_details.image),
|
||||
),
|
||||
),
|
||||
),
|
||||
trailing: _listTrailingWidget(_details.timeStamp),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
if (_snapshot.hasError) {
|
||||
return Align(
|
||||
child: Text(
|
||||
"no active conversation",
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 20,
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return SpinKitWanderingCubes(
|
||||
color: Colors.blue,
|
||||
size: 50.0,
|
||||
);
|
||||
}
|
||||
}),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Widget _listTrailingWidget(DateTime? _date) {
|
||||
return Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
"last message",
|
||||
style: TextStyle(fontSize: 15),
|
||||
),
|
||||
Text(
|
||||
timeago.format(_date!),
|
||||
style: TextStyle(fontSize: 15),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user