3 votes

Comment obtenir des données client Socket IO dans Flutter ?

Bonjour, je souhaite réaliser un Socket IO dans Flutter, pour cela j'utilise l'exemple ci-dessous mais je ne peux pas voir les données que j'émets sur ce canal particulier, j'utilise à la fois l'émulateur et le dispositif physique mais le mot "TEST" que j'émets sur le canal de chat ne s'imprime pas sur la console, merci de m'aider.

Exemple :

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:socket_flutter_plugin/socket_flutter_plugin.dart';

void main() => runApp(new MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    try {
      SocketFlutterPlugin myIO = new SocketFlutterPlugin();
      myIO.socket("http://10.2.2.22:9006");
      myIO.connect();
      String jsonData =
              '{"content":"test"}';
      myIO.emit("chat",jsonData);
      myIO.on("chat",(data){
        debugPrint(data.toString());
      });
    } on PlatformException {

      _platformVersion = 'Failed to get platform version.';
    }
  }

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: const Text('Plugin example app'),
        ),
        body: new Center(
          child: new Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}

Sortie : :

Launching lib\main.dart on Android SDK built for x86 in debug mode...
Built build\app\outputs\apk\debug\app-debug.apk.
D/SocketIO (18242): Socket initialised
D/SocketIO  (18242): Connected
D/SocketIO  (18242): Pushing {"content":"test"} on topic chat
D/SocketIO  (18242): registering to chat topic
D/NetworkSecurityConfig(18242): No Network Security Config specified, using platform default
D/        (18242): HostConnection::get() New Host Connection established 0x9fc9d980, tid 18264
D/EGL_emulation(18242): eglMakeCurrent: 0x9c1f32e0: ver 2 0 (tinfo 0x9fc83550)

1voto

barryloh Points 101

Utilisation de ce paquet flutter_socket_io J'ai pu me connecter à un serveur Socket IO.

import 'package:flutter_socket_io/flutter_socket_io.dart';
import 'package:flutter_socket_io/socket_io_manager.dart';

...

class _MyAppState extends State<MyApp> {

    SocketIO socket;

    ...

    void _onInitSocketIO() {
        socket = SocketIOManager().createSocketIO("http://10.2.2.22:9006", "/", query: "", socketStatusCallback: _onSocketStatus);
        socket.init();
        socket.connect();
    }

    void _onSocketStatus(dynamic data) {
        // If socket connects successfully
        if (data == "connect") {
            // Send message to server on the 'chat' event.
            String jsonData = '{"content":"test"}';
            socket.sendMessage('chat', jsonData);

            // Subscribe to the 'chat' event.
            socket.subscribe("chat", _onReceiveChatEvent);
        }
    }

    void _onReceiveChatEvent(dynamic data) {
        debugPrint(data);
    }

}

0voto

Muldec Points 3400

Je dirais que vous émettez avant d'écouter, et que vous ne pouvez donc pas entendre ce que vous émettez (puisque vous n'écoutez pas)...

Essayez d'inverser la séquence de emit y on ainsi

  myIO.on("chat",(data){
    debugPrint(data.toString());
  });
  myIO.emit("chat",jsonData);

et de déplacer la décalaration de myIO au niveau de l'État :

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  SocketFlutterPlugin myIO;

  // ...

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    try {
      myIO = new SocketFlutterPlugin();
      //...
    }
    //...
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X