Flutter 为颤振创建多个Laravel Echo实例

Flutter 为颤振创建多个Laravel Echo实例,flutter,dart,websocket,laravel-echo,Flutter,Dart,Websocket,Laravel Echo,我正在尝试使用以下软件包在颤振应用程序中添加websockets: 我的应用程序中有通知和消息,因此如果我只为这两个应用程序中的一个创建websocket,它就可以正常工作。但是,如果我添加第二个websocket,它们都会停止工作 代码snipet: 推杆式套筒省道 在一页中聆听 注意:我想在不同的页面中使用此代码 有什么我做错了吗?基本上你不需要为此创建两个websockets实例。您可以创建一个全局websocket,然后在整个应用程序中使用它 例子。 在这里,我在AuthProvider

我正在尝试使用以下软件包在颤振应用程序中添加
websockets

我的应用程序中有通知和消息,因此如果我只为这两个应用程序中的一个创建
websocket
,它就可以正常工作。但是,如果我添加第二个
websocket
,它们都会停止工作

代码snipet: 推杆式套筒省道

在一页中聆听 注意:我想在不同的页面中使用此代码


有什么我做错了吗?基本上你不需要为此创建两个
websockets
实例。您可以创建一个全局
websocket
,然后在整个应用程序中使用它

例子。 在这里,我在
AuthProvider
中实例化了
websocket
,因为我知道
AuthProvider
将包含在应用程序的根目录中,使其可用于所有子
小部件

推杆式套筒省道

auth_provider.dart


使用ChangeNotifier类AuthProvider{
字符串authToken;
回声;
将来的sigin({@required email,@required password})异步{
/**
*登录的逻辑
*去这里
*/
//如果未设置,则设置回显
if(echo==null&&authToken!=null){
echo=PusherSocket().socket(authToken:authToken);
打印(“准备回音”);
}
//通知他人
notifyListeners();
}
对话_page.dart


final authProvider=Provider.of(上下文);
authProvider.echo
.join(“conversation.${conversationProvider.conversation.id}”)
.listen('NewMessage',(数据){
打印(数据);
试一试{
最终消息=数据;
Message _Message=Message.fromJson(Message);
addMessage(消息:_消息);
}捕获(错误){
}
});

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) {
        
    }
});
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,
      });
  }
}

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();
  }


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) {
        
    }
});