Программирование : Dart & Flutter по-русски
First Last
Я не понимаю зачем тебе это
First Last
Загугли как делают file upload с апи и без сторонних сервисов (cloudinary например), и глянь в статье как они потом отдают это на фронт
Alexander Kleymenov
мы видимо о разных вещах говорим))
Alexander Kleymenov
мне нужен сервер с которого будет грузится клиентское приложение и в нем же будет апи
Alexander Kleymenov
сложность не в апи
Alexander Kleymenov
а в статических фалайх
Ivan Frolkin
[
{
"type": "link",
"text": "https://github.com/bunopus/sw-movies"
}
]
Ivan Frolkin
И в вебшторме мультипроджект настроить
Ivan Frolkin
Но статику лучше таки нжинксом
Alexander Kleymenov
а где настраивается?
Alexander Kleymenov
да, так и решил делать)
Ivan Frolkin
Ну например в докерфайле)
Andrey Pomazkin
а я правильно понимаю, что retrofit2 еще не допилили для работы с dart?
Andrey Pomazkin
как то парсить json вручную вообще не хочется(
Ivan Frolkin
Тут много вариантов, JsonSerializable один из них
Олжас Сулеймен
а в чем проблема писать фронт и бек в одной папке?
Олжас Сулеймен
при билде можно указать вывод куда
Савостьянов Андрей
Всем бобра! Впал в думку над таким кодом в примере. Подскажите что это: import 'ClassA.dart'; export 'ClassA.dart';
Олжас Сулеймен
импортишь класс в данный файл и если этот файл где то импортится то он подтягивает класс А
j k
это реально дичь у флатере, как бы и есть какие-то недогенераторы, но они тоже что-то не хотят вложенные структуры разбирать
Олжас Сулеймен
ну не сказал бы что генераторы это плохо
Савостьянов Андрей
С импортом понятно, экспорт как работает?
Олжас Сулеймен
ну вот те нужен класс б и ты его импортишь, онзависит от а но при импорте б класс а не импортится и чт бы явно его импортировать вместе с а делаешь экспорт б а
Олжас Сулеймен
я плох в обяснениях
Олжас Сулеймен
это как include
Савостьянов Андрей
Сорри бро, но понятнее не стало.
Олжас Сулеймен
а чем именно она тебя смущает
Dmitry Lvov
о, а можно кусок кода продемонстрировать? Это на флаттере возможно к канвасу обращаться?!
Олжас Сулеймен
вот пишешь ты пакет и в папке lib у тебя основной файл и папка src с частями пакета и что бы не импортить их по отдельности ссылаешся на них в основном файле через export
Олжас Сулеймен
и где надо import 'package:пакет/пакет.dart'
Олжас Сулеймен
и он уже включет все остальные файлы
Олжас Сулеймен
есть еще вариант library пакет; part 'путь к части'; в основном и part of пакет; в частях
Савостьянов Андрей
Т.е. типа фасад получается: в классе API собираем импорты+экспорты на все классы, которые понадобятся при использовании этого АРI и потом в потребителе используем их через единственный импорт класса API?
Савостьянов Андрей
Вкурил топик! Два спасибля тебе добрый человек и килограмм барбарисок!
Олжас Сулеймен
[
"сп, ",
{
"type": "link",
"text": "https://www.dartlang.org/guides/libraries/create-library-packages"
},
""
]
Andrew Drondon
Кто собирает Flutter в CircleCI? Или в любой другой CI-ке. Какой docker image используете?
Fearless Cry
Всем привет! Подскажите, пожалуйста, как можно в флаттере вырезать часть изображения из image виджета?
Roman
использует кто-нибудь BLoC?
Roman
По примерам создается впечатление, что этот подход более тродоемок, по сравнению с каким-нибудь mvc_pattern Можете посоветовать какую-нибудь статью про BLoC, где расписывается, какие плюсы имеет этот подход? Или примеры кода эталонные на ваш взгляд
DVS (Read The F.ng Manual) Studio (NoHello)
[
{
"type": "link",
"text": "https://pub.dartlang.org/packages/flutter_bloc"
}
]
DVS (Read The F.ng Manual) Studio (NoHello)
[
"и ",
{
"type": "link",
"text": "https://pub.dartlang.org/packages/bloc"
},
""
]
hakon
Пробовал внедрить и плюнул. ScopedModel проще, понятнее, чего и вам рекомендую
DVS (Read The F.ng Manual) Studio (NoHello)
в последнем график есть удобный
Andrey Pomazkin
это же чья то левая библиотека?
hakon
А что это меняет?Работает стабильно.По сути это обертка над InheritedWidget как я понял
Andrey Pomazkin
не люблю почему-то такие библиотеки. от автора сильно зависимость.
northelks
[
"лучше начинать вот отсюда ",
{
"type": "link",
"text": "https://www.dartlang.org/tutorials/language/streams"
},
""
]
Анатолий
Вообще не используешь никакие библиотеки не от флаттер тим?
Анатолий
Библиотека кстати крутая
northelks
flutter девелоперы в архитектурном плане пошли по пути реакта, в некотором смысле и аспекте с виджетами, отсюда и bloc паттерн, где чувствуется JS влияние
Анатолий
в реакте же есть маст хев
Анатолий
великий и нерушимый
Andrey Pomazkin
использую конечно. когда времени мало или в проекте либа уже есть, или писать свой код сильно дольше. просто пока хочу попробовать официальный от гугла паттерн. а там, либо библиотека загнется, либо покорит мир
Анатолий
Ну то уже по желанию, но библиотека очень простая и очень удобная. И кода для нее писать практически не надо
Кирилл Матросов
[
"по хранению состояния предлагаю ознакомиться со статьей\n",
{
"type": "link",
"text": "https://medium.com/flutter-community/let-me-help-you-to-understand-and-choose-a-state-management-solution-for-your-app-9ffeac834ee3"
},
""
]
Andrey Pomazkin
был перевод на хабре вроде
northelks
я имел ввиду, что bloc как принцип "реактивного программирования", корый так популярен в JS.. а с реактом я сравнивал с Stateless и Statefull
Анатолий
Если читать такие статьи, то кода по менеджменту стейта получается больше чем бизнесс логики
Анатолий
Это не всегда удобно
northelks
редакс слишком переизбыточен
Анатолий
"Redux and BLoC, the perfect combo for me" Автор статьи с тобой не согласен
Анатолий
Для него идеально - два самых затратных по коду стейт менеджера одновременно
northelks
ну у каждого есть своё мнение и своё решение
northelks
куда как удобнее, я по практике с редаксом из мира JS могу сказать, что почти все большие проекты на нём рано или поздно скатываются в болото
Анатолий
Тут же все должно исходить из приложения, если оно не требует мощных управлений стейтом, то я однозначно за ScopedModel. Если же приложение модульное и в планах только расширение, то да, надо смотреть на что-то мощней
Roman
а какая альтернатива для больших проектов тогда?
northelks
(особенно, когда это аутсорс проект, где забивают на архитектуру и её поддержику)
northelks
серебрянной пули нету, каждый пишет для себя своё пул и свои костыли, на базе ошибок и просчётов
Анатолий
Просто иногда людям кажется что у них супер пупер крутое приложение которому обязательно нужен крутой стейт менеджер, а по факту там хело ворлд
Кирилл Матросов
а на чем не скатываются?) Это вопрос организации и дисциплины и неважно, что внутри redux/mobx/unstated
Игорь Кравченко
Я пока BLoC выбрал как типа стандарт от гугла
Кирилл Матросов
всегда можно хранить все на сервере
northelks
просто с редаксом тоже нужно повозиться, и правильно его настраивать и использовать.. если будет >50 экшенов, >30 компонентов, туда сюда диспатчеры, сторы.. где-то забыли про имутабильность, где-то неправильно её используют, где-то тупо по ссылке меняют что-то, где-то колбэки костыляют, потому что архитектурно диспатчить экшен это перфоманс беда
northelks
согласен, поэтому я упомянул именно аутсорс проекты где для бизнеса нету понятия тестов и "нужно вот тут оптимизировать и тут переписать, потому что ваш запрос меняет нашу архитектуру"
Andrey Pomazkin
подскажите, flutter пока умеет только sqllite? есть поддержка других хранилищ?
Roman
в общем, переформулирую вопрос =) Был ли у кого такой опыт - менеджил стейт простым способом (local state, scoped model, mobx, mvc_pattern), поимел проблем из-за этого -> перешел на BLoC и все стало хорошо? =)
Ilia Bosenok
Нет фронтенда на Dart. Не ищи решения всех задач в одном иструменте
Кирилл Матросов
а как же kotlin?) и dart был некоторое время назад в хром сейчас его зафорсят и вернут
Andrey Pomazkin
вроде в этом году обещают web
Ilia Bosenok
Иди бизнесу расскажи это сейчас. Нафиг в вебе оно никому не уперлось сейчас. Потом может быть когда нибудь. А может и нет. Dart в хром не вернут - это тупизм. есть WASM - хотите компилируйте в wasm
tdesc
чистый редакс не зашел, сделали где нужно доступ через Bloc
Анатолий
Какие хранилища тебя интересуют?
Andrey Pomazkin
каким-то образом flutter испльзует iOS coredata?
DVS (Read The F.ng Manual) Studio (NoHello)
в принципе что угодно можно подцепить, если в натив обращаться
DVS (Read The F.ng Manual) Studio (NoHello)
из готовых плагинов только shared_preferences и sqflite
DVS (Read The F.ng Manual) Studio (NoHello)
будет годно если из mongo mobile сделает кто-нибудь плагин
Andrey Pomazkin
пока про realm room можно забыть?
Анатолий
Пока про все можно забыть чего нет и на иос и на андроиде в +- одном интерфейсе
Andrey Pomazkin
ясно, тогда sqllite и остается
Макс Зубко
Подскажите, у меня drop down button на всю ширину экрана, как мне можно уменьшить его ширину ?
Макс Зубко
Запихивал в контейнер, не получается
Анатолий
Если пишете тока под иос и очень хочется, есть каналы, можно прокинуть нативные штуки во флаттер
Andrey Pomazkin
нет, пишу и на iOS, но не очень хочется) просто интересно как обстоят с этим дела во flutter
Анатолий
В первую очередь делают и будут делать универсальный код под обе платформы, что-то уникальное скорее всего только от сторонних разработчиков будет появляться
Анатолий
Что по сути логично )
Andrey Pomazkin
ну это да
Mike Lubinets
К разговору об архитектурах: BLoC не пробовал, остановился на MVU. Сейчас задумываюсь правильный ли это выбор. BLoC дает какие-то преимущества существенные, или нет смысла заморачиваться и думать о том чтобы переписывать на него? Решают они по сути одну задачу
Анатолий
А тебя все устраивает?
Mike Lubinets
Не очень, бойлерплейта много
Савостьянов Андрей
Скорее Ангуляра... только до адекватного module providing/injectable ещё не доросли. А так - обычная реактивщина, так и под ванильный Android можно писать взяв Даггер и ObjectBox как провайдер стримов.
Анатолий
Чет мне кажется бойлерплейта будет везде много
hakon
google даже свою fuchsia делает на scopedmodel, и если учитывать, что врядли есть что-то более глобальное на flutter, то не думаю, что стоит заморачиваться с реактивными штуками
Mike Lubinets
Ну и MVU это набор костылей вокруг dartea, а BLoC вроде как фреймворк в сборе с поддержкой
northelks
они сами писали, говорили про реакт)
tdesc
Неважно кто исполняет роль Business Logic компонента Блок просто название и стримы
Анатолий
там ведь помимо стримов еще компоненты с данными
Савостьянов Андрей
[
"Не, редакс под Флаттер есть отдельно. Тоже, кстати хвалят. ",
{
"type": "link",
"text": "https://pub.dartlang.org/packages/flutter_redux"
},
""
]
Анатолий
Нельзя сказать что блок это тока стримы
tdesc
Блок без стримов это scoped модел
Andrey Pomazkin
вы используете чисто стримы, или rxDart юзаете?
Roman
[
"попробуй ",
{
"type": "link",
"text": "https://pub.dartlang.org/packages/mvc_pattern"
},
""
]
Roman
минимум шаблонного кода
tdesc
Rx обертка вокруг нативных стримов
Савостьянов Андрей
Ну да BLoC это: 1. Неограниченное кол-во изолированных моделей стейтов 2. С изолированными событийными шинами 3. И выводом через стрим. Больше никаких особенностей у него не видно (IMHO)
Анатолий
Получается 1 класс модели + стрим?
Савостьянов Андрей
Rx нужен для формирования проекций данных. Можно и без него, но: 1. Это мы так и данные будем в Map юзать как js-ники 2. А как джависту без Rx, на чем мозг в дебаге разминать если не на 500-строчных трейсах из него :)
Савостьянов Андрей
Ну ещё желательно провайдер фасадом выставить. И да, здесь ключевое отличие в Redux и Flux что в них единый стор/модель для всего апп, для меня (Spring, Angular) это громоздко, негибко = неканонично!
tdesc
для мобилы то что надо
Савостьянов Андрей
Сарказм? А если в одном скрине не одну, а 2-3 http ручки дергать нужно? Провайдер становится здравым решением (IMHO)
tdesc
если данные не сохраняются централизовано, это будет помойка рано или поздно
tdesc
количество ручек http на нижних уровнях вообще не играет значения
tdesc
для комфортной работы на flutter этой схемы требует расширения на Bloc перед уровнем Presentation
Савостьянов Андрей
Таким образом ваша позиция из предиката "хрень" трансформируется в религиозное неприятие подключения к разным виджетам одного экрана разных (независимых) провайдеров данных вне зависимости от итоговой "толщины" единого стора. Хм Андроид не вы написали? Там тоже классы по 5к строк... В мою голову такие штуки целиком не помещаются :)
tdesc
много чего писал. архитектура помогает разделять слои и не иметь файлов по 5к строк
tdesc
при чем тут подключение “подключения к разным виджетам одного экрана разных и независимых ” я не понял
Helen Vera
Привет! не подскажете, как сделать управление языками на сайте с использованием ангулардарта, какую-нибудь библиотеку или ссылку, просто не понимаю отчего отталкиваться? Спасибо
Савостьянов Андрей
Единый Стор в разных слоях? Сарказм off. Реально интересно посмотреть. P.S. Ни разу Redux не юзал.
tdesc
стор это single source of truth
tdesc
кто его использует, в каких слоях и в каких целях никак не регламентировано
tdesc
есть коннекторы к стейтам, есть подписка на actions и изменения
tdesc
далее только от вас зависит как использовать
Савостьянов Андрей
Мое видение архитектуры (как Ангулярщика и, скоро, Флаттерщика) такое - Реквизит:
tdesc
это уровень представления
tdesc
эти позиции могут быть отражены в данных совершенно по разному. главное чтобы доступ к ним был удобный
Савостьянов Андрей
Вот главная Яндекса. На ней два десятка независимых! сервисов данных, каждый из которых, имеет несколько http ручек, интерцепторов, гвардов путей, и, конечно, локальных хранилищ (если нужно). Верстальщик один, сервисы данных этого фронта напишут даже не команды разные - разные организации.
Савостьянов Андрей
Никакого Главного Правдивого Стора мне не видно.
Савостьянов Андрей
Реквизит
jenia
Какие самые лучшие уроки flutter по русски?
Анатолий
Если бы были самые лучшие, ты бы их нашел первым же запросом в гугле
Max??
To introduce a MaterialLocalizations, either use a MaterialApp at the root of your application to I/flutter (18756): include them automatically, or add a Localization widget with a MaterialLocalizations delegate.
Анатолий
Увы, но самых лучших нет по русски
Max??
при попытке вызова showDialog
Анатолий
"use a MaterialApp at the root of your application"
Max??
localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate ],supportedLocales: [Locale("en"), Locale("es"), Locale("pt")],
jenia
Ну тогда лучшне что есть :)
Анатолий
Лучше на англ прошерсти уроки с сайта флаттер, там не сложный англ, много примеров
jenia
Понял. На сколько быстрее сделать на flutter проект чем на Android natrive ? Дизайн material не сложный
Савостьянов Андрей
[
"Прошел этот: ",
{
"type": "link",
"text": "https://www.udemy.com/learn-flutter-dart-to-build-ios-android-apps/"
},
""
]
Савостьянов Андрей
[
"Прошел этот: ",
{
"type": "link",
"text": "https://www.udemy.com/learn-flutter-dart-to-build-ios-android-apps/"
},
" Из плюсов - хорошие субтитры, регулировка скорости, подробный. Минусы - быстрый нативный английский, архитектура апп на scoped_model (так себе но для начала - сойдет), есть косяки с версией Dart (старые mixin, например). Сложность в итоге - 7 из 10."
]
Анатолий
Я не работал с андроид натив, но мне кажется скорость сильно не будет различаться, а если ты натив знаешь то на флаттере медленней будет :)
jenia
Натив Java знаю средне
Анатолий
Флаттер проще думаю, но его выбирают не из-за супер быстрой скорости, а из-за того что один код пишется под две платформы сразу
Анатолий
Если тебе надо просто быстрей клепать приложения для андроида, то думаю натив тебе будет быстрей
jenia
Это да :) мне бы просто знать есть ли все что нужно там и нормально работает. Socket, потоки, как легко сделать верстку
Анатолий
Особенно учитывая что в андроиде есть превью скринов
jenia
Мне нужно и iOs что бы был :)
Анатолий
тогда у тебя выбора не много
jenia
По цене разработчика разница большая с Android разработчиком?
Кирилл Матросов
рынок пока не сформирован. Скорее всего андроид разраб будет получать больше за всю ту боль, что несет разработка с поддержкой версий от 4.4+
Daniil S
ты спрашиваешь про уроки по флаттеру не зная английского , но уже думаешь сколько будешь зарабатывать?
Daniil S
не дели шкуру не убитого медведя
jenia
Нет я просто думаю закать или самому научится
Daniil S
ну если время дорого заказывай конечно
Mike Lubinets
Я только в этом месяце начал вообще тыкаться в мобайл: флаттер значительно проще и интуитивнее. Изучение идет параллельно с разработкой и видимым эффектом, а не выучи 4к страниц доки и потом у тебя что-то получится)
Daniil S
хм, человек не прошедший круги ада в нативной разработке
Daniil S
речь ведь не идет о заучивании доки
Анатолий
Интуитивней чем андроид?
Daniil S
ознакомиться и попробовать надо
Mike Lubinets
Я утрирую, но в андроиде minimal knowledge требуемый для разработки намного больше.
Анатолий
Интуитивность понятие субьективное. У меня все знакомые которые вообще не мобильщики писали под андроид на джаве, и норм, 4к доки не читали, учили по ходу нужд
Анатолий
Тем более что с человеком выше я общался, он уже знает андроид
Mike Lubinets
У меня бэкграунд бэкенд и системная разработка
Daniil S
я подозреваю, что ты столкнешься с проблемами платформы той и другой
Анатолий
Сложно всегда понять азы и принцип окружения, дальше все как по маслу обычно идет
Анатолий
азы во флаттере проще, это да
Анатолий
Но дальше одинаково
Daniil S
по крайней мере я с ними сталкиваюсь на android и быстро решаю, с ios сложнее
Mike Lubinets
Дальше можно двигаться уже с видимым эффектом :)
Mike Lubinets
Хз, посмотрим, пока не сталкивался. Это хобби, энивей.
Nikita Teplov
не понимаю зачем лезть в flutter без понимания нативной разработки на платформах
Анатолий
Экономия времени и ресурсов
Анатолий
Очень много задач для которых не нужно знать натива
Анатолий
Куча простеньких приложений можно написать
Mike Lubinets
Приложение простое и с нативными API не работает от слова совсем.
Pavel Shilyagov
если побаловаться то норм. Для работы всеравно без натива никак. Начинать надо с любой нативной платформы, а потом уже можно трогать флаттер.
Nikita Teplov
такого же мнения, ибо при серъезной разработке рано или поздно придется изучить натив
Alexander Gusakov
а я вот с фронтенда и с нативом не знаком
|