本篇将重点放在处理Flutter client端
一样也是和GetX做结合
Widget部分 全部贴出来篇幅会很冗长 更细部的请参考置底的GitHub link
class SocketIOPage extends GetView<SocketIOPageController> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Obx(() {
final stateString = controller.isOnConnect ? "已连线" : "未连线";
return Text('聊天室 状态: $stateString');
}),
actions: [
IconButton(
icon: Icon(Icons.call),
onPressed: () {
controller.makeCall();
},
),
],
),
body: GestureDetector(
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
child: SafeArea(
child: Obx(
() {
return Column(
children: [
Expanded(child: _buildMessageListView()),
_buildTextFieldRow(),
],
);
},
),
),
),
);
}
controller部分
class SocketIOPageController extends GetxController {
final textEditingController = TextEditingController();
late IO.Socket socket;
final _isOnConnect = false.obs;
set isOnConnect(value) => this._isOnConnect.value = value;
get isOnConnect => this._isOnConnect.value;
final _message = ''.obs;
set message(value) => this._message.value = value;
get message => this._message.value;
//应该是要带变数 但目前先写a
final _room = 'a'.obs;
set room(value) => this._room.value = value;
get room => this._room.value;
//应该是要带变数 但目前先写Flutter_client
final _userName = 'Flutter_client'.obs;
set userName(value) => this._userName.value = value;
get userName => this._userName.value;
final _messageList = <String>[].obs;
get messageList => _messageList.toList();
@override
onInit() {
connectSokcetIO();
super.onInit();
}
connectSokcetIO() {
//因为我架在自己本机, 大家要把ip要换成自己的
socket = IO.io('ws://192.168.x.xx:8090', <String, dynamic>{
'transports': ['websocket']
});
socket.onConnect((_) {
print('on connect');
// socket.emit('msg', 'test');
isOnConnect = true;
socket.on('joined', (data) {
print('joined');
//room, id
print(data.runtimeType);
print(data);
});
});
socket.on('message', (data) {
print('message: ${data[1]}');
// print(data.runtimeType);
// print(data);
final messageContent = data[1];
_messageList.add(messageContent);
});
socket.onDisconnect((data) {
print('disconnect');
print(data);
});
socket.onConnectError((data) {
print(data);
});
socket.emit('join', room);
}
sendMessage() {
final sendData = userName + ':' + textEditingController.text;
socket.emit('message', [room, sendData]);
textEditingController.text = '';
}
最後一起的大合体
下一篇将为大家介绍 Native_splash
<<: Day27 用於AR的3D物件制作过程,一路凄凄惨惨惨惨凄凄
Isogram 等级:7kyu 原始题目isogram的解释 An isogram is a wor...
这篇我们要来讲到isNaN这个函式,这是一个用来判断输入资料是不是数字的函式。 这个函式的结构如下:...
宽广的室外网球场上,学生们正在做发球考试的练习。 「嘿!」女孩左手将球向上轻抛,右手握拍奋力用全身的...
看到标题有个(二)该不会又是很长的系列文了吧!? 并不会。 因为有点复杂。微懒。 抓取目前所在位子 ...
Vue中还有一个很重要的指令就是事件绑定v-on,让DOM可以去做更多的事情。 v-on事件绑定(简...