Где лучше всего вручную регистрировать просмотр экрана во Flutter с помощью пакета аналитики (в моем случае я использую Firebase Analytics, например, отслеживать экраны)?
Глядя на жизненный цикл Flutter, неясно, где имеет смысл отслеживать просмотр экрана.
Для StatelessWidget
я думаю, что build()
может иметь смысл, поскольку я предполагаю, что он вызывается только один раз за просмотр экрана.
А как насчет StatefulWidget
? В этом случае build()
будет бесполезен, так как его можно будет вызывать много раз. Другими кандидатами являются initState()
, createState()
или конструктор, который, по-видимому, вызывается только один раз, хотя я предполагаю, что все они могут вызываться более одного раза за просмотр экрана, поскольку виджеты вверх по иерархии перестраиваются.
@CopsOnRoad спасибо, я примерно так и понял, так что похоже, что здесь нет фантастического решения :(
Сэр, вы сотрудник Google, у вас есть прямой доступ к команде Flutter, вы должны быть на расстоянии одного сообщения, чтобы получить ответ на этот вопрос для себя и для себя. Спасибо, джентльмен :)
@CopsOnRoad Ха, я не работаю в команде Flutter, но могу спросить их. Я предпочитаю спрашивать и отвечать на SO, чтобы другие могли видеть ответы :) Тем не менее, я посмотрю, смогу ли я заставить кого-то из команды присоединиться.
Ответ: это зависит. Для StatelessWidget
может подойти событие Analytics в build()
, но только в том случае, если родительские виджеты не перестраиваются часто. Для StatefulWidget
применимо то же самое, но вы также должны учитывать перестроения из-за изменения состояния (что, скорее всего, происходит часто).
На самом деле, самый безопасный путь — не вызывать события Analytics в каких-либо частях жизненного цикла виджета, а вместо этого вызывать событие пользовательского интерфейса, которое может активировать экран, например кнопку редактирования, открывающую экран редактирования. Однако проблема с этим подходом заключается в том, что экран может быть открыт из разных мест в приложении (это означает, что вам нужно дублировать вызовы Analytics во всех этих местах).
Это означает, что лучшим вариантом, вероятно, является привязка Analytics к PageRoute
переходам, чтобы она вызывалась последовательно при каждом выполнении маршрута страницы. Это продемонстрировано в файле документы. При этом будут пропущены экраны отслеживания на панели вкладок и другие типы навигации по пользовательскому интерфейсу, но, как также говорится в документации, один из способов справиться с этим — реализовать RouteAware
и подписаться на FirebaseAnalyticsObserver
(пример реализации вкладок).
Вы правы, для
StatelessWidget
это должен быть методbuild()
, а дляStatefulWidget
вы можете использоватьinitState()
, однако в обоих случаях данные могут быть изменены извне и переданы им, поэтому это не на 100% точно в зависимости от того, как вы это реализуете.