Last active
March 5, 2020 15:12
-
-
Save carzacc/ad6c0b8a2b04788423b51d0ab729287f to your computer and use it in GitHub Desktop.
WebSocket post Flutter app
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(), | |
); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | |
) | |
], | |
), | |
) | |
); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}"); | |
} | |
), | |
); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}"); | |
} | |
), | |
); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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