Skip to content

Instantly share code, notes, and snippets.

@morphingcoffee
Created November 5, 2021 22:51
Show Gist options
  • Save morphingcoffee/c349057045ab298d4a3eabc7603046db to your computer and use it in GitHub Desktop.
Save morphingcoffee/c349057045ab298d4a3eabc7603046db to your computer and use it in GitHub Desktop.
Flutter Web fullscreen feature helper, using 'universal_html' package.
import 'package:universal_html/js.dart' as js;
import 'package:universal_html/html.dart' as html;
void example() {
_enterFullscreen(html.document.documentElement);
_exitFullscreen(html.document);
}
/// Flutter Web: Enter Fullscreen on Firefox, Chrome, Opera, Safari, etc.
/// Based on https://stackoverflow.com/questions/29714889/how-to-request-fullscreen-in-compiled-dart
/// and https://github.com/dart-lang/sdk/issues/4136
void _enterFullscreen(Object? element) {
if (element == null) return;
var elem = js.JsObject.fromBrowserObject(element);
if (elem.hasProperty("requestFullscreen")) {
elem.callMethod("requestFullscreen");
} else {
List<String> vendors = ['moz', 'webkit', 'ms', 'o'];
for (String vendor in vendors) {
String vendorFullscreen = "${vendor}RequestFullscreen";
if (vendor == 'moz') {
vendorFullscreen = "${vendor}RequestFullScreen";
}
if (elem.hasProperty(vendorFullscreen)) {
elem.callMethod(vendorFullscreen);
return;
}
}
}
}
/// Flutter Web: Exit Fullscreen on Firefox, Chrome, Opera, Safari, etc.
/// Based on https://stackoverflow.com/questions/29714889/how-to-request-fullscreen-in-compiled-dart
/// and https://github.com/dart-lang/sdk/issues/4136
void _exitFullscreen(Object? element) {
if (element == null) return;
var elem = js.JsObject.fromBrowserObject(element);
if (elem.hasProperty("exitFullscreen")) {
elem.callMethod("exitFullscreen");
} else {
List<String> vendors = ['moz', 'webkit', 'ms', 'o'];
for (String vendor in vendors) {
String vendorFullscreen = "${vendor}ExitFullscreen";
if (vendor == 'moz') {
vendorFullscreen = "${vendor}CancelFullScreen";
}
if (elem.hasProperty(vendorFullscreen)) {
elem.callMethod(vendorFullscreen);
return;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment