Программирование : Dart & Flutter по-русски
Vladimir Avramov
Тут просто нужно понимать зачем существует мокито в реализации на разных языках и почему преимущественно применяется для модульного тестирования.
Sergey Hottabych
Дело в том, что lives - это не метод, а обычная переменная класса.
Sergey Hottabych
Поэтому и непонятно
Vladimir Avramov
Ну ок. С поправкой на дарт проксирует получение этой переменной (там все равно метод создается в прокси).
Sergey Hottabych
То есть, он обращение к переменной подменяет на вызов метода, что ли?
Sergey Hottabych
Почему просто не кинуть ошибку
Vladimir Avramov
Ну мок объект это как правило прокси. Не знаю как в дарте мокито работает, но вангую, что оборачивает в геттер, который кидает исключение.
Vladimir Avramov
Как он кинет ошибку, вставит логику генерации исключения?
Vladimir Avramov
Точнее куда? Ему же нужно подменить как-то доступ к этой переменной
Vladimir Avramov
Возможно, в дарте какая-то другая логика проксирования (но сомневаюсь).
Sergey Hottabych
В Дарте у каждой переменной неявно есть геттер и сеттер (так же, как в Kotlin)
Sergey Hottabych
Там буквально соседний пример, что ты можешь замокать геттер, чтобы переменная при обращении выдавала не 9, а 1, к примеру. Безо всяких обёртываний в методы
ilx13
А можно ли виджет вывести на хомскрин ios?
ilx13
в окно виджетов на ios
Артем Терещук
ребят как вы отслеживаете посещаемость/активность в приложение ? Firebase analytics ?
Eugene
[
"Всем привет, по каким-то неведомым причинам перестали работать хот релоад и хот рестат. \nПричем никаких ошибок, просто всегда ",
{
"type": "pre",
"text": "Reloaded 0 of 1433 libraries in 413ms.",
"language": ""
},
" чтобы я не менял в коде"
]
???????
Беда в том, что у тебя тот же инстанс. И заворачивает это дело не BlocBuilder, а сам Bloc И это поведение ты никак не сможешь переопределить у блока.
???????
Так что да, избегай const стейтов и каждый новый стейт должен быть новым объектом.
???????
[
"Ну или:\n1) переопредели ",
{
"type": "code",
"text": "==\n"
},
"2) добавь миксин что переопределяет ",
{
"type": "code",
"text": "==\n"
},
"3) добавь в свой стейт метод/конструктор clone или copyWith для генерации новых инстансов на основании существующего стейта"
]
Igor Kusoff
как один из вариантов в принципе и в консоли есть некоторая информация
Sergey Hottabych
До меня вроде дошло. Имеется в виду, "проверить, что метод, в котором есть обращение к cat.lives, кидает исключение", так что ли?
L
Как сделать, чтобы жест "назад" работал и от середины экрана? Я добавил gesturedetector, и он работает, но нет анимации перетаскивания. Ивент срабатывает уже только после самого жеста
Eugene
Разобрался с этой штукой, AS при рефакторе проставила абсолютные пути в импортах, оказывается это ломает и хот релоад и хот рестарт
Sergey Hottabych
А чем отличается Fake от Mock? Как я понял, в Fake ты должен обязательно переопределить те методы, которыми будешь пользоваться, иначе он будет бросать UnimplementedError; в Mock же ничего переопределять не надо. Почему же тогда написано: "Рекомендуется сначала применять реальный объект, потом Fake, и только потом Mock"?
Sergey Hottabych
[
"Знакомая история. Я на эту тему issue создавал.\n",
{
"type": "link",
"text": "https://github.com/flutter/flutter-intellij/issues/4551"
},
""
]
Sergey Kuznetsov
Всем привет, попросили залить проект через codemagic на appstore, Все ок, но проблема, в том, что нужно изменить версию, Error: code 1091 (App Store operation failed. Redundant Binary Upload. You've already uploaded a build with build number '34' for version number '1.5.1'. Make sure you increment the build string before you upload your app to App Store Connect. Это можно сделать без XCode?
Vladimir Avramov
Stub обьект, поведение которого определяется для ряда тестов. Mock обьект, который ведет себя так, как нужно тебе в каждом тесте. Fake это по сути "полноценный" stub. Может вызывать реальную логику, но полностью не повторяет реальный обьект (вэб-сервис, например или сервисный метод). Как-то так я понимаю. Если кто-то поправит меня, будет здорово.
Sergey Hottabych
[
"Может, это поможет?\n",
{
"type": "link",
"text": "https://docs.codemagic.io/building/build-versioning/"
},
""
]
Sergey Kuznetsov
Спасибо)
Sergey Hottabych
Как я понял, в Fake ты честно переписываешь тестируемые методы кодом. В Mock ты с помощью when заставляешь их выкидывать нужные значения.
Vladimir Avramov
Да. Fake наиболее приближен к реальному обьекту. Просто не содержит всю логику.
Sergey Hottabych
A fake has a default behavior for every field and method of throwing UnimplementedError. Fields and methods that are excersized by the code under test should be manually overridden in the implementing class.
Sergey Hottabych
А вот что про Mock написано: A mocked class implements all fields and methods with a default implementation that does not throw a NoSuchMethodError, and may be further customized at runtime to define how it may behave using when.
Dart Flutter
Пассаны, подскажите как по кнопке назад которая в аппбаре обнулять ранее введённое значение?
Dart Flutter
в текстформфилд
Andrey
в OnWillPopScope оберни и в одноимённом методе пропиши логику
Andrey
как сделать эквивалент BlocListener через Provider? он ведь на нём сделан
Sergey Hottabych
ChangeNotifierProvider ?
Roman Vasiliev
Скопировать его код
Andrey
да меня там смущает обязательное create/value, не пойму что туда прописать
Andrey
типа есть наверху объявленный провайдер, чуть ниже должен быть listener к нему же
Sergey Hottabych
В create создаешь класс, из которого будешь слушать изменения. value — если у тебя этот класс где-то был ранее создан, и тебе надо просто указать ссылку на него.
Sergey Hottabych
[
"listener — это Provider.of / Consumer / ",
{
"type": "link",
"text": "context.watch"
},
""
]
Andrey
я хочу сделать переход на новую страницу по наступлению события, через bloc это легко делается, а вот через чистый provider не пойму как сделать
Andrey
хочется отойти от bloc, т.к. слишком много boilerplate кода
???????
Никак это нормально не сделать именно через "Provider"
???????
Это полнейшая глупость считать Stateful виджет архитектурным решением)
Ivan
[
"признаться, раньше посмеивался над этим холиваром тут. сейчас, после написания приложения на 38 экранов (использовал ",
{
"type": "link",
"text": "https://pub.dev/packages/stacked"
},
") признаю - все так =)"
]
???????
Это вы еще в одного небось писали
Andrey
можно поподробнее?
???????
Отсутсвие архитектуры сильно бъет, когда работает несколько человек или когда нужно поддерживать чужой или давно забытый код
Ivan
можно, но чуть позже
???????
Насрать спагетти и забыть - много ума не надо, хоть целиком обмазывайтесь провайдером или еще какой индусской чушью
Ivan
так точно, в тиме было бы весело))
Dagba
Привет, подскажите плз когда там завезут optional в мастер, об этой фиче говорится еще с конца прошлого года
Dagba
вообще по сравнению со свифтом дарт очень медленно развивается(
Evgenii Elchev
нул сейфти
Evgenii Elchev
и да, в дарте это не опшенал
vasilich
До конца года обещают Статья недавно на медиуме была
NewBalanceM5
[
{
"type": "link",
"text": "https://t.me/FlutterDevRu/298"
}
]
NewBalanceM5
вот она, если правильно понял
Sergey Hottabych
[
"Попробуй подменять один экран на другой.\nДолжно быть что-то вроде:\n",
{
"type": "pre",
"text": "home: Consumer (\nbuilder: (_, auth, __) => auth.user == null ? LoginPage() : MainPage()\n)",
"language": ""
},
""
]
Andrey
да это билдер, он может только виджеты создавать и отображать, но ничего другого, диалог через него не покажешь
Nikita Domnitskii
Дарт так-то вполне себе развивается
Nikita Domnitskii
Это на ннбд такой затык был
DVS (Read The F.ng Manual) Studio (NoHello)
[
"ну при большом желании...\n",
{
"type": "pre",
"text": " WidgetsBinding.instance.addPostFrameCallback((timeStamp) {\n //show dialog\n});\n",
"language": ""
},
"чтоб и контекст был и доступ к актуальной модели"
]
Ivan
да это просто особенность данной "архитектуры" - не хочешь дублировать код для каждого вью/стейта получаешь это, иначе 100500 файлов что тоже не айс. но я рукожоп конечно, и мой пример не показателен)
L
Может кто-то скинуть список маст хев плагинов, которые можно юзать в большинстве проектов?
Umarjon
chto etooo ????????
Ivan
слабоумие и отвага)))
Roman Vasiliev
Функции запретили?
Александр Васильев
Если первый проект , то это нормально - теперь есть мотивация на архитектуру. Посмотрите реализацию clean у resocoder. Из стейт менеджмента я за mwwm - как-то ближе к флаттер, чем простой дарт код bloc.
Mansur Panzerkampfwagen IV
Mvvm? Или это что-то новое?
Александр Васильев
Да только, View = Widget
Александр Васильев
Surf выпустил
Mishanya
Привет, делаю приложение на iOS столкнулся с проблемой , что на iPhone X интерфейс масштабируется и элементы рендерятся крупнее чем на XR или 6s
Mishanya
это такая фича у X версии?
vasilich
Например? Два скрина?
vasilich
Флаттер рендерит пиксель ту пиксель. Если задал 200х300 блок, в зависимости от размера пиксела на каждом из экранов будет разный размер. Если флексами сверстал - относительно размера экрана будет отличия
Mishanya
Ну вот смотри пример
Mishanya
Слева XR, справа X
Mishanya
Хотя разрешение икса выше
Mishanya
Но такое ощущение ,что он масштабирует
vasilich
А во втором случае случаем никто не побаловался масштабированием экрана в настройках?
Sergey Hottabych
Мне первое, что в голову пришло — в сторе (который ты провайдишь) сделать вспомогательный стрим, в него закидывать событие, а в виджете слушать его через listen и создавать диалог или переходить по навигатору.
Mishanya
Спасибо, у пользователя реально стояла опция увеличения
?ИОНЕР
Отличный повод, чтобы учесть этот фактор в приложении ;)
Mishanya
Пользователи уже заявили, что прила должна подстраиваться под них с любым увеличением
Oleg
Всем привет ! А кто-то использовал плагин flare_splash_screen? Проблема в том что сплэш не на весь экран показывает ...
Sergey Kuznetsov
Всем привет, можно ли сделать так, чтобы в page view передать индекс и к примеру фотографии листались не с нулевого индекса, а с того, который я передаю. У меня есть список фотографий и индекс фотографии и я передаю их на страницу с pageview. Если я передаю ненулевой индекс я могу сразу листать не только направо, но и налево?
Roman Cinis
textScaleFactor глобальный выставите на 1.0 и пускай настраивают, ничего не изменится, kek
Konstantin Ignatiev
Смотри PageController. Там есть initialPage
Sergey Kuznetsov
Спасибо)
Nodir-Bek
Privet vsemu. Ya iz Uzbekistanu
Kit Khilobok
Как временное решение можно в принципе отрубить скейлинг)
Aleksandr
привет! есть app на flutter, писанное под телефон. как опубликовать аналогичное приложение для планшетов, с черной рамкой вокруг, как например у instagram и прочих апок? как это сделать? не могу найти решение, то есть не знаю по каким словам это загуглить).
vasilich
Вроде бы апп стоп сам может это разрулить
ilx13
Ребята можете направить ссылкой на инструкции годные, как опубликовать приложения из под флаттера на плей маркете. так как это первый раз у меня не догоняю с сертификатами и ключами
Aleksandr
в смысле сам? опубликовано с поддержкой планшетов, а там полная хрень на весь экран с кривой версткой. то есть надо было галку не ставить что доступно на планшетах?)
Igor Kusoff
[
{
"type": "link",
"text": "pub.dev"
}
]
Ivan
[
{
"type": "link",
"text": "https://flutter.dev/docs/deployment/android"
}
]
Sergey Hottabych
Так делай не кривую )
Aleksandr
во многих апках нет планшетной версии и как то стандартно на планшете отображается по центру мобильная версия, а по периметру черный экран. Вот и спрашиваю как это сделать.
Sergey Hottabych
Не знаю про такое. Лучше научиться адаптивной верстке, чтобы на разных разрешениях и соотношениях сторон хорошо смотрелось.
Sergey Hottabych
Есть LayoutBuilder, и еще всякие интересные виджеты.
Aleksandr
во, не знаешь. а оно есть)
Sergey Hottabych
А по центру мобильная версия, и черный экран — это убожество, как по мне.
Aleksandr
instagram с их возможностями ипользуют такой вариант на планшете, да и многоии другии приложения. причем это все сделано одиноково на всех апках.
vasilich
А если аудитория планшетов ничтожна?)
Sergey Hottabych
Кстати, нашел пакетик прикольный, after_layout Он добавляет метод жизненного цикла afterFirstLayout Под капотом он именно так и устроен
Sergey Hottabych
инстаграм на ReactNative сделан
DK
разве? в режиме планшета он просто растягивает всё, интерфейс все ещё адаптивен
Fearless Cry
экран настроек только ??
vasilich
Прям весь весь?)
Fearless Cry
They transferred the Photos Of view, Push Notification Settings and Edit Profile views to React Native.
vasilich
Это больше похоже на правду) Пару скринов ляпнули.
Aleksandr
вот это скрин с планшета. сделано одинаково. вопрос как?
Fearless Cry
таргет только на айфон поставить вроде нужно
Aleksandr
в обоих случаях есть кнопка справа снизу, одинакеовая
Aleksandr
то есть указать поддержку только тлф, а в планшетах так будет отображатся?
Nikita Domnitskii
Так там обычный постфрейм коллбэк
Fearless Cry
ну он так и сказал
Sergey Hottabych
Ну да, просто для удобства
Fearless Cry
вопрос в том нужен ли для этого пакет вообще)
Nikita Domnitskii
Ну вот да, весьма сомнительное что-то
Sergey Hottabych
Мне приходит в голову только обернуть приложение в Transform и отскейлить, чтобы такого эффекта добиться.
Fearless Cry
да это нативное поведение приложений, не адаптированных под планшет
Fearless Cry
айос сама это делает
Aleksandr
это где то в апке прописать надо, или в аппконнекте? андроид так же интересует, где надо изменить настройки?)
Sergey Hottabych
Вопрос, нахрена? Человек говорит: "Я хочу сделать какаху. Чтобы черная рамка по краям". Ему говорят, что это некрасиво. "Нет, я хочу какаху".
Fearless Cry
может потому что не тебе решать?
Fearless Cry
ты же не используешь нормальные стейт-менеджеры вместо провайдера
Sergey Hottabych
Не хами.
Fearless Cry
В чём хамство?
Sergey Hottabych
Не твоё собачье дело, чем я пользуюсь. Так понятнее? Надоел, серьёзно.
Fearless Cry
Не твоё собаье дело, зачем ему эта чёрная рамка Так понятнее?
Fearless Cry
Пытался зазеркалить ситуацию, но ты слишком тугой чтобы это понять
Sergey Hottabych
Пошел на хуй.
Vladimir Avramov
[
{
"type": "mention",
"text": "@bunopus"
}
]
Andrey Tsvetkov
я так понимаю тут лучше ничего не спрашивать?
Kit Khilobok
На андроиде такого сделать не получится, на айоси такое работает, если приложение не поддерживет планшеты
Константин Буланов
Да нет. Тут все дружелюбные.
Andrey Tsvetkov
ну я вот только к вам присоединился, а тут такое
Kit Khilobok
Другой вопрос, что такое никто не любит и лично я таким на планшетах не пользуюсь
Fearless Cry
ну это местный сумасшедший, не обращай внимание
Angry TaigaFox
Тут культ лиса и дрочева с блоками. Welcome
Fearless Cry
ну лис не очень-то за блок
Sergey Hottabych
Плюсую неистово )
Andrey Tsvetkov
провайдеры, похоже, тут не в почёте? мне гугл столько про них рассказывал, что они будущее, а тут как-то не особо идут
Sergey Hottabych
В этом отдельно взятом чатике не в почете.
Kit Khilobok
Почему не в почёте то?)
Angry TaigaFox
Ну было время он топил за них до талового
Ivan
юзай, что нравится тебе)
Fearless Cry
потом его предал фелангел
Andrey Tsvetkov
в том то и дело, что я пока ещё не знаю, что мне нравится
Andrey Tsvetkov
неделю как начал смотреть в сторону флаттера
Andrey Tsvetkov
да и в сторону мобильной разработки в целом
Pavel Vasilenko
Странно, что музыканты из-за семи нот не посылают друг-друга...
Sergey Hottabych
Тут очень токсичный чат. В основном есть трое тупоголовых ублюдков, это Артем Крупп, Домницкий, и Фокс. Которые корчат из себя знатоков, и вообще берега попутали. И почему их не банят, совершенно непонятно.
Fearless Cry
Может потому что мы как раз не путаем ничего?
Fearless Cry
А ты усиленно переходишь на личности
Kit Khilobok
Хз, мне фокс не раз помогал и объяснял, в чём я не прав)
Kit Khilobok
Другое дело, чтобы тебе ответили нормально, нужно и вопрос формулировать соответственно)
Sergey Hottabych
Он почему-то сразу меня невзлюбил, может, соперника во мне распознал, не знаю. И сразу начал на меня навешивать ярлык дурачка и оскорблять. А остальные тупо как стадо, начали ему подпевать.
Fearless Cry
у тебя с головой всё в порядке?
Igor
по мне так Hottabych самый сильный тут
Sergey Hottabych
Сколько раз надо тебя послать, чтобы ты отстал и занялся своими делами? Пойди что ли пивка выпей, вечер субботы все-таки.
Angry TaigaFox
Ну Фокс и правда такой себе типок из общения, но довольно грамотный
Деда
Все равно сколько волка не корми, а у слона здрасьте пожалуйста
Igor
ты то уже бахнул походу)
Fearless Cry
Ну ты тут усиленно что-то говоришь в мою сторону. Почему я должен молчать? У тебя реально кукушка поехала, видимо
Igor Kusoff
для личных оскорблений предназначены лс
Деда
Парни заканчивайте правда, мир всем
Aleksandr
ну ты ни разу в проектах не участвовал, там не спрашивают как красиво или нет. там стоит задача сделать так и ни как по другому, а как это будет, красиво или не красиво - это проблема не моя
Angry TaigaFox
Начни писать большой проект и поймёшь, что всё-таки практичнее из существующих "менеджеров состояния". Из личного опыта могу сказать что ChangeNotifier + Provider хорошо показали себя
Sergey Hottabych
Участвовал и не в одном. Так бы сразу и сказал, что приказ начальства.
Sergey Hottabych
Сделать черную рамку )
Kit Khilobok
[
{
"type": "link",
"text": "https://pub.dev/packages/stacked"
},
"\nМоя личная рекомендация"
]
Kit Khilobok
В основе те же провайдеры, есть реактивность, в доке очень хорошо прописано, как надо разделять код, а как НЕ надо, что для чего использовать и т.д. и т.п.
Aleksandr
спасибо. я в принципе это реализовал сам, и это работает норм. но увидел что нативно так делают, но если на андроид не работает, то оставлю как есть тогда.
Kit Khilobok
Вообще в андройде если очень надо, это не сложно сделать на уровне флаттера, то есть всё абсолютно оборачивать в чёрную рамку, если запускается на планшете
Nikita Domnitskii
Человек-провайдер сказал что я берега попутал
Nikita Domnitskii
Как дальше жить
Kit Khilobok
В нативе на дройде сделать такое намного затратнее по времени и сложнее
Nikita Domnitskii
Вообще на ведровых планшетах никогда такого не видел
Nikita Domnitskii
Только на айпадах
Kit Khilobok
Потому что айос сама такое делает, если аппка для айфона, а андройд всё скейлит
Aleksandr
да, на флаттере уже запилил, не сложно. но нет кнопки по ресайзу, ну это лишнее.
Fearless Cry
это айосная тема с кнопкой ресайза
Andrey Tsvetkov
спасибо, ознакомлюсь
|