Skip to content

Instantly share code, notes, and snippets.

@danielgomezrico
Created December 13, 2023 21:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielgomezrico/c7f70ce5a81cfa1955a65b7bae309900 to your computer and use it in GitHub Desktop.
Save danielgomezrico/c7f70ce5a81cfa1955a65b7bae309900 to your computer and use it in GitHub Desktop.
Flutter · Dart: web server to start a local webserver
void main() {
final server = WebServer();
server.start(8080);
server.listenRequests.then((r) => print(r));
}
<!-- Attribute to add on android -->
<app
....
android:usesCleartextTraffic="true">
...
</app>
import 'dart:convert' show utf8;
import 'dart:convert';
import 'dart:io';
const _tag = '[http][server]';
class WebServer {
HttpServer? _server;
Future<void> start(int port) async {
close();
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, port);
_server = server;
print(
"$_tag Server running on IP : ${server.address} On Port : ${server.port}");
}
Stream<BasicRequest> listenRequests() async* {
final server = _server;
if (server == null) throw Exception('Server not started');
await for (var request in server) {
final body = await utf8.decodeStream(request);
yield BasicRequest(request.uri, request.method, body);
request.response
..statusCode = 200
..headers.contentType = ContentType(
"text",
"application/json",
charset: "utf-8",
)
..write('Received');
await request.response.close();
}
}
void close() {
_server?.close(force: true);
}
}
class BasicRequest {
const BasicRequest(this.uri, this.method, this.body);
final Uri uri;
final String method;
final String body;
@override
String toString() {
return 'BasicResponse{uri: $uri, method: $method, body: $body}';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment