Skip to content

Instantly share code, notes, and snippets.

@carzacc
Last active March 5, 2020 15:12
Show Gist options
  • Save carzacc/ad6c0b8a2b04788423b51d0ab729287f to your computer and use it in GitHub Desktop.
Save carzacc/ad6c0b8a2b04788423b51d0ab729287f to your computer and use it in GitHub Desktop.
WebSocket post Flutter app
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
// substitute your server's IP and port
const YOUR_SERVER_IP = 'SERVER_IP';
const YOUR_SERVER_PORT = 'SERVER_PORT':
const URL = 'ws://$YOUR_SERVER_IP:$YOUR_SERVER_PORT';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FauxLoginPage(),
);
}
}
class FauxLoginPage extends StatelessWidget {
final TextEditingController controller = TextEditingController();
void goToMainPage(String nickname, BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AnnouncementPage(nickname)
)
);
}
@override
Widget build(BuildContext context) =>
Scaffold(
appBar: AppBar(title: Text("Login Page")),
body: Center(
child: Column(
children: [
TextField(
controller: controller,
decoration: InputDecoration(
labelText: "Nickname"
),
onSubmitted: (nickname) => goToMainPage(nickname, context),
),
FlatButton(
onPressed: () => goToMainPage(controller.text, context),
child: Text("Log In")
)
],
),
)
);
}
class AnnouncementPage extends StatelessWidget {
AnnouncementPage(this.nickname);
final String nickname;
final WebSocketChannel channel = WebSocketChannel.connect(Uri.parse(URL));
final TextEditingController controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Announcement Page"),
),
body: Center(
child: Column(
children: <Widget>[
StreamBuilder(
stream: channel.stream,
builder: (context, snapshot) {
return snapshot.hasData ?
Text(
snapshot.data.toString(),
style: Theme.of(context).textTheme.display1
)
:
CircularProgressIndicator();
},
),
TextField(
controller: controller,
decoration: InputDecoration(
labelText: "Enter your message here"
),
)
],
)
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.send),
onPressed: () {
channel.sink.add("$nickname: ${controller.text}");
}
),
);
}
}
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
// substitute your server's IP and port
const YOUR_SERVER_IP = 'SERVER_IP';
const YOUR_SERVER_PORT = 'SERVER_PORT':
const URL = 'ws://$YOUR_SERVER_IP:$YOUR_SERVER_PORT';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FauxLoginPage(),
);
}
}
class FauxLoginPage extends StatelessWidget {
final TextEditingController controller = TextEditingController();
void goToMainPage(String nickname, BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AnnouncementPage(nickname)
)
);
}
@override
Widget build(BuildContext context) =>
Scaffold(
appBar: AppBar(title: Text("Login Page")),
body: Center(
child: Column(
children: [
TextField(
controller: controller,
decoration: InputDecoration(
labelText: "Nickname"
),
onSubmitted: (nickname) => goToMainPage(nickname, context),
),
FlatButton(
onPressed: () => goToMainPage(controller.text, context),
child: Text("Log In")
)
],
),
)
);
}
class AnnouncementPage extends StatelessWidget {
AnnouncementPage(this.nickname);
final String nickname;
final WebSocketChannel channel = WebSocketChannel.connect(Uri.parse(URL));
final TextEditingController controller = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Announcement Page"),
),
body: Center(
child: Column(
children: <Widget>[
StreamBuilder(
stream: channel.stream,
builder: (context, snapshot) {
return snapshot.hasData ?
Text(
snapshot.data.toString(),
style: Theme.of(context).textTheme.display1
)
:
CircularProgressIndicator();
},
),
TextField(
controller: controller,
decoration: InputDecoration(
labelText: "Enter your message here"
),
)
],
)
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.send),
onPressed: () {
channel.sink.add("$nickname: ${controller.text}");
}
),
);
}
}
name: websockets_flutter
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
web_socket_channel: ^1.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment