import 'package:flutter/material.dart'; import 'package:marianum_mobile/api/marianumcloud/talk/room/getRoomResponse.dart'; import 'package:marianum_mobile/data/chatList/chatProps.dart'; import 'package:marianum_mobile/screen/pages/talk/chatBubble.dart'; import 'package:marianum_mobile/screen/pages/talk/chatTextfield.dart'; import 'package:provider/provider.dart'; class ChatView extends StatefulWidget { final GetRoomResponseObject room; final String selfId; final CircleAvatar avatar; const ChatView({Key? key, required this.room, required this.selfId, required this.avatar}) : super(key: key); @override State createState() => _ChatViewState(); } class _ChatViewState extends State { final ScrollController _listController = ScrollController(); @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { Provider.of(context, listen: false).setQueryToken(widget.room.token); }); } @override Widget build(BuildContext context) { return Consumer( builder: (context, data, child) { List messages = List.empty(growable: true); if(!data.primaryLoading()) { data.getChatResponse.sortByTimestamp().forEach((element) { messages.add(ChatBubble(context: context, isSender: element.actorId == widget.selfId, bubbleData: element, chatData: widget.room).generateBubble()); }); } return Scaffold( backgroundColor: const Color(0xffefeae2), appBar: AppBar( title: Row( children: [ widget.avatar, const SizedBox(width: 10), Expanded( child: Text(widget.room.displayName, overflow: TextOverflow.ellipsis, maxLines: 1), ) ], ), ), body: Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage("assets/background/chat.png"), scale: 1.5, opacity: 0.5, repeat: ImageRepeat.repeat, colorFilter: ColorFilter.linearToSrgbGamma() ) ), child: data.primaryLoading() ? const Center(child: CircularProgressIndicator()) : Column( children: [ Expanded( child: ListView( reverse: true, controller: _listController, children: messages.reversed.toList(), ), ), ChatTextfield(widget.room.token), ], ) ), ); }, ); } }