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