ChatScreen.dart 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_chat_ui/flutter_chat_ui.dart';
  4. import 'package:flutter_chat_types/flutter_chat_types.dart' as types;
  5. import 'dart:math';
  6. import '../basic/Entities.dart';
  7. import '../basic/Method.dart';
  8. String randomString() {
  9. final random = Random.secure();
  10. final values = List<int>.generate(16, (i) => random.nextInt(255));
  11. return base64UrlEncode(values);
  12. }
  13. class ChatScreen extends StatefulWidget {
  14. const ChatScreen(this.profile, this.roomId, {Key? key}) : super(key: key);
  15. final Profile profile;
  16. final String roomId;
  17. @override
  18. State<ChatScreen> createState() => _ChatScreenState();
  19. }
  20. class _ChatScreenState extends State<ChatScreen> {
  21. late List<types.Message> _messages = [];
  22. @override
  23. void initState() {
  24. _load();
  25. super.initState();
  26. }
  27. Future _load() async {
  28. final ret = await method.getMessages(widget.roomId) ?? [];
  29. setState(() {
  30. _messages = ret;
  31. });
  32. }
  33. @override
  34. Widget build(BuildContext context) => Scaffold(
  35. body: Chat(
  36. messages: _messages,
  37. onSendPressed: _handleSendPressed,
  38. user: method.user,
  39. ),
  40. );
  41. void _addMessage(types.Message message) {
  42. setState(() {
  43. _messages.insert(0, message);
  44. });
  45. }
  46. void _handleSendPressed(types.PartialText message) {
  47. final textMessage = types.TextMessage(
  48. author: method.user,
  49. id: randomString(),
  50. text: message.text,
  51. );
  52. method.sendMessage(widget.roomId, types.MessageType.text, message.text);
  53. _addMessage(textMessage);
  54. }
  55. }