Избегайте использования веб-библиотек вне пакетов веб-плагинов Flutter - PullRequest
1 голос
/ 12 марта 2020

Я создаю приложение Flutter, которое пытаюсь заставить работать в Интернете. Часть его содержит некоторый веб-код c code:

import 'dart:html' as html;
import 'package:flutter/foundation.dart';

class DownloadViewModel extends ChangeNotifier {
  static const String url = 'https://example.com/api/v1/app/myapp_1.0.0.apk';
  void onAndroidDownloadPressed() {
    html.window.open(url, 'AndroidApp');
  }
}

Однако импорт dart:html выдает следующую ошибку:

Избегайте использования библиотек только для веб-сайтов вне Flutter web пакеты плагинов

Более длинная версия предупреждения выглядит следующим образом:

Избегайте использования веб-библиотек, dart:html, dart:js и dart:js_util в пакетах Flutter, которые не являются веб-плагинами. Эти библиотеки не поддерживаются вне веб-контекста; функциональность, которая зависит от них, не будет работать во время выполнения в Flutter mobile, и их использование обычно не рекомендуется в Flutter web.

Доступ к веб-библиотеке разрешен в:

plugin packages that declare web as a supported context

в противном случае, импорт dart:html, dart:js и dart:js_util не разрешены.

И это не просто предупреждение. Это фактически предотвращает создание приложения Android или iOS (даже если этот метод недоступен из приложений, не относящихся к Web-флаттеру).

Единственное решение, которое я нашел, - закомментировать импорт когда я создаю для Android и iOS, а затем раскомментирую его, когда я строю для Интернета. Есть ли лучшее решение?

1 Ответ

2 голосов
/ 12 марта 2020

Используйте пакет universal_ html. Он поддерживает браузер, Dart VM и Flutter и заменяет dart:html и другие веб-библиотеки.

dependencies:
  universal_html: ^1.2.2

Тогда вместо использования import 'dart:html' as html; вы можете использовать следующий импорт:

import 'package:universal_html/html.dart' as html;

Для тех, кто заходил на эту страницу из-за других проблем, связанных с импортом в сети (например, dart:js), этот плагин также поддерживает следующие операции импорта:

import 'package:universal_html/driver.dart';
import 'package:universal_html/html.dart';
import 'package:universal_html/indexed_db.dart';
import 'package:universal_html/js.dart';
import 'package:universal_html/js_util.dart';
import 'package:universal_html/prefer_sdk/html.dart';
import 'package:universal_html/prefer_sdk/indexed_db.dart';
import 'package:universal_html/prefer_sdk/js.dart';
import 'package:universal_html/prefer_sdk/js_util.dart';
import 'package:universal_html/prefer_sdk/svg.dart';
import 'package:universal_html/prefer_sdk/web_gl.dart';
import 'package:universal_html/prefer_universal/html.dart';
import 'package:universal_html/prefer_universal/indexed_db.dart';
import 'package:universal_html/prefer_universal/js.dart';
import 'package:universal_html/prefer_universal/js_util.dart';
import 'package:universal_html/prefer_universal/svg.dart';
import 'package:universal_html/prefer_universal/web_gl.dart';
import 'package:universal_html/svg.dart';
import 'package:universal_html/web_gl.dart';
...