मैं इस पैकेज का उपयोग करके स्पंदन एप्लिकेशन में 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) {
        
    }
});

क्या ऐसा कुछ है जो मैं गलत कर रहा हूँ?

1
chawila 19 जिंदा 2021, 18:35

1 उत्तर

सबसे बढ़िया उत्तर

मूल रूप से आपको इसके लिए 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) {
        
    }
});
1
ThaCoder 21 जिंदा 2021, 10:53