46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| 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;
 | |
|   }
 | |
| }
 |