Maintain basic messaging websocket

This commit is contained in:
2024-04-18 22:33:55 +08:00
parent 8943f089f2
commit 94f9076abb
52 changed files with 288 additions and 101 deletions

View File

@ -0,0 +1,45 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:solian/models/message.dart';
import 'package:solian/models/packet.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/providers/chat.dart';
class ChatMaintainer extends StatefulWidget {
final Widget child;
final Function(Message val) onNewMessage;
const ChatMaintainer({super.key, required this.child, required this.onNewMessage});
@override
State<ChatMaintainer> createState() => _ChatMaintainerState();
}
class _ChatMaintainerState extends State<ChatMaintainer> {
@override
void initState() {
Future.delayed(Duration.zero, () {
final auth = context.read<AuthProvider>();
final chat = context.read<ChatProvider>();
chat.connect(auth).then((snapshot) {
snapshot!.stream.listen((event) {
final result = NetworkPackage.fromJson(jsonDecode(event));
switch (result.method) {
case 'messages.new':
widget.onNewMessage(Message.fromJson(result.payload!));
}
});
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return widget.child;
}
}

View File

@ -46,7 +46,11 @@ class ChatMessage extends StatelessWidget {
return Row(
children: [
const SizedBox(width: 40),
Expanded(child: contentPart),
Expanded(
child: Column(
children: [contentPart, renderAttachment()],
),
),
],
);
} else {