Skip to content

Instantly share code, notes, and snippets.

@Hesamedin
Last active March 23, 2022 22:26
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 Hesamedin/040fdac28936874a282cef44e53cfbb2 to your computer and use it in GitHub Desktop.
Save Hesamedin/040fdac28936874a282cef44e53cfbb2 to your computer and use it in GitHub Desktop.
// Dart imports:
import 'dart:convert';
import 'dart:typed_data';
// Flutter imports:
import 'package:flutter/foundation.dart' show kIsWeb;
// Package imports:
import 'package:get_it/get_it.dart';
import 'package:universal_html/html.dart';
import 'package:url_launcher/url_launcher.dart';
// Project imports:
import './modules/managers/firebase_manager.dart';
/// Open file in a browser
Future<void> launchURL(String? url) async {
if (url == null) return;
await canLaunch(url) ? await launch(url) : throw 'Could not launch $url';
}
/// Download file from firebase
Future<void> downloadFile(String fileName, String pathToFile, String url) async {
if (pathToFile.isEmpty) return;
if (!kIsWeb) return;
Uint8List? data = await FirebaseStorage.instance.ref(pathToFile).getData();
// Fallback option
if (data == null) return await launchURL(url);
String encodedData = base64Encode(data);
try {
AnchorElement(href: 'data:application/octet-stream;charset=utf-8;base64,$encodedData')
..setAttribute('download', fileName)
..click();
} catch (error) {
// Fallback option
await launchURL(url);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment