Программирование : Dart & Flutter по-русски
Mike
up сталкивался кто-нибудь?
Юрий
В Яндекс Такси его внедряют
Юрий
[
{
"type": "link",
"text": "https://youtu.be/PD6OwajKc8c"
}
]
Nikita Kuklin
да, от них видел, но хотелось бы еще примеров) от маила еще видел, но там без конкретики особо было вроде
Nikita Kuklin
спс за ссылку все равно
tdesc
что конкретно интересует?
Nikita Kuklin
да все банально просто) насколько успешно зашло? ускорило ли разработку? можно ли говорить о полной замене натива (ну в разумных рамках, понятно что в самом флаттере может быть разделение)?
tdesc
зашло, ускорило можно говорить о полноценной замене
Nikita Kuklin
понял, спасибо!
tdesc
заменяли примерно 5-6 лет аутсорс разработки на инхаус
Nikita Kuklin
а можно ссылку на ваше приложение?) в ЛС хотя бы или оно чисто корпоративное?
tdesc
ушел примерно год на разработку + пол года уже докатывали
Nikita Kuklin
ну вот у нас конечно не 5-6 лет, но багажа не мало
tdesc
[
{
"type": "link",
"text": "https://apps.apple.com/RU/app/id1446884529?mt=8"
}
]
Nikita Kuklin
интересно, а почему андроид приложение не в маркете? проблемы с офертой какие-то или что то техническое?
tdesc
проблема у гугла в голове
tdesc
они в стор свой только в 3 странах пускают
Nikita Kuklin
если с офертой, то пофиг, если технические, то хотелось бы подробностей)
Nikita Kuklin
аа, т.е. видимо из-за категории приложения страны лочатся?
Nikita Kuklin
понял, спасибо
???????????????? ???????
Всем привет, кто-нибудь читал эту книгу? Стоит ли брать?
Павел Середа
лучше возьмите какой-нить курс в ютубе или на крайний случай на юдеми
tdesc
напишу вот как нить брошюрку на коленке, заработаю свой первый миллион )
Mike
[
"жуть какая, рецепт простой:\n",
{
"type": "code",
"text": "flutter clean"
},
"\n!!!рестарт VS Code!!! (делал несколько раз, но в голову не приходило после очистки рестартнуть VSCode)\n",
{
"type": "code",
"text": "flutter pub get && flutter analyze"
},
""
]
ilx13
лайфхак: бери mybook в сети есть промокод на 14 дней. в нем бесплатно почитай
???????????????? ???????
Окей)
???????????????? ???????
Понял??думал полезная книга будет
ilx13
[
{
"type": "link",
"text": "https://dribbble.com/shots/7036184-Finance-App-Visual-Exploration"
}
]
ilx13
это sliverAppBar или другая вешь?
Yuriy Zykin
Скажите, что за 3 страны!? Из РФ не залить приложение в PlayMarket?
tdesc
для букмекеров англия и еще 2 какие то
An Sh
Всем добрый вечер! Назрел вопрос оптимизации: есть главная страница, по логике разделена на 3 части: центр, верх и низ... центр - не меняется по контенту (там GridView статичного размера), низ - там тоже два виджета... А вот верх - зависит от текущего состояния. Там может быть пара Text ов, а может и Column на 2-5 виджетов (текст, кнопки, картинки). Для этой верхней части что лучше использовать?
An Sh
Provider? ScopedModel? кто что посоветует?
tdesc
чего оптимизировать собрались?
An Sh
дернул черт делать так:
An Sh
Widget _pageHeader(){return ...} Widget _pageCenter(){return ...} Widget _pageFooter(){return ...} т.е. через функции, но там "не красиво" Provider передавать
An Sh
И еще нагородил огород типа:
An Sh
[
"ScopedModelDescendant (\n builder: (BuildContext context, Widget child, ScreensModel model){\n ModelService service = ModelService(documentId: model.documentId);\n\n return StreamProvider.value(\n value: ",
{
"type": "link",
"text": "service.stream"
},
"(),\n child: Container("
]
An Sh
т.е. StreamProvider завернул в ScopedModel.... Кажется натупил я....
Roman Vasiliev
Почему бы не Bloc?
An Sh
в общем - дайте творческого пинка плиз
An Sh
Ну пытаюсь этим BLoc и сделать
Max
Нет. String - скалярная.
Max
Const в Dart означает "насчитывается и сохраняется при компиляции". В рантайме её нельзя ни создать, ни изменить.
Max
Для себя свой написал. Хороший способ разобраться в Stream Transformers)
Max
О, вы зарелизились! Круто)
tdesc
пока еще заканчиваем бету
tdesc
андроид в релизе айос в процессе
Max
Платежи по прежнему в WebView?)
Fearless Cry
Чёто жалуются на перфоманс в отзывах
tdesc
да отзывы за всю бету
tdesc
осталось редизайн навигации подвести
Mike
жуть, в appstore до сих пор не добавили фильтрацию по версиям? а паблишер хотя б видит какая версия приложения в отзыве?
Fearless Cry
а в чем основные проблемы были в перфомансе?
tdesc
в реалтайм обновлениях по сокетам по 60к операций
tdesc
изолят стримы и редакс )
Павел
Все делают как рекомендуют создатели BLoC, добавляя один файл на каталог, как они называют его barrel, чтобы в нем экспортировать все пакеты, и соответственно импортировать только его в необходимых местах? Это конечно удобно, но теряется понимание, какие файлы он содержит при импорте. Я понимаю, что все отдается на tree shaking компилятора, но визуальный контроль интереснее при чтении чужого кода
Evgenii Elchev
меня больше бесит автокомплит, который начинает классы по несколько раз в подсказке дублировать из за этого
Evgenii Elchev
в целом тебе никто не запрещает не использовать этот barrel. Это и правда антипаттерн какой то. Какой смысл в явных импортах языка, если они все скрыты за одними и теми же импортами Screen, widgets, block
Evgenii Elchev
можно еще один последний добавить my_app, в котором прописать все импорты приложенияи вообще "хорошо" станет
Павел
просто поставил плагин, автосоздатель bloc. В нем походу из корбки
Павел
может конечно потом все равно будет, но на первых порах хочется видеть какие например модели импортнул именно в этом блоке, но и best practices хочется)
Evgenii Elchev
я не думаю что это бест практикс
Evgenii Elchev
это вкусовщина
Evgenii Elchev
блок "удобная" библиотека, делать много имортов "не удобно", вот вынесли это в барьер
Compote
Можно в иде нажать на автокомплит "add explicit 'show' combinator" и будут прописаны все заимпорченные классы
Павел
[
{
"type": "link",
"text": "https://i.imgur.com/vfnLhij.png"
}
]
Compote
да, и форматнуть автоформатом
Evgenii Elchev
если я новый импорт в абрьер добавлю прийдется по всему прилоежнию фиксить импорт?
Павел
а автоматизировать этот процесс можно?
Compote
если новый файл будешь везде использовать, то нужно будет добавить.. Но ты и так везде новый код писал бы тогда
Павел
с этой точки зрения барел удобно конечно, только в него добавить новый пакет
Evgenii Elchev
новый код да, но не импорты
Evgenii Elchev
вопрос только в чем тогда барьер удобнее чем без барьера)
Compote
так автоимпорт автоматически добавить код в show
Павел
не надо во все импорты пихать
Compote
удобнее тем, что при определенной организации кода, можно иметь 1-2 импорта
Evgenii Elchev
ну смотри, без барьера бы файл импортнулся, с барьером он тоже импортнется, только через show
Evgenii Elchev
ну может только выглядит чуть получше чем просто импорты
Игорь Кравченко
я в index.dart все пихаю)
Павел
show это не импорт наверное
Игорь Кравченко
читать потом удобнее так как импорты в начале файла меньше)\
Compote
меня напрягает просто '../../' такое все)
Павел
просто удобство видеть какие внутренности
Compote
поэтому все через индексы эти
Игорь Кравченко
вот кстати, насколько это оправдано? почему не через имя пакета?
Compote
эффектив дарт рекомендует относительные пути
Павел
тоже вопрос возник, иногда внутренние файлы идут через package: иногда путь относительный
Compote
видимо там какие-то оптимизации с импортами.. или хз
Evgenii Elchev
я где то в доке видел в эфектив дарт, видел указание использовать конкретный вариант, но не помню толи относительный путь, то ли через пакет)
Игорь Кравченко
меня интересует это быстрее при сборке или при работе?
Павел
это как в вебе) вдруг переименуешь каталог аппы
Игорь Кравченко
просто при сборке- пох, при работе - я готов мириться с этим
Compote
для мобил думаю разницы нет
Compote
а вот для веба - там вроде что-то с этим связанное есть
Evgenii Elchev
и везде только его без show импортишь?)
Evgenii Elchev
тут пора найти человека, который скажет, есть ли разница по перформансу от того как импорты делаются или нет)
Павел
оно допустим собирается в java пакет так?
Павел
а там есть разница?
Павел
конечный скомпилированый файл есть java ?
Evgenii Elchev
с чего бы?
Evgenii Elchev
а, там не знаю, но врядли
Павел
андроид работает на java машине
Игорь Кравченко
не, там явно сложнее, мы получаем нативный код для каждой платформы и dart vm в котором бежит наш основной код
Игорь Кравченко
java нужны для запуска и каких то начальных действий
Игорь Кравченко
но dart-> java точно нет
neikist
Нет. Там код в so компилится, нативный для платформы.
neikist
Ну кстати и даже это не совсем верно. ART в итоге dex тоже в натив компилит.
Павел
импорт файлов влиет на java
Andrey Gaysin
Всем привет! Возникла проблема с extension методом. При вызове метода происходит ошибка NoSuchMethodError: Class ‘FieldServerModel’ has no instance method ‘toMoor’. Хотя студия метод видит
Павел
дальше работает уже ART и прочие прокладки
Павел
поэтому на производительность влиет промежуточный код java
Павел
рассуждаем про влияние множественных импортов на производительность, есть ли такое дело?
Artyom Nesterenko
Какой промежуточный код, если его нет?
neikist
Эмм... Вообще ничего такого. Откуда такое мнение?
neikist
байткод в андроиде не jvm формата а dalvik executable
neikist
И то aot компилится в итоге
Павел
[
{
"type": "link",
"text": "http://www.javaperformancetuning.com/news/qotm031.shtml"
}
]
neikist
Под андроид флаттер приложение состоит из java (а может уже и котлин, не помню) которая компилится как и в любом андроид приложении в один dex файл (возможно и несколько, если не укладываемся в лимит по количеству в 65к) и в so файлы (дарт код) которые дергаются через JNI
Павел
[
"The import directive is a compiler directive. The Java source to bytecode compiler reads the Java source file (i.e. a ",
{
"type": "link",
"text": "something.java"
},
" file) and converts that source to one or more bytecode files (.class files)"
]
neikist
Еще раз, в андроиде не классический jvm байткод.
neikist
Там нет class файлов
neikist
Класслоадер конечно классы загружает, но количество импортов тут ни причем, каждый класс загружается один раз для приложения при первом обращении насколько помню. А уж учитывая то что дарт собирается в so и дергается через JNI - классов там в принципе минимум
Evgenii Elchev
То есть по перформансу все равно как их импортить, хоть все в одном файле?
neikist
Импортов вообще в скомпилированном коде нет, они нужны только для компиляции.
Evgenii Elchev
скорость компиляции тоже важный параметр
neikist
Ну как бы если тебе класс нужен - тебе его хочешь не хочешь придется импортировать. А если ипортируешь пакет или класс но не используешь - то компилятору на импорт в целом пофиг. Он класс компилирует, а не импорты. Это все таки не то же самое что какие нибудь инклуды в сях
neikist
К тому же тебе для каждого класса нужно импортировать все что нужно. Не получится например в одном файле описать импорты для пакета или приложения а в других опустить
neikist
Но вообще это андроид разработка уже, не тема чатика. А применительно к флаттеру - на это все вообще забить можно. Там даже dex лимит наверно практически невозможно превысить
Evgenii Elchev
ок, значит как делать импорты - вкусовщина)
neikist
Я бы сказал в принципе не существует разных способов импорты делать.
Evgenii Elchev
можешь в каждом файле ипортить только нужное, можешь все импорты в один файл положить и его везде импортить
Evgenii Elchev
может для веба есть разница
Evgenii Elchev
там же не бинарь собирается
neikist
Нет, в java так не работает
Evgenii Elchev
я про дарт
neikist
Там просто человек выше именно про часть андроида любопытствовал
Павел
мы начали с обсуждения barrel файла из bloc
neikist
Но почему то дальше начали вопросом java импортов задаваться которые отношения к дарту не имеют)
Evgenii Elchev
там другой вопрос был, компилится ли dart в java в итоге)
Павел
java потому что помню лучше сборку под андроид
Павел
ios тоже интересен по компиляции и куче импортов
neikist
А, ну тут ответ - нет, и на этом можно закрыть тему java)
Evgenii Elchev
в ios импортить только пакеты надо, ибо код внутри пакета не требует импортов вообще
Evgenii Elchev
вернее в swift
Artyom Nesterenko
А если мне нужен только один класс из всего пакета? Его можно импортировать отдельно. Хотя я читал, что все равно лучше импортировать весь пакет, типа это нормально и так принято, но не видел информации о том, влияет ли это как-то на сборку.
Evgenii Elchev
но чет не видел что бы так делал кто нибудь)
Artyom Nesterenko
Вот и я, поэтому возник вопрос. ?? Оффтоп, но, может, знаешь что-то по этой теме?
Evgenii Elchev
нет, читал когда то, но не помню уже, кажется там весь поинт частичных импортов в разрешении конфликтов имен, но не уверен
Artyom Nesterenko
Спасибо и на этом.
Evgenii Elchev
[
{
"type": "link",
"text": "https://nshipster.com/import/"
}
]
Evgenii Elchev
"In practice, isolating imported declarations and submodules doesn’t confer any real benefit beyond signaling programmer intent. Your code won’t compile any faster doing it this way. And since most submodules seem to re-import their umbrella header, this approach won’t do anything to reduce noise in autocomplete lists."
Олжас Сулеймен
дарт внутри все мержит в один файл
Олжас Сулеймен
это не точно если судить по выхлопу кернела
Artyom Nesterenko
Спасибо, что загуглил за меня. ??
Павел
Слушайте, можно новичкам как-то отразить, что в доках по bloc вообще прекрасно описана даже архитектура приложений! Я вот заканчиваю и можно сразу писать проект!
Павел
Просто молодцы, как все разложили. Репозитории, Сервис провайдеры, Модели
Davron Asrorov
про какую либу речь?) flutter_bloc или bloc
Павел
[
{
"type": "link",
"text": "https://bloclibrary.dev"
}
]
Pavel Kozlovskiy
Подскажите, тут уже не один раз говорили, чтоб Provider не исключает Bloc а дополняет его. А что насчёт ChangeNotifier, можно ли (и самое главное нужно ли?) его использовать вместе с Bloc?
Pavel Kozlovskiy
[
"И ещё, по поводу вот этой архитектуры\n",
{
"type": "link",
"text": "https://github.com/ResoCoder/flutter-tdd-clean-architecture-course"
},
"\nСмущает одит момент там где как раз bloс взаимодействует с UseCases. Предполагается что юзкейс \"колится\" и возвращает результат, а как поступать если какой-то юзкейс меняет данные сразу в нескольких репозиториях, один из которых является \"сферой интереса\" другого bloc не того из которого \"коллился\" юзкейс?"
]
tdesc
макаронокод одними «правильными подходами» не починится
Pavel Kozlovskiy
Не совсем понял что вы называете макаронокодом, архитектуру по ссылке?
tdesc
то что репозитории лезут друг в друга
Evgenii Elchev
объекты из одного слоя, могу общаться друг к кдругу напрямую - соа
Pavel Kozlovskiy
Репозитории как раз не лезут, но один запрос может менять данные в нескольких репозиториях с этим вы не согласны?
tdesc
по крайней мере я так не делаю
Pavel Kozlovskiy
Ок, давайте тогда отталкиваться от того что поднят вебсокет, который подписан на обновление данных и пушит данные в репозиторий, как тогда в рамках такой архитектуры поступить?
neikist
Не вижу ничего плохого в некоторых случаях.
tdesc
отлично данные уже в репозитории
tdesc
значит их можно оттуда взять
Renad ??.
Что здесь не так?
Evgenii Elchev
фото вместо скриншота или ссылки на гист)
tdesc
там проблема с хкодом
tdesc
попробуйте для начала в командной строке flutter build ios
Evgenii Elchev
вообще он не сказал в чем проблема, у меня такое бывает редко, помогает просто вторая попытка
Serge Shkurko
try execute flutter clean and re-run app
Павел
Firebase для небольших проектов бесплатно? Можно на нее расчитывать?
Павел
ну то есть в пределах бесплатных ограничений?
Павел
я так понимаю оно и для ios тоже работает?
|