import 'dart:async'; 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 StatefulWidget { // final double _deviceHeight; final double _deviceWidth; const RecentConverstationsPage(this._deviceHeight, this._deviceWidth, {super.key}); @override State createState() => _RecentConverstationsPageState(); } class _RecentConverstationsPageState extends State { late MessagingProviders _auth; final myController = StreamController>.broadcast(); Stream> get messageStream => myController.stream; void messager() { MessagingProviders.instance.getUserConversation(_auth.user!.$id); } void dispose() { myController.close(); } @override Widget build(BuildContext context) { return SizedBox( height: widget._deviceHeight, width: widget._deviceWidth, child: ChangeNotifierProvider.value( value: MessagingProviders.instance, child: _conversationView(context), ), ); } Widget _conversationView(BuildContext _context) { return Builder(builder: (BuildContext _context) { SnackBarService.instance.buildContext = _context; _auth = Provider.of(_context); return SizedBox( height: widget._deviceHeight, width: widget._deviceWidth, child: StreamBuilder>( stream: MessagingProviders.instance .getUserConversation(_auth.user!.$id), builder: (_context, _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( chatId: _chatId, chatName: _details.name, chatImage: _details.image, ); }, ), ); }, title: Text(_details.name), subtitle: Text( _details.type == 'text' ? _details.lastMessage! : 'attachment: image', ), 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), ); }, ); } else 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), ) ], ); } }