Пакет Dart, Реклама. Пересмотрено и отредактировано.

Год назад в статье Реклама в вашем приложении в Snap! был представлен файл библиотеки, предлагающий простые и обширные средства для отображения рекламы в вашем приложении Flutter с помощью Плагин Google, firebase_admob. Он получил такой положительный отклик, что я решил добавить его в виде пакета Дарт, реклама. Проще говоря, это был хит.

Как и в случае с жизнью, все меняется. В этом случае сам плагин изменялся и развивался - и поэтому пакет Dart должен был не отставать. Обратите внимание: хотя он остается в стадии бета-тестирования, плагин по-прежнему остается одним из немногих средств для предоставления рекламы Admob. Пакет Dart, реклама, служит лишь для поощрения внедрения плагина и акцентирования внимания на его использовании в приложениях Flutter. В этой статье мы рассмотрим последнюю версию пакета Dart и продемонстрируем его использование.

Установите пакет Ads, и вы на пути к монетизации своего приложения Flutter с помощью рекламы Google AdMob. Это просто оболочка для плагина, созданного Google, под названием firebase_admob. Чтобы быстро и легко внедрить рекламу Google AdMob в ваше приложение Flutter.

Единственная игра в городе

Казалось бы, другой пакет Dart, о котором я знал, больше не будет поддерживаться. Юсеф Кабабе также предоставил такой пакет Dart для рекламы AdMob, но теперь он хочет передать его другому для поддержки.

Зарегистрируйтесь и получите свое удостоверение личности

Прежде всего, вы должны зарегистрироваться в AdMob. Обратитесь к Справке AdMob, чтобы получить дополнительную информацию по этому поводу. Вам нужно будет зайти в Панель управления Google AdMob и получить свой идентификатор. Идентификатор приложения используется для идентификации вашего отдельного приложения, и есть индивидуальный идентификатор блока, уникальный для каждого типа рекламы, которую вы решите использовать. В настоящее время существует три типа рекламы: баннерная реклама, межстраничная реклама и видеообъявление. Можно сделать все это сейчас, а затем вернуться сюда, чтобы узнать, как отображать такую ​​рекламу в вашем приложении Flutter. Я буду ждать.

Это тест. Не по-настоящему

Обратите внимание, что идентификаторы тестов предоставляются плагином для использования во время разработки. Использование собственного идентификатора нарушит политику AdMob от Google. Вы не можете нажимать на рекламу в собственном приложении. Они узнают.

Для Android. Измените AndroidManifest.xml

Для пользователей Android распространенная ошибка, с которой вы можете столкнуться при использовании этого пакета Dart, - это жалобы Google на то, что «AdMob не был должным образом инициализирован». Просто добавьте свой «идентификатор приложения» в ваш файл AndroidManifest.xml.

Дополнительные инструкции для платформ iOS и Android можно найти на собственном веб-сайте плагина под заголовками Изменения AndroidManifest и Изменения Info.plist.

не удалось загрузить объявление: 3

Терпение - это добродетель. Единственные ошибки, которые я постоянно получаю от пользователей, связаны не с самим пакетом Dart, а с Google. После регистрации в Google пользователь часто жалуется, что показываются только "тестовые" объявления, но это потому, что получение рабочих объявлений займет несколько часов, если не день. Подождите день и убедитесь сами.

Прохождение

Давайте рассмотрим этот класс сверху вниз, чтобы попытаться понять, как использовать этот пакет Dart. Чтобы дополнить процесс, мы также рассмотрим пример приложения, которое было написано, чтобы выделить большинство, если не все функции и возможности, доступные вам при использовании этого пакета Dart. Этот пример приложения буквально сопровождает пакет Dart на вкладке example на веб-сайте pub.dev.

Скриншоты! Не Гисты!

Как всегда, я предпочитаю использовать скриншоты, а не суть, чтобы показать код в своих статьях. Я считаю, что с ними легче работать и легче читать. Однако вы можете щелкнуть / коснуться их, чтобы увидеть код как суть или в Github. По иронии судьбы, эту статью о мобильной разработке лучше читать на компьютере, чем на телефоне. Кроме того, мы программируем в основном на наших компьютерах; не на наших телефонах. Теперь.

Давай начнем.

Первый параметр - большой

Вызов статической функции init () требуется для инициализации плагина firebase_admob. На скриншоте ниже вы увидите, что единственный обязательный параметр - это первый. Это ваш App ID - уникальный идентификатор, присвоенный вашему приложению. Это идентификатор, который вы получаете в Личном кабинете Google AdMob. Остальные являются именованными параметрами и, следовательно, являются необязательными.

Выделенные красными стрелками, вы видите, что у вас есть возможность указать все "идентификаторы блока" того "типа" объявлений, которые вы выбрали для отображения в вашем приложении Flutter. Они названы параметрами, поэтому вы легко назначите нужный параметр тому, который вы получили из Панели управления Google AdMob. Также обратите внимание, как функция проверяет недопустимый идентификатор приложения? Если передано значение null или пустая строка, функция не пожалуется. Вместо этого он просто предоставит "идентификатор теста". В вашем приложении Flutter появятся "тестовые объявления".

В последней строке функции инициализирован плагин FirebaseAbMob, который, наконец, предоставляет идентификатор приложения. Параметр тестирование оценивается для предоставления либо вашего «идентификатора приложения», либо «идентификатора теста». Соответственно будут отображаться либо настоящие рабочие объявления, либо «тестовые объявления».

Вам нужен ваш идентификатор

Предлагается, чтобы здесь, в функции init (), вы дополнительно указывали идентификаторы единиц для каждого отдельного «типа» рекламы, которую вы хотите отображать в своем приложении Flutter. Однако, как подразумевается, этот пакет Dart позволяет вам указать эти идентификаторы устройства позже в процессе. Обратите внимание: если вы их никогда не предоставляли - вместо них будут показываться тестовые объявления.

Опять же, если ваш «идентификатор приложения» по какой-либо причине не указан правильно в рабочей среде, вместо него используется «тестовый» идентификатор приложения, FirebaseAdMob.testAppId. На скриншоте с исходным кодом плагина выше видно, что конкретный идентификатор «тестового» приложения предоставляется статической переменной testAppId в зависимости от используемой платформы. Опять же, в пакете Dart идентификатор приложения test используется независимо от того, передан ли именованный параметр, testing, и ему присвоено значение true.

Другие

Давайте быстро определим, что другие параметры делают для вас в пакете Dart. Три из пяти оставшихся параметров, которые мы уже упомянули, относятся к «типу» рекламы, которую вы можете отображать в своем приложении Flutter.

Ключ - это слова

Начиная с самого верха, есть параметр ключевые слова. Это Список Строковых значений. С этим списком ключевых слов вы возвращаетесь из инвентаря объявлений Google, которым назначены такие ключевые слова. Разработчику предлагается явно указать ключевые слова, представляющие тип рекламы, которую они хотят отображать. Однако у вас есть другой способ указать такие ключевые слова с помощью следующего параметра.

Контент веб-сайта

Следующий параметр имеет тип String и называется contentUrl. Опять же, как часть таргетинга на ключевые слова, используемого для определения типа рекламы, отображаемой в приложении Flutter, это предоставляет плагину определенный веб-сайт. Видите ли, этот веб-сайт могли посещать многие пауки поисковой системы Google, и информация, собранная для индекса поисковой системы Google, может быть использована для предоставления ключевых слов для определения типа отображаемой рекламы.

Как бы то ни было, параметр contentUrl использовать не нужно. Тем не менее, я думаю, что распространенным подходом для разработчиков является создание собственного корпоративного веб-сайта или корпоративного веб-сайта своего клиента - с идеей, что если Google посетил веб-сайт, то реклама, подходящая для приложения, будет отображаться с использованием собранных ключевых слов. со своего собственного сайта.

Направлено детям

У вас есть возможность запросить рекламу, предназначенную для детей младше 13 лет. Следующий логический параметр, childDirected, если ему задано значение true, делает это так.

Тестирование некоторых устройств

Следующий параметр, testDevices, представляет собой список элементов String, описывающих определенные устройства, на которых будут отображаться только тестовые объявления. Во время разработки с использованием эмулятора или подключенного устройства вы можете определить «имя» устройства, которое вы используете, через свою IDE. Взяв эти имена и перечислив их в объекте List, который затем передается в параметр testDevices, вы, например, сможете отображать тестовые объявления только на определенных устройствах, даже если приложение работает в производство. Например, для демонстрации приложения клиентам на вашем телефоне. Вы же не хотите, чтобы клиенты по ошибке нажимали на рабочие объявления.

Слушатель рекламы

Интересная способность плагина firebase_admob заключается в том, что разработчик может установить слушателей для запуска кода, когда запускается конечный список событий, включающих отображение и взаимодействие с рекламой. Что касается пакета Dart, последний параметр, listener, предоставляет средства для реализации такого прослушивателя в функции init ().

В примере приложения перечислены все возможные события, и мы подробно рассмотрим эти события позже. А пока давайте взглянем на пример приложения и продемонстрируем, как можно реализовать пакет Dart, реклама.

СЛУЧАЙ №1: Инициируйте свои объявления

В примере приложения, используемом для демонстрации пакета Dart, есть три случая. Давайте посмотрим на первый случай. Между прочим, он демонстрирует, как «слушатель» назначается плагину с помощью именованного параметра listener в функции init ().

В первом случае демонстрируется необязательный подход к внедрению рекламы AdMob в ваше приложение Flutter. Как видно на снимке экрана, все это происходит в функции initState () объекта State. Вы можете видеть, что выданные вам идентификаторы из вашей Панели управления Google AdMob передаются в функцию init (). В этом примере я использую идентификатор test, выданный нам Google для использования при разработке. Есть тестовые идентификаторы для Android и для iOS. На данный момент при таком подходе реклама не отображается. Идея в том, что это сделано в другом месте. Хотя в большинстве случаев именно здесь вы вызываете команду для показа рекламного баннера.

За просмотр видео с вознаграждением

Давайте рассмотрим этот первый случай, но посмотрим исключительно на то, что происходит, когда вы нажимаете кнопку с надписью «ПОКАЗАТЬ ВИДЕО С НАГРАЖДЕНИЕМ». Далее в примере кода вы увидите, что назначено количество прослушивателей событий. Вы можете увидеть это, щелкнув / коснувшись снимка экрана выше и просмотрев исходный код.

Вы можете видеть в последовательности снимков экрана выше, что при воспроизведении видеообъявления собирается «10 монет», которые затем отображаются в приложении. Это было сделано одним из двух обработчиков, которые запускаются при срабатывании предопределенного «награжденного события». Вы снова найдете эти обработчики в исходном коде, и вы увидите, что один из них увеличивает переменную экземпляра _coins на 10 в функции setState (), поэтому затем отображается эта сумма.

Настройте своего слушателя

Ниже приведен один из прослушивателей событий, который перехватил это событие. Как видите, у вас есть возможность использовать сеттер в пакете Dart под названием videoListener, чтобы назначить обработчик событий только для видеообъявления. В данном случае это анонимная функция, которая должна принимать три параметра. Первый параметр является обязательным, так как это перечисляемое значение «RewardedVideoAdEvent», представляющее одно из восьми возможных событий (вы можете увидеть все восемь ниже. Прочтите функции print (), которые описывают каждое инициированное событие.)

Следующие два параметра необязательны, но имеют отношение к нам, потому что они участвуют в представлении награды. Глядя на их описательные названия, вы можете сказать, что первое описывает тип награды; второй предоставляет числовую сумму. Когда он включает в себя «события обратного вызова вознаграждения», возвращается тип String, «монеты». Следовательно, имя переменной экземпляра в примере приложения _coins.

Далее в примере приложения вы найдете второй прослушиватель событий или обработчик событий, который вызывается, когда запускается «событие вознаграждения». Он выделен красной стрелкой. Именно этот обработчик увеличивает переменную _coins в функции setState (). Обратите внимание, что, глядя на снимок экрана, вы можете получить еще более конкретную информацию и назначить анонимную функцию VoidCallback определенному сеттеру и уловить семь из восьми событий, запускаемых видеообъявлением . Однако, когда дело доходит до вознаграждений, вы должны назначить анонимную функцию для средства настройки видео, rewardedListener, которое снова включает параметры, rewardType и rewardAmount.

Проходить через слушателей

Итак, в пакете Dart, ads, был цикл for, который проходил через все прослушиватели событий RewardedVideoAdEvent.rewarded и в этом случае запускал код этих двух прослушивателей событий один за другим. другой. Аккуратно, не так ли?

Get With Getters

В следующем фрагменте кода в классе Ads есть ряд частных переменных, доступных только в этом файле dart. Первые четыре будут содержать идентификаторы из вашей панели управления Google AdMob. Следующие четыре связаны с настройками типа рекламы, отображаемой в вашем приложении Flutter. А последний определяет, тестируем мы или нет. У последних пяти есть соответствующие геттеры, позволяющие получить внешний доступ к своим значениям.

Получите рекламу

В дальнейшем мы увидим еще больше частных переменных библиотеки. Некоторые с сопровождающими геттерами. Однако вы заметите, что эти геттеры устарели. Я считаю, что эти ценности не для общественного потребления. Это ссылки на фактические рекламные объекты, и я не вижу необходимости делать их более доступными для внешних пользователей. Последние две переменные класса, _screenLoaded и _showVideo, используются для потока управления. Первый определяет, нужно ли загружать тип InterstitialAd (полноэкранный) ad . Второй определяет, готово ли видео к воспроизведению.

Три типа рекламы

Кстати, ниже представлен скриншот доступных на данный момент типов рекламы. Первый - это баннерная реклама, которая отображается в нижней части экрана. Следующее - это «полноэкранное» или межстраничное объявление, а последнее - снимок экрана работающего видеообъявления.

Избавиться от всего

Следующий фрагмент кода в пакете Dart - это функция dispose (). Это очищает вещи. Рекламы и прослушиватели событий удаляются из памяти. Наконец, отменяется ресурсоемкая ссылка на "видеообъявление". Эту функцию всегда следует вызывать в соответствующей функции dispose () объекта State.

Случай № 2: Настройте свои объявления

Во втором случае, обнаруженном в примере приложения, используется вместо одиночной функции init (), чтобы указать тип рекламы, которая будет отображаться в этом приложении, но три функции набора, поддерживающие каждый тип рекламы в настоящее время доступный. Это функции setBannerAd (), setFullScreenAd () и setVideoAd ().

Вы можете легко увидеть, что это позволяет вам, если хотите, указать разные настройки для каждого типа рекламы, поддерживаемой в настоящее время. Это означает, что вам не обязательно инициализировать настройки рекламы в функции init () объекта State. Вы можете сделать это в другом месте вашего приложения, если необходимо - и вы можете сделать это более одного раза в другом месте вашего приложения, если необходимо. У вас есть варианты. Варианты любви.

Каждой функции «set», конечно, должен быть передан назначенный им «идентификатор единицы», но после этого остальные настройки могут быть специфичными для этого типа рекламы. У вас есть варианты. В приведенном выше примере кода вы можете видеть, что для каждого типа рекламы определены разные прослушиватели событий. Два включают локальные переменные; никто не делает.

Показать баннер

Затем в классе Ads следует функция showBannerAd (). У него есть необязательный параметр State, который иногда используется для определения того, следует ли показывать рекламу в первую очередь. Если объект State не смонтирован, это означает, что приложение завершает работу. Нет необходимости продолжать показ рекламы. Обратите внимание, как используется каскадная нотация для первой загрузки, а затем отображения рекламного баннера.

Обратите внимание, что у него те же параметры, что и в функции setBannerAd (). Это означает, что вы можете установить настройки баннерной рекламы либо в функции init (), либо в функции setBannerAd (), либо в этой функции. Прямо перед тем, как вы это покажете.

Как вы можете видеть, выделено маленькой красной стрелкой, если какой-либо из восьми параметров передается функции, объект баннера, если таковой имеется, сначала удаляется, а для свойства _bannerAd установлено значение null. После этого можно снова установить баннерное объявление с предоставленными настройками. Есть смысл?

Установите баннерную рекламу

Следующая перечисленная функция - setBannerAd (). Эта функция позволяет вам установить те параметры, которые вы впервые увидели в функции init () выше, но эти параметры предназначены только для баннерной рекламы. Опять же, функция init () используется для инициализации всех трех типов объявлений, но вы можете в дальнейшем использовать эти три другие отдельные функции set для инициализации или три функции show для настраивать каждый тип рекламы индивидуально.

Остальные параметры - это те, которые вы видели ранее в функции init (). В setBannerAd () , функция _targetInfo () принимает эти параметры и заменяет любые значения, не переданные в качестве параметров и устанавливающие значение null на те, которые, возможно, предоставляются функцией init (), сначала вызываемой в initState () объекта State.

Как и функция init (), последний параметр описывает прослушиватель событий, AdEventListener (событие MobileAdEvent). Если он передан, он добавляется к объекту List внутри переменной класса «public», banner. Он будет содержать список слушателей событий, предназначенных только для баннерной рекламы.

Наконец, создан экземпляр класса BannerAd. Он присваивается переменной класса _bannerAd. Если требуется тестирование, следует использовать идентификатор BannerAd.testAdUnitId. В противном случае, если он доступен, это будет идентификатор блока вашего баннера.

Следующая функция, которую вы видите на снимке экрана класса Ads, - это hideBannerAd (). В нем баннерное объявление вызывает функцию dispose () ; затем свойство аннулируется.

Обратите внимание, что в функции setBannerAd () размер рекламного баннера является обязательным, поэтому значение по умолчанию AdSize.banner назначается, если оно не предоставлено именованный параметр, размер. В настоящее время вам доступны шесть возможных размеров.

Показать полноэкранную рекламу

На класс InterstitialAd (тип полноэкранного объявления), как и на баннерное объявление, ссылается переменная класса. В данном случае это переменная _fullScreenAd. Как и переменная класса Banner Ad, эта переменная может иметь значение null, когда ее объявление закрывается, поэтому это объявление, возможно, придется сначала «перезагрузить», когда оно будет вызвано, чтобы снова отобразиться в вашем приложении Flutter. Переменная "library-private" _screenLoaded имеет значение true в функции setFullScreenAd (), когда объявление действительно загружается в memory, а затем установите значение false после того, как оно будет показано в функции showFullScreenAd ().

Кроме того, как и в случае с баннерной рекламой, вы можете передать настройки этой функции, удалить любое существующее объявление в памяти и повторно применить эти настройки перед отображением рекламы. Вы найдете тот же подход, что и в видеообъявлении, представленном позже.

Установить полноэкранную рекламу

Следующая функция - setFullScreenAd (). Объект InterstitialAd создается с параметрами, указанными в его параметрах. Те, которые не указаны в качестве параметров, дополнительно предоставляются функцией _targetInfo (). Приемник событий, если таковой имеется, добавляется в Список прослушивателей событий, предназначенных только для полноэкранной рекламы. Затем создается экземпляр объекта InterstitialAd, который затем явно "загружается" с переменной _screenLoaded, для которой установлено значение true.

Функция hideFullScreenAd () удаляет объект InterstitialAd, устанавливая для его ссылки значение null. Точно так же, как его аналог баннерной рекламы.

Показать видеообъявление

Следующие несколько функций относятся к третьему и последнему типу рекламы, видеообъявлению. Вы поймете, что код очень похож на два других типа объявлений, позволяющих задать настройки перед фактическим показом видео.

Следующая после этого функция действительно является функцией setVideoAd (). Опять же, он загружает видеообъявление, вызывающее функцию _targetInfo (), чтобы предоставить любые оставшиеся параметры. Приемник событий, относящийся к этому типу рекламы, неоднократно определяется здесь и назначается переменной класса _videoAd.

Случай № 3: Настройка вашего шоу

Вот третий и последний случай, найденный в примере приложения. Здесь вы видите, что функция init () назначает идентификатор приложения, но затем реклама показывается с использованием настроек, переданных непосредственно функциям show. Это может быть наиболее вероятным подходом при запуске приложения Flutter.

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

Настройте таргетинг на рекламную информацию

Следующая функция вызывается в этой библиотеке классов трижды. Он используется для создания объекта MobileAdTargetingInfo, необходимого для загрузки трех типов объявлений. Обратите внимание, что утверждение assert. Опять же, _appId не может быть нулевым. Кроме того, вы можете видеть, что в этой функции оператор присваивания ?? = многократно используется для присвоения того, что находится в переменных класса Ads, только если значение параметра равно нулю. В некоторых случаях они оба могут иметь значение null, но это нормально. В конце концов, объект MobileAdTargetingInfo успешно создан.

Это все событие!

Далее приводится список установщиков, которые определяют все «прослушиватели событий», используемые в этом классе. Первый тип «прослушивателя событий», AdEventListener, используется всеми тремя типами рекламы. Это «дедушка» слушатель событий. Определите слушателя этого типа, и вы будете знать, что, если у вас есть все три объявления, доступные в вашем приложении, тогда все три будут активировать этот слушатель при вызове для загрузки, для отображения и для окончательного закрытия обратно в ваше приложение. Кроме того, вы увидите, что приведенный ниже код предоставляет разработчику средство «добавлять» и «удалять» любой прослушиватель событий.

Tyedef’s

Давайте остановимся на этом, вернемся к файлу Dart и посмотрим на операторы typedef, определенные сразу после операторов импорта. Их интересуют прослушиватели событий, используемые в библиотеке классов. С первого взгляда вы можете увидеть тип параметров, требуемых для каждого «типа» прослушивателя событий. Наконец, в списке указан объект List для хранения всех прослушивателей, которые могут быть добавлены для прослушивателя событий «grandaddy».

Тип событий

Заглянув внутрь плагина firebase_admob, мы можем увидеть до 15 отдельных событий, которые могут запускаться во время работы этих объявлений. Именно эти прослушиватели событий позволяют поймать конкретное событие. Затем вы запускаете код как часть взаимодействия вашего приложения с отображаемой рекламой.

Прослушивание рекламы

Давайте продолжим этот курс по рекламе. Далее указан класс прослушивателя событий, _AdListener. На первый взгляд, вы увидите, что он виден только в файле Dart с начальным подчеркиванием. В нем есть несколько объектов List, определенных один за другим - первый используется для адресации до семи возможных событий MobileAdEvent, запускаемых подключаемым модулем. Остальные объекты List относятся к одному конкретному событию из семи. Далее следует функция «прослушивателя событий», _eventListener (событие MobileAdEvent).

Наконец, вы видите выше, что функция clearAll () будет «очищать» и очищать память всех объектов List возможных прослушивателей событий.

Слушатель видеорекламы

Далее идет прослушиватель событий Video Ads. Вы увидите, что он очень похож на предыдущий класс прослушивателя событий, но работает с объектом RewardedVideoAdEvent. Его прослушиватель событий примет этот объект события, а также следующие именованные параметры: {String rewardType, int rewardAmount}. Вы можете увидеть перечисленные ниже восемь событий, которые в настоящее время определены для видеообъявления. Я заметил, что у каждого есть соответствующая функция «очистки» для удаления всех прослушивателей для определенного события.

RewardAd в MobileAd

Эта последняя «закрытая для библиотеки» функция, _toMobileAdEvent (), позволяет видеообъявлению использовать тот же объект списка обработчиков событий, _adEventListeners, который используется как баннерную, так и полноэкранную рекламу. Если задано конкретное событие «RewardVideoAdEvent», функция вернет соответствующий соответствующий объект «MobileAdEvent», в противном случае будет возвращено нулевое значение.

Продолжение

Я сильно изменил пакет Dart и написал об этом в дополнительной статье под названием Мой код бесполезен! Вот почему . У него будет более подробное представление об использовании пакета Dart и его библиотеки классов Ads.

TL;DR

В оставшейся части примера приложения вы найдете множество «способов настройки прослушивателей событий». Этим мы и закончим. Я думаю, что излагаемое ниже дает все возможные способы реализации слушателей. На скриншотах ниже я включил точки останова. Это означает, что я приглашаю вас сделать то же самое при самостоятельном запуске этого примера приложения. Это отличный способ оценить "поток управления" и то, какие события запускаются и в каком порядке они запускаются, когда ваши пользователи фактически взаимодействуют с вашей рекламой.

Сделано для общественного потребления

Как и любой хороший файл библиотеки, цель всегда состоит в том, чтобы сделать пакет Dart устойчивым для публичного использования. Все дело в том, как разработчик должен использовать код. В этом случае, например, я выбрал идиому Utility Class. Следовательно, предлагаемый класс - это просто набор общедоступных статических свойств и общедоступных статических функций, к которым вы можете получить доступ в масштабе всего приложения, просто поместив префикс Ads. Впереди. Однако такой подход не лишен соображений. Сделать код устойчивым для общественного потребления означает гарантировать, что любые параметры, предоставленные внешним миром, являются приемлемыми значениями. Таким образом, вы часто видели в коде проверку на нуль.

Однако предстоит еще кое-что сделать. Например, я не думаю, что какой-либо разработчик, попавший в вашу команду, должен иметь возможность без вашего ведома определять обработчики событий. В настоящее время этот пакет Dart позволяет это. Я думаю, вам нужно сначала предоставить им соответствующий «идентификатор устройства», а затем они предоставят его функции, которая определяет обработчик событий. Это средство «регулирования» этой возможности. Это то, что нужно учитывать при создании такого кода для других разработчиков. Неважно, предназначено ли ваше приложение для электронной коммерции или для рецептов тортов - всегда важны надежность и безопасность. Следите за такими изменениями в пакете Dart в будущих версиях.

Ваше здоровье.

* Исходный код по состоянию на 21 июня 2019 г.
^ Исходный код по состоянию на 29 мая 2019 г.

→ Другие рассказы Грега Перри