如何解决为 Flutter 创建多个 Laravel Echo 实例 代码片段:在一页中聆听示例
我正在尝试使用此包在 Flutter 应用程序中添加 websockets
:laravel_echo: ^0.2.9。
我的应用程序中有通知和消息,所以如果我只为这两个创建 websocket
,它工作正常。但是,如果我添加第二个 websocket
,它们都会停止工作。
代码片段:
pusher_socket.dart
class PusherSocket {
Echo socket({ String authToken }){
PusherAuth _auth = PusherAuth(
'https://api.example.com/broadcasting/auth',headers: {
'Authorization': '$authToken',},);
PusherOptions options = PusherOptions(
host: "api.example.com",port: 6003,encrypted: true,auth: _auth,cluster: "CLT",);
FlutterPusher pusher = FlutterPusher("MY_KEY",options,enableLogging: false );
return new Echo({
'broadcaster': 'pusher','client': pusher,});
}
}
在一页中聆听
Echo echo = new PusherSocket().socket(authToken: conversationProvider.authToken);
echo
.join("conversation.${conversationProvider.conversation.id}")
.listen('NewMessage',(data) {
print(data);
try {
final message = data;
Message _message = Message.fromJson(message);
conversationProvider.addMessage(message: _message);
} catch (error) {
}
});
我做错了什么吗?
解决方法
基本上您不需要为此创建两个 websockets
实例。您可以创建一个全局 websocket
,然后在整个应用程序中使用它。
示例。
这里我在 websocket
中实例化了 AuthProvider
因为我知道 AuthProvider
将包含在应用程序的根目录中,使其可用于所有子 Widgets
:
pusher_socket.dart
class PusherSocket {
Echo socket({ String authToken }){
PusherAuth _auth = PusherAuth(
'https://api.example.com/broadcasting/auth',headers: {
'Authorization': '$authToken',},);
PusherOptions options = PusherOptions(
host: "api.example.com",port: 6003,encrypted: true,auth: _auth,cluster: "CLT",);
FlutterPusher pusher = FlutterPusher("MY_KEY",options,enableLogging: false );
return new Echo({
'broadcaster': 'pusher','client': pusher,});
}
}
auth_provider.dart
class AuthProvider with ChangeNotifier {
String authToken;
Echo echo;
Future<void> sigin({@required email,@required password}) async {
/**
* the logic for login
* goes here
*/
// Set echo if not set
if (echo == null && authToken != null) {
echo = PusherSocket().socket(authToken: authToken);
print("Prepare echo");
}
//notify others
notifyListeners();
}
conversation_page.dart
final authProvider = Provider.of<AuthProvider>(context);
authProvider.echo
.join("conversation.${conversationProvider.conversation.id}")
.listen('NewMessage',(data) {
print(data);
try {
final message = data;
Message _message = Message.fromJson(message);
conversationProvider.addMessage(message: _message);
} catch (error) {
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。