我正在使用adhara socket io with flutter来构建套接字应用程序。 https://pub.dartlang.org/packages/adhara_socket_io套接字连接成功,但没有监听或向我发生的事件发送任何数据。我从网络客户端测试一切都很完美。
这是我正在使用的库提供的示例代码:
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:adhara_socket_io/adhara_socket_io.dart';
void main() => runApp(MyApp());
const String URI = "http://172.25.1.206:6001/";
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<String> toPrint = ["trying to conenct"];
SocketIOManager manager;
SocketIO socket;
bool isProbablyConnected = false;
@override
void initState() {
super.initState();
manager = SocketIOManager();
initSocket();
}
initSocket() async {
setState(() => isProbablyConnected = true);
socket = await manager.createInstance(
//Socket IO server URI
URI,
//Query params - can be used for authentication
query: {
"auth": "--SOME AUTH STRING---",
"info": "new connection from adhara-socketio"
},
//Enable or disable platform channel logging
enableLogging: false
);
socket.onConnect((data) {
pprint("connected...");
pprint(data);
sendMessage();
});
socket.onConnectError(pprint);
socket.onConnectTimeout(pprint);
socket.onError(pprint);
socket.onDisconnect(pprint);
socket.on("ExampleEvent", (data) {
pprint("news");
pprint(data);
});
socket.connect();
}
disconnect(){
manager.clearInstance(socket);
setState(() => isProbablyConnected = false);
}
sendMessage() {
if (socket != null) {
pprint("sending message...");
socket.emit("ExampleEvent", [
"Hello world!",
1908,
{
"wonder": "Woman",
"comics": ["DC", "Marvel"]
},
{
"test": "=!./"
},
[
"I'm glad",
2019,
{
"come back": "Tony",
"adhara means": ["base", "foundation"]
},
{
"test": "=!./"
},
]
]);
pprint("Message emitted...");
}
}
pprint(data) {
setState(() {
if (data is Map) {
data = json.encode(data);
}
print(data);
toPrint.add(data);
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
textTheme: TextTheme(
title: TextStyle(color: Colors.white),
headline: TextStyle(color: Colors.white),
subtitle: TextStyle(color: Colors.white),
subhead: TextStyle(color: Colors.white),
body1: TextStyle(color: Colors.white),
body2: TextStyle(color: Colors.white),
button: TextStyle(color: Colors.white),
caption: TextStyle(color: Colors.white),
overline: TextStyle(color: Colors.white),
display1: TextStyle(color: Colors.white),
display2: TextStyle(color: Colors.white),
display3: TextStyle(color: Colors.white),
display4: TextStyle(color: Colors.white),
),
buttonTheme: ButtonThemeData(
padding: EdgeInsets.symmetric(vertical: 24.0, horizontal: 12.0),
disabledColor: Colors.lightBlueAccent.withOpacity(0.5),
buttonColor: Colors.lightBlue,
splashColor: Colors.cyan
)
),
home: Scaffold(
appBar: AppBar(
title: const Text('Adhara Socket.IO example'),
backgroundColor: Colors.black,
elevation: 0.0,
),
body: Container(
color: Colors.black,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Center(
child: ListView(
children: toPrint.map((String _) => Text(_ ?? "")).toList(),
),
)),
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
margin: EdgeInsets.symmetric(horizontal: 8.0),
child: RaisedButton(
child: Text("Connect"),
onPressed: isProbablyConnected?null:initSocket,
),
),
Container(
margin: EdgeInsets.symmetric(horizontal: 8.0),
child: RaisedButton(
child: Text("Send Message"),
onPressed: isProbablyConnected?sendMessage:null,
)
),
Container(
margin: EdgeInsets.symmetric(horizontal: 8.0),
child: RaisedButton(
child: Text("Disconnect"),
onPressed: isProbablyConnected?disconnect:null,
)
),
],
),
SizedBox(height: 12.0,)
],
),
),
),
);
}
}
你可以尝试下面的图书馆。我试图订阅频道并听取事件,但效果很好。
如果您使用的是Android Studio模拟器,则使用http://10.0.2.2:7000
作为URI(根据您的localhost
更改端口,例如.3000
或3001
)。上面的URI有助于获取您的实际设备(您的计算机)本地主机。我试过这个并且成功地使用了Adhara_socket_io。