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.value( value: MessagingProviders.instance, child: _conversationView(), ), ); } Widget _conversationView() { return Builder(builder: (_context) { SnackBarService.instance.buildContext = _context; _auth = Provider.of(_context); return SizedBox( height: _deviceHeight, width: _deviceWidth, child: StreamBuilder>( 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), ) ], ); } }