If you want real-time features like chat apps, live scores, stock updates, or notifications, WebSockets are the backbone. In this guide, you’ll learn how to integrate WebSockets in Flutter step by step using modern best practices for 2026.
- Flutter framework
- Dart programming language
- WebSocket protocol
- web_socket_channel package
Read : Introduction to Dart programming Language
What is WebSocket?
Unlike traditional HTTP APIs (request → response), WebSockets create a persistent connection between client and server. For Web socket API test tutorial visit
Meaning:
- No repeated requests
- Instant data transfer
- Full-duplex communication (both sides can send data anytime)
Step 1: Create Flutter Project
flutter create websocket_app
cd websocket_app
Step 2: Add Dependency
Add this to your pubspec.yaml:
dependencies:
flutter:
sdk: flutter
web_socket_channel: ^2.4.0
Then run:
flutter pub get
Step 3: Connect to WebSocket Server
We’ll use a public echo server for testing.
import 'package:web_socket_channel/web_socket_channel.dart';
final channel = WebSocketChannel.connect(
Uri.parse('wss://echo.websocket.events'),
);
Step 4: Build UI (Send & Receive Messages)
Here’s a simple Flutter UI:
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
class WebSocketScreen extends StatefulWidget {
@override
_WebSocketScreenState createState() => _WebSocketScreenState();
}
class _WebSocketScreenState extends State<WebSocketScreen> {
final TextEditingController controller = TextEditingController();
final channel = WebSocketChannel.connect(
Uri.parse('wss://echo.websocket.events'),
);
@override
void dispose() {
channel.sink.close();
super.dispose();
}
void sendMessage() {
if (controller.text.isNotEmpty) {
channel.sink.add(controller.text);
controller.clear();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("WebSocket Flutter")),
body: Column(
children: [
StreamBuilder(
stream: channel.stream,
builder: (context, snapshot) {
return Text(
snapshot.hasData
? 'Received: ${snapshot.data}'
: 'No data yet',
);
},
),
TextField(
controller: controller,
decoration: InputDecoration(labelText: "Send message"),
),
ElevatedButton(
onPressed: sendMessage,
child: Text("Send"),
),
],
),
);
}
}
- How It Works
WebSocketChannel.connect()→ establishes connectionchannel.sink.add()→ sends messagechannel.stream→ listens for incoming messagesStreamBuilder→ updates UI in real-time
For Web socket API test tutorial visit
Testing WebSocket API
You can test your WebSocket endpoints using tools like:
- Postman API platform (WebSocket support available)
- Browser DevTools
For Web socket API test tutorial visit
Advanced Concepts (2026 Best Practices)
1. Handle Connection States
channel.stream.listen(
(data) => print(data),
onError: (error) => print("Error: $error"),
onDone: () => print("Connection closed"),
);
2. Reconnection Logic
void reconnect() {
// Reconnect logic here
}
3. Use Secure WebSockets
Always prefer:
wss://
instead of:
ws://
4. Manage State Properly
Use:
Common Mistakes
- Not closing socket connection
- Ignoring error handling
- Blocking UI thread
- Using HTTP instead of WebSocket
Real-World Use Cases
- Chat Applications
- Live Sports Score Apps
- Crypto Price Trackers
- Multiplayer Games
- Notification Systems
Read : What Is WebSocket in Flutter? A Complete Beginner-to-Advanced Guide With Real-Time Examples
FAQs
1. Is WebSocket better than REST API?
Yes—for real-time apps. REST is better for standard request-response.
2. Can I use WebSocket in production Flutter apps?
Absolutely. Just ensure:
- Secure connection (wss)
- Proper error handling
- Scalable backend
3. Which package is best for WebSocket in Flutter?
The most commonly used is:
web_socket_channel package
4. Does WebSocket work on Android & iOS?
Yes, fully supported in Flutter framework.
5. Can I test WebSockets in Postman?
Yes, Postman API platform now supports WebSocket testing.
Conclusion
WebSockets unlock real-time power in your Flutter apps. With just a few lines of code, you can build scalable and responsive applications.
Start simple → add reconnection → scale with architecture.