flutter websocket示例

添加依赖

	web_socket_channel: ^2.2.0  //注意缩进空格

代码

class WebSocketWidget extends StatefulWidget {
  const WebSocketWidget({super.key});

  @override
  State<WebSocketWidget> createState() {
    return WebSocketState();
  }
}

class WebSocketState extends State<WebSocketWidget> {
  final TextEditingController _controller = TextEditingController();
  late IOWebSocketChannel channel;
  String _text = "";

  @override
  void initState() {
    super.initState();
    //创建websocket连接
    channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("WebSocket")),
      body: Padding(
        padding: const EdgeInsets.all(20),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Form(
              child: TextFormField(
                controller: _controller,
                decoration: const InputDecoration(labelText: "Send a message"),
              ),
            ),
            StreamBuilder(
              stream: channel.stream,
              builder: ((context, snapshot) {
                //如果网络不同
                if (snapshot.hasError) {
                 String error= snapshot.error.toString();
                  _text = "网络有问题,请稍候重试... $error ";
                } else if (snapshot.hasData) {
                  _text = "echo: $snapshot.data";
                }
                return Padding(
                  padding: const EdgeInsets.symmetric(vertical: 20),
                  child: Text(_text),
                );
              }),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _sendMessage,
        tooltip: "Send message",
        child: const Icon(Icons.send),
      ),
    );
  }

  void _sendMessage() {
    if (_controller.text.isNotEmpty) {
      channel.sink.add(_controller.text);
    }
  }

  @override
  void dispose() {
    channel.sink.close();
    super.dispose();
  }
}

猜你喜欢

转载自blog.csdn.net/xiaopihair123/article/details/125202839