Как использовать .env во Flutter Web? - PullRequest
2 голосов
/ 04 августа 2020

Краткая история:

Я пытаюсь использовать файл .env в своем проекте Flutter Web.

Раньше я использовал flutter_dotenv в мобильном приложении Flutter, но он не работает в сети Flutter.

Как мы можем использовать файл .env в сети Flutter?

Long Story:

На данный момент я Я использую файл dart для сохранения текущих постоянных значений, таких как URL-адрес бэкэнда.

Бэкэнд находится в том же домене, что и этот => https://domain_for_webapp.com/api/

class Environment {

  // API URL
  static const String API_URL ='https://domain_for_webapp.com/api/';
...

Но проблема здесь в том, что у меня еще один сервер для развертывания того же сайта https://another_domain_for_webapp.com/api/ Поэтому я попытался решить эту проблему, используя относительный URL-адрес

class Environment {

  // API URL
  static const String API_URL ='/api/';
...

Но Flutter web не может найти правильный полный URL-адрес API для каждого сервера.

Чтобы решить эту проблему, я пытался использовать .env, как в обычном веб-приложении.

Но я не могу использовать .env в сети Flutter.

Есть ли подходящие решение этой проблемы?

1 Ответ

1 голос
/ 07 августа 2020

К сожалению, .env, похоже, не работает с сетью, как вы заметили. Надеюсь, в конечном итоге он будет интегрирован, но сейчас, когда у меня возникла такая же проблема, я обнаружил, что рекомендуемый способ настройки Интернета включает использование переменных среды и параметра dart-define:

String urlBase = const String.fromEnvironment("url_base");

Таким образом, вы может настроить среду запуска и сборки с различными переменными.

К сожалению, это не совсем так, как «установить и забыть», как файл .env, поэтому я предпочитаю ставить на него такую ​​защиту, чтобы вы сразу узнаете об этом, когда попытаетесь запустить:

if (urlBase == null) {
  throw Exception("You must define url_base. This can be done "
                  "with the --dart-define arg to run or build");
}

Если вы используете IDE, вам нужно будет передать параметры. Для кода Visual Studio вы можете сделать это с файлом launch.json примерно так:

"configurations": [
    {
        "name": "Flutter",
        "request": "launch",
        "type": "dart",
        "args": [
            "--dart-define",
            "url_base=https://myurl.com/base"
        ]
    }
]

А для IntelliJ / Android Studio вы можете сделать это в конфигурации запуска:

Конфигурация запуска IntelliJ

Независимо от того, что вы используете для своих инструментов сборки, это так же просто, как добавление дополнительного параметра к команде flutter build web, то есть с помощью docker:

RUN /usr/local/flutter/bin/flutter build web --dart-define url_base=$url_base
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...