美文网首页Flutter开发圈
flutter断网后自动重连websocket

flutter断网后自动重连websocket

作者: 渣渣曦 | 来源:发表于2019-03-31 10:10 被阅读234次

锁屏自动重连websocket

import 'package:flutter/foundation.dart';
import 'package:web_socket_channel/io.dart';
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final title = '192';
    return MaterialApp(
      title: title,
      home: MyHomePage(
        title: title,
        channel: IOWebSocketChannel.connect('ws://192.168.3.4:8088/echo'),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;
  String backendData = '';
  WebSocketChannel channel;
  MyHomePage({Key key, @required this.title, @required this.channel})
      : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  TextEditingController _controller = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(20.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Form(
              child: TextFormField(
                controller: _controller,
                decoration: InputDecoration(labelText: 'Send a message'),
              ),
            ),
      Text(widget.backendData),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _sendMessage,
        tooltip: 'Send message',
        child: Icon(Icons.send),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  void _sendMessage() {
    if (_controller.text.isNotEmpty) {
      widget.channel.sink.add(_controller.text);
//      super.initState();
      widget.channel.stream.listen(this.onData, onError: onError, onDone: onDone);
      (() async {
        setState(() {
//          widget.backendData=this.onData;
        });
      });
    }
  }
  onDone(){
    debugPrint("Socket is closed");
    widget.channel=IOWebSocketChannel.connect('ws://192.168.3.4:8088/echo');
    this._sendMessage();
  }

  onError(err){
    debugPrint(err.runtimeType.toString());
    WebSocketChannelException ex = err;
    debugPrint(ex.message);
  }

  onData(event){
    setState(() {
      widget.backendData=event;
    });
//    debugPrint(event);
//    widget.backendData=event;
  }
  @override
  void dispose() {
    widget.channel.sink.close();
    super.dispose();
  }
}

相关文章

网友评论

    本文标题:flutter断网后自动重连websocket

    本文链接:https://www.haomeiwen.com/subject/ibdybqtx.html