Skip to content

Commit ffac87d

Browse files
feat: 支持 fluter 版本
1 parent aad872c commit ffac87d

File tree

10 files changed

+500
-94
lines changed

10 files changed

+500
-94
lines changed

android/app/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<application
44
android:label="flutter_app"
55
android:name="${applicationName}"
6+
android:usesCleartextTraffic="true"
67
android:icon="@mipmap/ic_launcher">
78
<activity
89
android:name=".MainActivity"

lib/chat_room.dart

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:socket_io_client/socket_io_client.dart' as IO;
3+
import 'dart:convert';
4+
5+
import './msg_list.dart';
6+
import './msg_form.dart';
7+
8+
class ChatRoom extends StatefulWidget {
9+
const ChatRoom({Key? key}) : super(key: key);
10+
11+
@override
12+
_ChatRoomState createState() => _ChatRoomState();
13+
}
14+
15+
class _ChatRoomState extends State {
16+
final List<Map> _list = [];
17+
late IO.Socket _socket;
18+
bool _connected = false;
19+
String _id = '';
20+
21+
@override
22+
void initState() {
23+
super.initState();
24+
25+
_connect();
26+
}
27+
28+
@override
29+
void dispose() {
30+
super.dispose();
31+
_connected = false;
32+
_id = '';
33+
_socket.disconnect();
34+
_socket.destroy();
35+
_socket.close();
36+
print('close socket');
37+
// if (null != _socket) {
38+
// _socket.disconnect();
39+
// _socket.destroy();
40+
// _socket.close();
41+
// print('close socket');
42+
// _socket = null;
43+
// }
44+
}
45+
46+
void _connect() {
47+
print('new connect');
48+
_socket = IO.io("http://192.168.16.119:3001/",
49+
IO.OptionBuilder().setTransports(['websocket']).build());
50+
_socket.onConnect((_) {
51+
print('connect');
52+
setState(() {
53+
_connected = _socket.connected;
54+
print(_socket.id);
55+
_id = _socket.id!;
56+
});
57+
});
58+
_socket.onDisconnect((_) {
59+
print('disconnect');
60+
setState(() {
61+
_connected = _socket.connected;
62+
});
63+
});
64+
_socket.on('connect_error', (dynamic str) {
65+
_connected = _socket.connected;
66+
print('connect_error: $str');
67+
});
68+
_socket.on('error', (dynamic str) {
69+
print('error: $str');
70+
});
71+
72+
_socket.on('message', (dynamic str) {
73+
setState(() {
74+
_list.add(jsonDecode(str));
75+
});
76+
});
77+
_socket.on('history', (dynamic str) {
78+
List<Map> l = [];
79+
jsonDecode(str).forEach((it) {
80+
l.add(jsonDecode(it));
81+
});
82+
setState(() {
83+
_list.addAll(l);
84+
});
85+
});
86+
}
87+
88+
bool _sendMsg(String msg) {
89+
if (true != _connected || '' == _id) {
90+
print('sendMsg failed!');
91+
return false;
92+
}
93+
final Map<String, dynamic> data = {
94+
'type': 'message',
95+
'userId': _id,
96+
'message': msg,
97+
};
98+
_socket.emit("message", jsonEncode(data));
99+
return true;
100+
}
101+
102+
@override
103+
Widget build(BuildContext context) {
104+
return Column(children: [
105+
Expanded(child: MsgList(list: _list)),
106+
MsgForm(connected: _connected, userId: _id, onSubmit: _sendMsg),
107+
]);
108+
}
109+
}

0 commit comments

Comments
 (0)