Обновите версию flutter и dart до 2.0 и перенесите существующий проект в новую обновленную среду разработки.

Отказ от ответственности: всегда делайте полную резервную копию перед началом процесса миграции. Рекомендуется, чтобы у вас были навыки флаттера или программирования в целом как минимум выше среднего 👍, и если у вас есть какие-либо неразрешенные зависимости. Я бы не рекомендовал переносить вашу среду разработки, если вам не нужно использовать функции flutter 2.0. Начнем с рассказа.

Это было 27 июля, приложение Flutter… Требуется обновление… 🤭

Что нового предлагает Flutter 2.0 разработчику, который любит и любит создавать собственные приложения? Самая важная особенность - это безопасность Null, которая еще больше усиливает Dart, отделяя типы, допускающие значение NULL, от типов, не допускающих значения NULL, что помогает предотвратить сбои Null, которые являются очень частыми причинами сбоев приложений 😵‍💫. Мои фавориты - мобильная реклама Google и новые компоненты материалов из Купертино для iOS, которые красиво выглядят.

Во-первых, вы должны обновить свои версии флаттера и дротика. Вы можете сделать это, запустив flutter - - upgrade в своем терминале. Если эта команда не работает, это означает, что в ваш SDK flutter были внесены изменения, поэтому вы можете принудительно выполнить обновление, используя следующие инструкции. После этого вы можете запустить flutter a doctor, чтобы проверить список дел для проверки вашей установки flutter.

Сначала все было радугой и единорогами 🦄

Давайте перейдем к переносу нашего приложения на последнюю версию SDK, но сначала сделайте резервную копию вашего флаттер-проекта, так как не все флаттер-проекты можно перенести. Мы можем использовать команду ниже для разрешимых пакетов.

flutter pub outdated --mode=null-safety

Если вы заметили зависимости с символом «x» в крайнем правом углу, это те зависимости, которые нельзя устранить, и если они дают функциональную возможность, вам следует подождать, пока они не будут устранены. Те, что отмечены галочкой, - это джекпоты; вы можете скопировать версии, а затем вставить их в свой файл «pubspec.yml».

Теперь о нерешенных, потому что они не обеспечивали функциональных перспектив, таких как управление состоянием, обработка API или хранение сеансов. Я решил отбросить пару из них и поискать альтернативы на сайте pub dev. Проверьте pub dev на наличие пакетов, которые не разрешаются; вы все еще можете найти множество альтернатив, поддерживающих нулевую безопасность. Например, вместо SplashScreen я использовал собственный splash: 1.2.0 для flutter, который обеспечивает нулевую безопасность. Я повторю процесс для остальных трех пакетов, и у нас больше нет проблем с пакетами. Не пугайтесь, если заметите волну ошибок; Надеюсь, все встанет на свои места 🥲.

Убедитесь, что у вас версия дротика не ниже 2,12. Если нет, используйте команду «dart- -version», чтобы проверить свою версию дротика. Обычно он обновляется вместе с вашим пакетом flutter.

Давай сделаем это для науки 🚀

Вы можете перейти к следующему разделу, не исправляя его вручную. После обновления я изменил версию SDK flutter на 2.12.0 3 в файле pubspec. Критерии нулевой безопасности довольно просты. Давайте исправим нулевые переменные, добавив поздние ключевые слова и немного поработав вручную, чтобы наука поняла, что изменилось. Пример «@ из @required»

! для преобразования типа, допускающего значение NULL, в тип, не допускающий значения NULL, например, установка нулевой отметки на панели закусок и многие другие правила. К счастью, я обнаружил пошаговое руководство, которое представлю в разделе ресурсов.

_scaffoldKey.currentState!.showSnackBar(snackbar);
_formKey.currentState!.reset();
}

Теперь, после обновления переменных и исправления 150+ ограничений, допускающих значение NULL, у меня все еще было несколько проблем, некоторые из которых упомянуты ниже, и я исправлю их вручную, потому что, как вы уже догадались! Ради НАУКИ! 🧑‍🔬 Как вы думаете, сколько времени мне понадобится, чтобы исправить 23 ошибки? Обновление: на их исправление ушло час.

error • A value of type 'Color?' can't be assigned to a variable of type 'Color' at lib/configuration.dart:3:21 • (invalid_assignment)
  error • The argument type 'Color?' can't be assigned to the parameter type 'Color' at lib/configuration.dart:6:13 • (argument_type_not_assignable)
  error • The argument type 'Null' can't be assigned to the parameter type 'Key' at lib/.dart:595:27 • (argument_type_not_assignable)
  error • The named parameter 'onInit' is required, but there's no corresponding argument at lib/.dart:46:16 • (missing_required_argument)
  error • The named parameter 'key' is required, but there's no corresponding argument at lib/pages/.dart:27:14 • (missing_required_argument)
  error • The argument type 'void Function(String)' can't be assigned to the parameter type 'void Function(String?)?' at lib/pages/cart.dart:324:15 • (argument_type_not_assignable)
  error • The named parameter 'user' is required, but there's no corresponding argument at lib/pages/.dart:194:15 • (missing_required_argument)
  error • The named parameter 'key' is required, but there's no corresponding argument at lib/pages/.dart:195:15 • 
  error • The named parameter 'user' is required, but there's no corresponding argument at lib/pages/.dart:216:15 • (missing_required_argument)
  error • Undefined name 'user' at lib/redux/.dart:24:33 • (undefined_identifier)
  error • The default 'List' constructor isn't available when null safety is enabled at lib/redux/.dart:156:42 • (default_list_constructor)
  error • The named parameter 'store' is required, but there's no corresponding argument at test/widget_test.dart:16:29 • (missing_required_argument)

* Роль барабана * 🥁 успешно изменена на нулевую безопасность, но давайте посмотрим, работает ли приложение снова, потому что я хотел изучить все кавер-версии самостоятельно. Скрещенные пальцы. Приложение было запущено, но некоторые функции были неработоспособны. Давайте попробуем инструмент миграции dart. Теперь, когда мы закончили с нашими экспериментами.

Вы сбились с пути ... Ваш путь начинается здесь. 🤗

Я откатился к началу, сохранил файл pub из файла миграции, удалил экземпляры неудовлетворенных зависимостей и выполнил миграцию dart.

На этот раз я хотел бы выразить свою благодарность командам Flutter и Dart за их работу по созданию достаточно информативного предварительного просмотра миграции вручную 👏 с визуальными выделениями, которые действительно показывают вам изменения миграции, и это потрясающе. Я лично просмотрел все предложенные модификации и обнаружил их. Я успешно выполнил более 85% из них, прежде чем нажать кнопку «Перенести». После того, как вы нажмете кнопку «Перенести», flutter внесет изменения автоматически, вам не о чем беспокоиться 🤩.

Затем я попытался выполнить команду flutter run. Да, похоже, это тоже не сработало, поэтому я попробовал оба симулятора, чтобы убедиться, но нет, поэтому я действительно трепетал, а вместо этого трепался. Неудача по-прежнему застряла на пустом экране

Посмотрим, когда я выполнял это вручную, всего несколько функций были сломаны, но другие работали нормально. Я смог пройти через все панели, и государственное управление оказалось работоспособным. Так как я провел перенос вручную и понял, где что-то, скорее всего, пойдет не так, я внес необходимые изменения, и * Drum roll * 🥁 , это сработало 🥳.

Все, от функциональности до макетов, теперь может использовать преимущества новых функций flutter V2. Я буду дальше проверять свое приложение на наличие ошибок, и наука снова нас спасла! Это была моя история о миграционной миграции. Я включу несколько ресурсов, которые были действительно полезны для меня и были чистым блаженством. Посмотрите на этих великих разработчиков и поддержите их. Удачного кодирования ✨