Программирование : Dart & Flutter по-русски
Radomir Epur
Кажется я понял почему build variant опять стал debug. Подозреваю что из-за flutter clean.
Anatoliy Dvoryashin
Всем Привет. Кто знает как сделать вот такой эффект затемнения для фона
Anatoliy Dvoryashin
фильтр?
Hellomik
так иеди есть как сделать ?
Andrey
не работал с CustomPainter, поэтому могу только спросить зачем он вообще понадобился, оправданы ли такие сложности?
Hellomik
в этой ситуации да
Andrey
TickerProviderMixin есть?
Tagir
Нет, добавил - появилось. Спасибо!
Igor
Как ходить по экранам но что бы navigationBar оставались?
Igor
в HomeView я перехожу на другой виджет. И естественно navigationBar пропадает
Roman Solovev
[
"Кто сталкивался с проблемой дебага приложения на физическом устройстве с ios 13.3.1?\nУ меня personal team license free.\nВ логах ругается на образ и сертификат и крашит приложение при запуске.\nВ официальном репозитории нашёл инфу что такая проблема не только у меня... Может есть среди нас гении которые смогли преодолеть это?\n-----------\n",
{
"type": "bold",
"text": "dyld: Library not loaded: @rpath/Flutter.framework/Flutter\n Referenced from: /private/var/containers/Bundle/Application/6B89BA26-0D2E-4574-A425-27AF922C1CF5/Runner.app/Runner\n Reason: no suitable image found. Did find:\n /private/var/containers/Bundle/Application/6B89BA26-0D2E-4574-A425-27AF922C1CF5/Runner.app/Frameworks/Flutter.framework/Flutter: code signature invalid for '/private/var/containers/Bundle/Application/6B89BA26-0D2E-4574-A425-27AF922C1CF5/Runner.app/Frameworks/Flutter.framework/Flutter'"
},
""
]
Andrey
попробуй завернуть HomeView в Navigator
Radomir Epur
Или используй TabBarView.
Igor
такая популярная задача, ниодного урока
Andrey
а тебе надо сделать навигацию как в контакте?
Igor
да такая много где. Soundcloud например
Andrey
просто в купертиновских виджетах это по умолчанию есть, несколько вкладок и в каждой своя навигация, в андроиде эти вкладки позиционируются по-другому, поэтому стандартного, насколько я знаю, нет
Andrey
т.е. на андроиде каждая вкладка не хранит историю перемещений - если перешёл на другую и переключился обратно она должна вернуть в самое начало
Andrey
я находил реализацию через Offstage на Medium, но Offstage не рекомендуется использовать, т.к. он поддерживает состояние постоянно, даже когда его не видно
Roman Solovev
Есть варианты тестировать только на симуляторе или на устройстве с более старой ios
Dan
пока вроде да, я тут задавал вопрос пару раз такой, никто не ответил может не у всех этот косяк
Dmitriy Orteney
[
"Все по гайдам)\n",
{
"type": "link",
"text": "https://material.io/components/bottom-navigation/#behavior"
},
""
]
Andrey
ну да, самое тупое, что у них даже в youtube используется вариант навигации iOS
Roman Solovev
Возможно ещё из-за того что лицензия персональная, бесплатная
Dan
ну еще и всякие файрбейзы не у всех
Igor
ну навигация не пропадает при переходах
Igor
конечно можно ее пихать в каждый виджет
Dmitriy Orteney
[
"Тут же есть документация как использовать\n",
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/BottomNavigationBar-class.html"
},
""
]
Roman Solovev
Я сталкивался с такой проблемой и на unity и на react-native (viromedia). Про юнити писали что проблема конкретно в бесплатном сертификате.
Dmitriy Orteney
Смысл в том, чтобы body скафолда менять при выборе вкладки
Павел
уроки вроде были. применяется вложенные Navigation
Igor
ну это как бы на первом уровне. А потом в том виджете который в body, ты делаешь Navigator.push, и все это дело уходит в новый виджет
Павел
в каждом табе свой виджет Navigation
Igor
мне кажется я тоже видел.
Павел
ищи по ключу Nested Navigation
Павел
скоро тоже буду делать)
Roman Solovev
не вижу поддержки 13.3
Igor
чет нашел. Буду пробовать щас
Dan
на 13.3 все было ок, 13.3.1 поломала все
Павел
Есть плагин у студии чтобы сразу документацию открывал на класс?
Andrey
обычно наводишь на класс он показывает мини-окно с некоторой документацией, можно ещё F1 нажать или сразу перейти к классу
Олжас Сулеймен
Column -> Navigator, BottomBar
Igor
можно поподробней :)
Павел
[
"думал что-то удобнее, чтобы сразу страницу с ",
{
"type": "link",
"text": "api.flutter.dev"
},
" тянуло"
]
Олжас Сулеймен
Глянь в доке Navigator виджет даёшь ему глобал ключь и этот ключь прокидываешь в боттом бар и там по ключу дергаешь методы стейта навигатора
Олжас Сулеймен
Я хз как это будет работать в материал аппе, я пишу без него
Олжас Сулеймен
Так как там свой верхни навигатор
Артём Ефименко
Если получится, маякнёшь? С такой же проблемой столкнулся
Павел
Если не в материал апе писать и не в купертино, то в чем? Голые виджеты?
Павел
просто верстка Col Row ?
Олжас Сулеймен
да, если нужен материал виджет то можно завернуть в Material, навигатор можно использовать внутри маетриал, я не знаю как там будет с роутингом доки говорят нормально
Павел
ну его для того и выпустили, чтобы Навигация и скафолд из коробки как говорится. Меньше руками верстать
Evgenii Elchev
ну навигация это же анимация
Олжас Сулеймен
анимацию не обязательно
Evgenii Elchev
логично что она к конкретному семейству виджетов относится
Evgenii Elchev
без анимации, вся навигация это сменить одни виджеты на другие
Evgenii Elchev
можно просто switch в build сделать)
Олжас Сулеймен
можно и так но есть Navigator
Evgenii Elchev
и через setState менять)
Evgenii Elchev
он к материалу относится же вроде
Олжас Сулеймен
вот бы он еще и в параметры в роуте мог
Олжас Сулеймен
нет это базовый виджет
Олжас Сулеймен
нет его экспортирует material из widgets
Evgenii Elchev
точно, уже посмотрел
Олжас Сулеймен
вообще поробуйте так писать полезно для кругозора без material и cupertino
ilx13
да связано). почему на голых сокетах не писать? чем вебсокет получше можете объяснить?
Evgenii Elchev
так там же нет особой разницы, кроме того что компонентов стандартых нет, все руками делать надо
Павел
я взял для проекта визуальный фреймворк, чтобы было одинаково на обоих платформах, но главное дерево надо инициализировать через материал и купертино мне кажется
Павел
разрабы уже позаботились о кнопках назад и т.п. как минимум
Evgenii Elchev
если сильно хочется
Олжас Сулеймен
для интереса ))
Павел
иначе предъявят обладатели платформ, что не привычно
Evgenii Elchev
хз, вполне все привычно с материалом
Павел
это обнадеживает от обладателя иос)
Павел
пока стартану с него
Evgenii Elchev
материал подстраивается по умолчанию
Павел
кнопка назад птичка?
Evgenii Elchev
там из того что в галаза бросается это навбар (в ios он анимируется подругому при переходе) и попапы
Evgenii Elchev
физика скрола, свайп назад для перехода
Evgenii Elchev
я тоже, и менеджеры на работе уже со мной согласились)
Павел
или на купертино собрать проект. Обычно Андрод юзеры не так придирчивы
Павел
Пишущие на ассемблере смотрят с ухмылкой)
admin
И пишут на асме через асм вставки си
Денис
Есть кто с admob работал? Пишет постоянно ad failed to load 3, читаю что ошибка не в коде. Но уже проверил все настройки AdMob и внутри приложения
Денис
все равно не грузит рекламу
Igor
это похоже No fill - эдмоб не вернул рекламу. Тестовая показывалась? Нет рекламы для вашей апы либо проблемы с натройкой эдмоб аккаунта и тд
Денис
тестовая показывалась
Денис
No fill может быть пару дней, но потом набивается список рекламы и начинает показывать. у меня неделю уже так
Денис
нашел issue в либе у многих также
Денис
[
{
"type": "link",
"text": "https://github.com/kmcgill88/admob_flutter/issues/101"
}
]
Rinat Kurmashev
кто как разделяет пришедшие ошибки от апи по типам? например я сейчас для dio error делаю проверку на response==null и если это так то считаю что нет подключения к интернету, это правильный подход?
Rinat Kurmashev
кто как чекает доступность интернета?
Алексей Анисов
апи через await вызываешь?
Алексей Анисов
ну типо можно экспешн кинуть
Алексей Анисов
если Rx, то там есть куда ошибки запихивать
Rinat Kurmashev
await dio.request
Алексей Анисов
ну и кидаешь эксепшн что нет инета от туда, там где делаешь запрос - обрабатываешь его
Rinat Kurmashev
так он и так кидается если имеется, я его в своём interceptor перехватываю
Rinat Kurmashev
ошибки могут быть разные
Алексей Анисов
создай разные эксепшены
Rinat Kurmashev
вот я спрашиваю про то как понять например что ошибка = нет интернета
Алексей Анисов
зависит от твоей фантазии, можешь создать эксепшен NoConnectionException, Можешь создать ApiException с ерор кодами или енумом внутри и там передавать тип ошибки
Алексей Анисов
catch же позволяет ловить разные эксепшены
Алексей Анисов
ну да, вроде есть
Денис
response null не круто, лучше иметь какой нибудь connectivity плагин
Rinat Kurmashev
[
{
"type": "pre",
"text": "if (err is DioError) {\n if (err.response == null) {\n return 'Отсутствует подключение к сети интернет';\n }",
"language": ""
},
""
]
Rinat Kurmashev
вот я щас так делаю
Rinat Kurmashev
это верно?
Алексей Анисов
не совсем, что значит response == null? и почему вообще есть response в ошибке?
Rinat Kurmashev
[
"ну например дальше: \n",
{
"type": "pre",
"text": "else if (err.response.statusCode == 500) {\n return 'Внутренняя ошибка сервиса: ' +\n err.response.data['error']['message'];\n}",
"language": ""
},
""
]
Алексей Анисов
и что? почему внутри err лежит response?)
Rinat Kurmashev
эмм, эти вопросы скорее к создателям dio)
Rinat Kurmashev
я то откуда знаю
Rinat Kurmashev
но оно так работает
Алексей Анисов
или к именованию твоих переменных?
Алексей Анисов
где ее объявление?
Алексей Анисов
понял, да, либа конечно топ
Павел
dio это копия axios из мира JS ?
Rinat Kurmashev
[
"это ошибка которая приходит в interceptor\n",
{
"type": "pre",
"text": "@override\nFuture onError(DioError err) async {",
"language": ""
},
""
]
Алексей Анисов
короче я понял в чем проблема, тебе надо перед запросом проверять наличие соединения через другой плагин
Алексей Анисов
там через нэтив это по идее делается
Rinat Kurmashev
на stackoverflow видел решение через connectivity
Rinat Kurmashev
ну оно тоже по ощущениям костыльное какое-то
Алексей Анисов
тебе response = null как быстро приходит после запроса?
Maksim Loginov
понял, плагин ставит префикс “flutter.” и поэтому к нативу нет доступа малоли кому-то пригодится
Rinat Kurmashev
если я на девайсе выключил интернет - мгновенно
Алексей Анисов
ну тогда можешь и так проверять ?\_(?)_/?
Алексей Анисов
просто это не факт что проблема с инетом
Алексей Анисов
может быть сервер просто не доступен
Rinat Kurmashev
я понимаю
Алексей Анисов
а плагин именно твой доступ в инет будет проверять
Алексей Анисов
тут зависит от того что тебе надо
Rinat Kurmashev
[
{
"type": "link",
"text": "https://github.com/flutterchina/dio/issues/355"
}
]
Rinat Kurmashev
вот похожее обсуждение
Алексей Анисов
ну вопрос в том надо ли тебе это различать?
Алексей Анисов
я думаю не особо
Rinat Kurmashev
думаю нет
Rinat Kurmashev
просто ошибку более общую показывать: нет интернета либо сервис не доступен
admin
каким образом в video_player можно синхронизировать видео с аудио(видео и аудио разными файлами)
admin
пробовал с помощью addListener, если с паузой и остальным все ок, то с перемоткой проблема
Igor
Ты с ним работал? С виду все хорошо там. Не?
N A
работал на NS + Angular, смотря какое приложение хочешь сделать, если небольшое то вполне неплох
Timur Karimov
Если приложение небольшое проще на нативе написать две версии
Павел
[
{
"type": "link",
"text": "https://i.imgur.com/kJiRH6k.png"
}
]
Павел
к теме про материал на иос
admin
а где ты читаешь это?
admin
я думал может книга какаято)
admin
SliverAppBar помоему
Bogdan Lukin
Либо использовать платный аккаунт для подписи, либо откатить iOS (придётся сброс устройства делать и не уверен что всегда можно), либо обновиться на бету iOS (придётся ещё бету Xcode поставить)
Roman Solovev
По поводу платного аккаунта это проверенно? У тебя это решило проблему?
Bogdan Lukin
В issue писали, что решает, я не попробовал, проблема конкретно в паре версий начиная с 13.3.1, в бете 13.4 все ок
Tim
Всем привет! У кого нибудь были такие проблемы с А/В тестированием в firebase, что эксперимент в какой то момент "зависает" и перестает пополняться новыми юзерами? У меня дня 3 все было хорошо, а потом эксперимент показывал, что приняли учатис 800 с чем то юзеров и висело на этом значении несколько дней. Есть идеи почему так может быть? Саппорт firebase говорит, что flutter is third-party plugin and we don't support it.
Павел
Разбираю урок с камерой и вот что встретил
Павел
В чем смысл главной функции быть асинхронной?
Роман Букинхайм
Работает?
ilx13
считаете так неправильно?
ilx13
у меня тоже так и async еще
Павел
Future main() async {
Павел
The async keyword simply enables the use of the await keyword (which itself is syntactic sugar for registering a Future.then callback) and (mostly) requires that the function be declared to return a Future
Павел
просто если в main сразу пользовать await то надо ставить
ilx13
да мне пришлось. так можно так использовать?
Павел
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/56129121/good-or-bad-declaring-main-method-async-in-dart-flutter"
}
]
Igor
[
"Вот единственно нормально что нашел, на навигации. \n",
{
"type": "link",
"text": "https://github.com/bizz84/nested-navigation-demo-flutter"
},
"\n\nНо кода чет пиздец для такой просто задачи.."
]
Павел
The Dart VM (or the runtime in AOT mode) looks for and executes a function named main. After main returns, the VM will wait for pending asynchronous operations to complete before exiting. The Asynchronous programming article on the official Dart website has an example that demonstrates this:
Павел
а не будет ли тут утечек?
atyourservice
В язык не стали бы включать синтаксический сахар с возможностью утечки памяти
atyourservice
Чтобы вызывать асинхронные методы
Павел
камеру точно надо в main инициализировать? Или можно в виджете ?
Павел
и вот еще вопрос. ДОпустим контроллер камеры все-таки в main и я хочу получить к нему доступ очень глубоко по дереву. Мне пихнуть его в bloc или есть какой еще более правильный способ?
Павел
То есть глобальные вещи, которые для всего приложения это тоже bloc?
atyourservice
Зачем инициализировать камеру в мэйне?
Павел
в уроке от гугла так
atyourservice
Это не ответ на вопрос
Павел
такие вопросы от новичков платформы допустимы, потому что еще непонятны тонкости работы системы. ДОпустим не проинициализирую камеру на старте работы приложения - не получу доступ дальше. Копать внутренности флаттера нет времени
Павел
вот у cookbook они даже main сделали асинхронной для этих целей
Павел
понятно там один экран, но все же
Павел
могли и в initState сделать
atyourservice
Мейн ничем не отличается от любой другой функции, хоть в жс, хоть в дарте, хоть в си. Ничем не отличается и вызов конструктора. Отличается лайфсайкл, но мне плохо представляется, как инициализация камеры может на него повлиять. В конце концов, стоит задаться вопросом, может ли язык или фреймворк быть спроектирован так, что на камеру придется выделять ресурсы на все время жизни приложения?
atyourservice
Камеру надо инициализировать там, где она понадобится (как и вообще все остальное)
atyourservice
Вопрос некорректный. Блок подходит для решения этой проблемы, но ее можно решить и с помощью get_it, к примеру
Павел
Вот эти варианты и интересуют. Что то типа глобальных переменных а не состояния
Павел
Хотя возможно это плохой код
les forest
Попробуйте provider
|