Использовать SignalR при флаттере

#flutter #dart #signalr

#флаттер #dart #signalr

Вопрос:

Я новичок в фреймворке Flutter

Я хочу использовать signalr для flutter для подключения к серверу и получения уведомлений

приведенный ниже код показывает, как я это делаю на Java:

             Platform.loadPlatformComponent(new AndroidPlatformComponent());

            Credentials credentials = new Credentials() {
                @Override
                 public void prepareRequest(Request request) {
                    request.addHeader("username", userId);
                }
            };
            String serverUrl = "http://www.xxxxx.org/";
            mHubConnection = new HubConnection(serverUrl);
            mHubConnection.setCredentials(credentials);
            String SERVER_HUB_CHAT = "notificationHub";
            mHubProxy = mHubConnection.createHubProxy(SERVER_HUB_CHAT);
            ClientTransport clientTransport = new ServerSentEventsTransport(mHubConnection.getLogger());
            SignalRFuture<Void> signalRFuture = mHubConnection.start(clientTransport);

            try {
                signalRFuture.get();
            } catch (Exception ex) {
                UtilFunctions.showToastMessage(getApplicationContext(), ex);
                return;
            }

            String SERVER_METHOD_SEND = "SendNotifications";
            mHubProxy.invoke(SERVER_METHOD_SEND);

            mHubProxy.on("ReceiveNotification", new SubscriptionHandler1<String>() {
                @Override
                public void run(final String string) {
                   ......
                }
            }, String.class);
  

Но я не могу реализовать на flutter

Ценю любую помощь.

Заранее спасибо.

Ответ №1:

Добавить signalr_client 0.1.6

импорт import 'package:signalr_client/signalr_client.dart';

создайте метод, подобный этому:

 void StartSocket() async {

  final serverUrl = "server_url";

  final httpOptions = new HttpConnectionOptions(accessTokenFactory: GetToken); //optional

  hubConnection = HubConnectionBuilder().withUrl(serverUrl, options: httpOptions).build();

  hubConnection.serverTimeoutInMilliseconds = 10 * 60 * 60 * 1000;
  hubConnection.keepAliveIntervalInMilliseconds = 10 * 60 * 60 * 1000;
  await hubConnection.start();

  hubConnection.onclose((error) {
    print("Connection Closed");
    StartSocket();
  });
}
  

для вызова серверной функции используйте :

 hubConnection.invoke("server_function_name");
  

для определения функции, которую сервер может вызывать :

 hubConnection.on("client_function_name", (List<Object> parameters) {
  
});