Программирование : Dart & Flutter по-русски
???????
Большинство на императивщине работали
???????
Вот еслиб сейчас делали императивщину выб сейчас вызвали явную синхронную блокировку интерфейса
???????
И пользователь бы страдал
???????
А тут вы должны вывести стримбилдером пустой список или колесико загрузки, а уж потом, как данные будут - список с данными
Dmitriy
Думаю что пустой Container() подойдет
???????
CircularProgressIndicator
???????
Начните с него хотяб)
Dmitriy
Теперь я суть понял "initialState"-выводи колесо или пустоту)
MiT
Что лучше использовать: 1) FutureBuilder в View 2) Steram в BL
Dmitriy
зависит что на выходе у вас Future или Stream
???????
Так если у вас стримы в бизнес логике (а они должны быть), то и во вью у вас скорее всего будут StreamBuilder'ы
???????
У меня вообще не разу не удалось по назначению применить FutureBuilder
???????
Задумывался даже, кудаб приткнуть, просто нет места для них.
???????
Всюду СтримБилдеры
Dmitriy
ну можно если сработать не через БЛоК что-то из базы потянуть или сети
???????
Так у тебя тогда бизнеслогика будет в UI слое
???????
А это сразу ошибка для чегото более существенного hello world'а
Dmitriy
по факту если ее вынести в другой класс то все равно по сути это просто врапер будет)
???????
Не другой класс, вообще в другой слой
???????
[
{
"type": "link",
"text": "https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)"
}
]
???????
Вот левый квадратик у вас должен быть UI (интерфейс), правый Service (логика)
Dmitriy
Вы имеете ввиду в слой репозитория а потом через БЛоК пропустить)
???????
Ну можете и опустить блок, но хотяб Service или Repository или Controller должон быть
???????
Они уже, да, могут вернуть Future, такое возможно.
???????
Но напрямую дергать бд или еще что то удаленное - ненад
???????
Стримы предпочтительнее для интерфейса, по целому ряду причин, включая удобство.
Dmitriy
Разница есть если приходит Future то используете FutureBuilder, если Stream то StreamBuiler
MiT
Так потом же можно сделать так Stream.fromFuture(...) или нет?
???????
Над виджетами вообще не парьтесь.
???????
Сам по себе вопрос довольно странный, StreamBuilder или FutureBuilder
???????
Первый для async*, второй для async
MiT
Так нарушение архитектуры же будет когда у тебя во view присутствует логика приложения
???????
Если у тебя есть какойто стейтменеджер (например Redux или BLoC), то, как я уже сказал, тебе просто не представиться возможности использовать FutureBuilder
???????
Но есть вероятность, что ты костылишь что то более всратое и примитивное, например MVС и setState(), тогда FutureBuilder'ы будут пригождаться чаще
???????
И живет он только на стороне UI
MiT
A mixture between dependency injection (DI) and state management...
???????
Хз, чому народ его постоянно приплетает)
Dmitriy
Из-за непонимания)
???????
Просто оберточка над InheritingWidget
???????
Позволяет удобно разносить какиет данные по дереву контекста и естественно только на стороне UI
Gabben
В доке потому что его рекомендуют
???????
Ну запутали бедолаг)
MiT
Читал и пробовал, экспериментирую с другими...
Dmitriy
тогда почитайте еще раз зачем нужен BlocProvider
???????
BlocProvider, кста, отлично заменяется Provider
???????
Работают, в целом, одинаково. Разница только в том, что в Provider ты можешь запихать что угодно, а в BlocProvider только Bloc
???????
В общем Provider и Bloc/Redux не взаимоисключающие вещи, а работающие вместе
???????
Прост пакет flutter_bloc и BlocProvider появились до пакета provider. Ну и ненад путать bloc и flutter_bloc. bloc - про архитектуру и стейт менеджмент flutter_bloc - пару удобных виджетов, про ui и вполне заменяется пакетом provider
Tim
© Цитаты девелоперских монахов
Tim
Оказывается, у флаттера есть проблемы с кэшированием изображений из-за чего размер приложения в оперативке может разрастаться очень сильно. отсюда и глюки на устройстве с ОЗУ в 1 Гб
М ? Ш
Срочно нужен flutter разработчик интересный проект остольное в личке
Dmitriy
Еще раз всем привет, как поступить, если есть горизонтальный список из цифр, которому нужно блокировать направление в сторону конца списка. Показ списка может начинаться с середины. Как это можно реализовать: 1) Делать два списка один скролящийся, другой нет. 2) Как можно в динамике блокировать скроллинг и возобновлять?
???????
СкроллКонтроллер, ответ на оба вопроса
Dmitriy
пробовал когда добавляю в слушателе контролера вот такое `setState(() { _scrollPhysics = NeverScrollableScrollPhysics(); });` то после этого слушатель не срабатывает
???????
И как твоя физика связана с моим ответом?
???????
Т да, физикой тоже можно решить
Dmitriy
вроде как у скроллКонтроллера нет методов для манипуляции остановки и возобновления скролла, есть возможность определить направление скрола в ту или иную сторону
Dmitriy
Возможно нужно подключать ScrollListener
???????
А, ну да. Я эт к тому, что скролл контроллером ты можешь на определенную позицию устанавливать прокрутку
???????
Блокировать физикой, да
???????
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/ScrollPhysics-class.html"
}
]
Dmitriy
Походу нужно даже через GestureDector ставить и слушать onDrag
Tim
Ребят, это норм показатели по памяти в DevTools?
Yerassyl
у меня такая ошибка (
Yerassyl
Exception has occurred. FlutterError (setState() or markNeedsBuild() called when widget tree was locked. This AnimatedBuilder widget cannot be marked as needing to build because the framework is locked. The widget on which setState() or markNeedsBuild() was called was: AnimatedBuilder)
Yerassyl
как можно решить ) чет не получается уменя
Pavel Pimenov
[
"Нужен пример кода.\nВообще здесь описаны возможные причины\n",
{
"type": "link",
"text": "https://stackoverflow.com/q/45409565/6131611"
},
""
]
Pavel Pimenov
[
"Помогите разобраться, какую функцию выполняют ",
{
"type": "link",
"text": "squareup.com"
},
" и ",
{
"type": "link",
"text": "stripe.com"
},
" по сравнению ",
{
"type": "link",
"text": "oplata.tinkoff.ru"
},
".\nМожно ли интегрировать в приложение Тинькофф.Оплату с помощью плагинов ",
{
"type": "link",
"text": "pub.dev/packages/square_in_app_payments"
},
" или ",
{
"type": "link",
"text": "pub.dev/packages/stripe_native"
},
"?\nИли они не помогут для работы со сторонними сервисами оплаты?"
]
(;?_?) Ivan Zhuravlev ???>?
не должны. в разных системах оплаты свои заморочки
(;?_?) Ivan Zhuravlev ???>?
иначе не было бы отдельно страйп и отдельно сквер
(;?_?) Ivan Zhuravlev ???>?
зочем
(;?_?) Ivan Zhuravlev ???>?
один пакет запилили бы и радовались
(;?_?) Ivan Zhuravlev ???>?
л - логика
Pavel Pimenov
[
"Получается, остаётся 2 варианта:\n— писать свою обёртку над мобильнымы Tinkoff SDK для Android и iOS ",
{
"type": "link",
"text": "oplata.tinkoff.ru/landing/develop/mobile"
},
"\n— работать напрямую с Tinkoff API и системными API Android/Apple Pay\nя правильно понимаю?"
]
Rookie Krewkie
[
"Только что заметил ваш пост. ",
{
"type": "code",
"text": "Provider"
},
" здесь не тот, о котором Вы почему-то думаете, стоит посмотреть внимательно на написанное - речь идет о ",
{
"type": "code",
"text": "BLoC Provider"
},
" - термине, введенном Didier Boelens ",
{
"type": "text_link",
"text": "в своей статье",
"href": "https://www.didierboelens.com/2018/12/reactive-programming---streams---bloc---practical-use-cases/"
},
" год назад. Не стоило разработчикам так в лоб называть свою либу просто ",
{
"type": "code",
"text": "Provider"
},
", назвали бы ",
{
"type": "code",
"text": "DependencyProvider"
},
", не было б проблем. Провайдеров как дерьма за баней, надо было точнее определяться. \n\nТеперь про BLoC, и ",
{
"type": "code",
"text": "flutter_bloc"
},
". Почему еще мне ближе реактивная концепция евентов приготовленная на ",
{
"type": "code",
"text": "rxdart"
},
"? Да потому, что она не зависит от flutter, и является чисто ",
{
"type": "code",
"text": "dart-based"
},
". То есть, одну и ту же архитектуру можно применять и в бизнес-слое, и в репозитариях, и сервисах, и на флаттер-уровне. Нафига множить сущности?"
]
???????
Я все правильно увидел и понял
???????
Отличие между flutter_bloc и bloc знаете?)
Rookie Krewkie
[
"BLoC - концепт, Budiness Logic Components . ",
{
"type": "code",
"text": "flutter_bloc"
},
" - реализация на виджетах. можно было назвать ",
{
"type": "code",
"text": "dart_bloc"
},
" и сделать на чистом дарте. Вот Ваш вопрос полностью ",
{
"type": "bold",
"text": "\"Как у тебя вообще в голове складывается rxdart и bloc и provider?)\""
},
" . Вот про провайдер я Вам написал - ошибка в понимании терминов - провайдер про DI, я писал про BLoC провайдер."
]
???????
Нет это вы упорно не понимаете)
???????
Давайте для начала определимся с разницей между библиотеками bloc и flutter_bloc
Rookie Krewkie
Расскажите уже - не томите.
???????
Объясняю, flutter_bloc содержит в себе всего пару виджетов, идентичных Provider (точно такаяже обертка над Inheriting Widget), единственное отличие - в контекст оно может помещать только класс Bloc
???????
А все остальное идет из пакета bloc
???????
Точно также и в angular_bloc, там всего 1 Pipe сервис
Rookie Krewkie
Закончите, напишите стоп-слово "прием"
???????
Все что есть во flutter_bloc живет сугубо на стороне интерфейса и идентично Provider
???????
Лучше вы напишите, понимаете пока?
???????
Отлично. В общем на этом этапе вы уже должны были понять, что flutter_bloc вы берете сугубо из за виджетов дающих доступ к DI идентичному Provider (точнее это Provider идентичен BlocProvider, если рассматривать хронологически)
???????
rxdart не является "архитектурой", точно также, как ей не является provider
???????
Это просто оберточка над dart:async с терминами ReactiveX и тремя видами StreamController'ов
Rookie Krewkie
закончили?
???????
Чем плоха вермешель что вы "изобретаете"? Плоха она, прежде всего, тем, что это вермешель и на больших проектах она даст о себе знать.
Rookie Krewkie
Это понятно. Вы закончили меня просвещать?
???????
Вас не "просветить", вы будете копротивляться до последнего.
Rookie Krewkie
копротивляться ))) КОПРО )) спасибо
???????
Через это уже 100 раз проходили
???????
[
"Сделайте РЕАЛЬНО большой проект и представьте свою \"архитектуру\" на\n",
{
"type": "link",
"text": "https://t.me/rudart/114862"
},
""
]
Trump
Не сдавайтесь. Я здесь не получил на свои вопросы ни одного ответа.
???????
Пока что это очередной hello world дилдо на ардуино
???????
Но перед этим советую почитать о принципах чистой архитектуры
???????
Про связаность и зацепление
???????
Хотя бы это, для начала.
???????
[
"А лучше сразу\n",
{
"type": "link",
"text": "https://ru.wikipedia.org/wiki/GRASP"
},
""
]
Dmytro Bondarchuk
Возможно проблема была в постановке вопросов?
Trump
Не исключаю такого.
???????
Ну тут, всеже, не бесплатная справочная) Никто не гарантирует, что за вас что то решат, к томуже если вопрос отвлеченный или подразумевающий вникание в проблему.
???????
Ну и вообще мало кто правильно задает вопрос.
???????
Вопрос был по дарту (код) или флатеру (интерфейс/мобильники)?
Rookie Krewkie
[
"Для начала - ",
{
"type": "code",
"text": "rxdart"
},
" я никогда не называл архитектурой, надеюсь.. Ибо это именно либа, построенная над ReactiveX+стримы, да.\nДалее. Попробуйте поставить ",
{
"type": "code",
"text": "flutter_bloc"
},
" в чистом дарт-проекте. Без флаттера. Знаете что увидите? Надеюсь знаете, поэтому неважно, два там класса или один завязанный на флаттер, получите \n",
{
"type": "code",
"text": "Because every version of flutter_bloc depends on flutter any from sdk which is forbidden, flutter_bloc is forbidden."
},
"\n\nЯ работаю один, мои проекты не большие, тысяч десять-двадцать строк, но речь не об этом.\n\nВы за чистую архитектуру а готовы тащить ",
{
"type": "code",
"text": "flutter_bloc"
},
" везде, даже где флаттера нет, из-за его хайповости, а я предлагаю тащить ",
{
"type": "code",
"text": "rxdart"
},
", так как он решает во точности все проблемы ",
{
"type": "code",
"text": "flutter_bloc"
},
", только сюрприз-сюрприз! Без привязки к флаттеру. И после этого Вы говорите мне про чистую архитектуру, и у кого вермишель?\n\nВы много читаете, но посмотрите, что Вы предлагаете - совсем не то, что декларируете.\n\nТеперь про термины. При всем уважении к команде ",
{
"type": "code",
"text": "dart/flutter"
},
" они грязно играют с названиями пакетов. Вот есть ",
{
"type": "text_link",
"text": "BLoC pattern",
"href": "https://www.didierboelens.com/2018/08/reactive-programming---streams---bloc/"
},
", на который они сами ссылаются из своей либы ",
{
"type": "text_link",
"text": "Bloc",
"href": "https://pub.dev/packages/bloc"
},
" - посмотрите на страницу внимательно - и зачем называть либу-реализацию ",
{
"type": "code",
"text": "Bloc"
},
", имея паттерн ",
{
"type": "code",
"text": "BLoC"
},
"? Путаница! Из-за нее ломаются копья.\n\nТо же самое и с ",
{
"type": "code",
"text": "Provider"
},
"- провайдерят они свою DI, так бы и называли ",
{
"type": "code",
"text": "di_provider"
},
". Ну почитайте же наконец сами. У меня чувство, что Вы сами не вчитываетесь в то, что декларируете - видимо на митапах впитываете доклады друг-друга и потом транслируете в народ. Нет?"
]
Trump
По установке VS code and dart and flutter. Если подробная установка этого всего. Я понимаю, что в доке это есть. Я но хотел послушать на русском. Может это мне бы помогло решить такую проблему. У меня на ноутбуке стоит амд проц и он по документации поддерживает эмуляцию, но по факту я не могу ее запустить. Хотя я понимаю, что это проблема здесь не решается. Но на первый вопрос вообще не было никакого ответа. А слушать индусов на ютубе, ну это так себе. Они все равно доку повторяют
???????
Будут большие проекты - приходите. Халлоу волд можно набрать положа клавиатуру на стул и попрыгав на ней жепой.
???????
0) Вам рано еще во флатер, начните с дарта 1) если проблемы с настройкой окружения - начните с android studio, в нем новичку проще 2) дока-дока-дока-дока-дока 3) RTFM 4) RTFM 5) RTFM
Rookie Krewkie
[
"ну 20-30К - это не Хелоу Ворлд. А если вы в больших проектах у нормальных кодеров просто пот со лба вытираете, это значит, что вы участвуете в больших проектах? Пипец, вы ",
{
"type": "strikethrough",
"text": "понторез..."
},
" виноват, сорвался."
]
???????
Как я и сказал, вы будете защищать свою безсмысленную позицию до конца. И как я говорю всем в подобном случае: вы не мой подчиненный и мой кошелек от ваших действий не зависит - делайте что хотите.
???????
[
"Пункту 0 уделите особое внимание, это не просто так:\n",
{
"type": "link",
"text": "https://t.me/rudart/121185"
},
""
]
Tim
Crashlytics репортит краши флаттер приложения?
???????
[
{
"type": "mention",
"text": "@nowandever"
},
" не парься"
]
Sergey Salnikov
[
{
"type": "mention",
"text": "@rookie_krewkie"
},
" статейку так и не поправили\n\nДо сих пор я могу вкинуть любое значение через торчащий публичный BehaviorSubject минуя метод increment(), зачем метод тогда нужен?\n\nВаш велосипед с квадратными колёсами."
]
Sergey Salnikov
Пожалуй ты прав)
Aleksey
[
{
"type": "mention",
"text": "@bunopus"
},
" spam"
]
Temurxon
как изменить стиль текста внутри string не использую style Text
Viktor S
Добавил кастомный font и что то все жирное стало
Вадим
Можно выбрать жирность шрифта
Viktor S
я использую стили TextTheme
Viktor S
сейчас как будто у всех стиль bold
Viktor S
использую, шрифт все равно жирный, даже если явно указать fontWeight
Dmytro Bondarchuk
Доброй ночи всем) Мне интересно какая у кого структура папок UI Если не сложно, поделитесь, пожалуйста)
Дмитрий
Мне интересно, есть кто хочет проект взять под разработку?)
Dmytro Bondarchuk
Детальнее опишите) больше откликов будет
Дмитрий
Пока на перспективу, ещё прорабатываю проект, проектирую )
Дмитрий
Думаю через 1-2 месяца начну )
Dmytro Bondarchuk
Хотя бы минимальную суть опишите)
Дмитрий
Идея - забытая 10 лет назад, которая в то время качала очень сильно. И умерла в силу технологий. Сейчас можно возродить под другим соусом )
Дмитрий
У кого есть энтузиазм заколлабиться, и реализовать крутой кейс, то пишите )
Sergiy Vergun
Доброй ночи всем) Мне интересно какая у кого структура папок UI Если не сложно, поделитесь, пожалуйста)
Dmytro Bondarchuk
Спасибо)
Sergiy Vergun
Хорошое замечание, пожалуй вынесу в lib
Nick Galko
Интересно, но скорее полноценная разработка интересует
Kherel
привет. а ios ad hoc distribution по прежнему работает, или надо на enterprise переходить?
Kherel
как дистрибьютить приложение для небольшого количество людей, но продакшн версию, не ограниченную по времени?
Almas
до 100 человек можно делать без проблем
Kherel
это ad hoc, или enterprise?
Kherel
а он по времени жизни не ограничен?
Almas
до конца твоей подписки
Kherel
а при публикации в terms and conditions что написать? если для внутри корпортивного использования?
admin
Есть такое в vscode? Чтобы выравнивать ?
Artyom Nesterenko
Да, что-то есть. По умолчанию Ctrl + .
Вадим
Правая кнопка мыши по виджету -> refactor
Вадим
Клавиатурное сокращение не помню
Tim
[
"Ребят, снова попрошу thumbs up накинуть на issue, кому не лень ??\n",
{
"type": "link",
"text": "https://github.com/flutter/flutter/issues/44510"
},
""
]
Anton Anokhin
[
"Всем привет! Осталось меньше 10% билетов на конференцию DartUP. Поторопитесь зарегистрироваться: ",
{
"type": "link",
"text": "https://dartup.ru/"
},
""
]
Sergey
спс что с нотифаем??
Alderamin
А видеозаписи с конференции будут?
Alexey Kominch
Или прямая трансляция конференции будет?
Вадим
Может, кто-то из Минска поедет на конфу эту?
Vyacheslav
парни привет! Плохая практика add(event) в билдере? Пока не сообразил, как по другому инициировать ивент
???????
Отвратительная, более того, это даже не "практика", тут у тебя это точно нормально работать не будет
???????
В initState хотяб
Vyacheslav
работает, но вот в initState не получается
Vyacheslav
так не работает
???????
Вот глупости делаешь ты, а стыдно нам)
Vyacheslav
просто пока не пойму блок паттерн: у меня при загрузке приложения стейт Empty, мне надо где-то инициализировать ивент, чтобы загрузить список из базы данных. Я делаю ивент в initState, не работает
???????
Сначало выполняется initState
???????
Вот и думай, куда суешь провайдером, а когда достаешь
???????
[
{
"type": "link",
"text": "https://t.me/rudart/121264"
},
"\nПо тебе не скажешь, что очевидно)"
]
???????
Вообще не догоняю, зачем тебе тут провайдер
Vyacheslav
если не трудно, укажи пожалуйста на ошибку
???????
Ты выше по коду еще блок провайдером в контекст этот блок суешь?
???????
И зачем вообще тут провайдер на этом скриншоте?
Vyacheslav
???>? чтоб заработало :)
Vyacheslav
я не обижусь можешь назвать тупым))
Vyacheslav
понятно, что не то пишу, по документации не могу понять, переписываю примеры
|