Программирование : Dart & Flutter по-русски
First Last
[
{
"type": "link",
"text": "https://github.com/roughike/inKino"
}
]
First Last
Я имел в виду не android & ios
Artem Kasapchuk
не особо вижу в смысле шаринга между веб и мобилкой
Artem Kasapchuk
как правило мобильная апка представляет из себя одно, а веб другое
Artem Kasapchuk
ну наверно чисто ui элементы, но опять же, не все ui элементы веба подойдут мобилки и наоборот
Artem Kasapchuk
если только на ведущего дизайнера не нарыть компромат, и терриризировать его для единого стиля)
First Last
Речь не про шаринг UI ведь
Artem Kasapchuk
ну там по ссылки была репа с кодом с шарингом
Artem Kasapchuk
значит не особо понял)
Serge P
Спасибо, хороший пример
Анатолий
модели, сервисы, обработка юи, много бизнесс логики одинаковой, ее можно пошарить. тут мелькала цифра вроде 40%
Олжас Сулеймен
вообще это можно через билдер сделать
Олжас Сулеймен
кодогенераторы
Олжас Сулеймен
только как их потом импортить
Олжас Сулеймен
файл dsx и рядом же лежит дарт файл скомпилированный, а там где нужен виджет пишите примерно import "widget.dsx.dart";
Олжас Сулеймен
или как ангуляр, не сорить, билдить в кеш
Олжас Сулеймен
запускаете build runner watch в консоли, F5 и все
Олжас Сулеймен
[
{
"type": "link",
"text": "https://github.com/angel-dart/jael"
},
" dsx"
]
Олжас Сулеймен
ну он и топит за dsx, ну сделал страничку с компилятором запили генератор, подключи к проекту и радуися жизни
Ilia Kurtov
[
"Здесь вот хороший репозиторий с большим количеством примеров: ",
{
"type": "link",
"text": "https://github.com/Solido/awesome-flutter"
},
""
]
ихорь
[
"И вот примеров немного ",
{
"type": "link",
"text": "https://medium.com/aviabird/top-10-open-source-flutter-apps-997afff4f1b8"
},
""
]
Александр Васильев
[
"Админ, может можно это как-то закрепить для новичков?\n\nЯ не фулл-тайм программист, пишу редко на python утилиты, когда нужно автоматизировать какую-то работу. Знания уровня - переменные, типы, циклы, условия, рекурсия, работа с чужими библиотеками.\n\nМесяц назад решил начать Flutter с изучения Dart - прочел \"Дарт в действии\", но ничего нового не узнал, а ООП не понял из книжки этой. Читал статьи, но в основном примеры как что-то сделать. Не помогло.\n\nРешил, что пойду путем изучения всего ядра Dart, потом Flutter.\nИ наткнулся на видео voidrealms - очень хорошо зашло - все понятно объясняет Brain. Бесплатно.\n\nАнглийского не знаю, поэтому включил субтитры с переводом и скорость 0.75. Всё понятно. Рекомендую новичкам без опыта ООП программирования!\n\n",
{
"type": "link",
"text": "https://www.youtube.com/playlist?list=PLUbFnGajtZlX9ubiLzYz_cw92esraiIBi"
},
""
]
Vyacheslav
Да уж и не говори
Vyacheslav
А на мак в идее как это сделать?
admin
[
{
"type": "link",
"text": "https://youtu.be/eeXdA6gow3s"
}
]
admin
спасибо ещё интересна тема с Flare мне
Александр Васильев
[
"2D только не для интерфейса..\nПолезно перед проектированием мобильного интерфейса поизучать Material гайд - ",
{
"type": "link",
"text": "material.io"
},
"\n- там много примереров как должен работать тот или иной компоненты и как не должен.\nИначе пользователя может ждать \"сюрприз\"..."
]
Александр Васильев
[
"Version note: The const keyword became optional within a constant context in Dart 2. \n",
{
"type": "link",
"text": "https://www.dartlang.org/guides/language/language-tour#classes"
}
]
Александр Васильев
А что за "постоянный контекст"? Может кто в двух словах сказать? Область видимости, где всё const?
Pavel Shilyagov
Когда все можно вычислить на этапе компиляции
Igor Filippov
На ютубе есть еще канал Tensor Programming там куча туториалов
Оганнес Асатрян
По флатеру?
Оганнес Асатрян
Супер. Спасибо
tdesc
стайл гайды соблюдать это антипаттерн, надо юзер экспириент целиком продумывать и изучать, а не сваливать все на материал/купертино и “пользователь так привык"
Александр Васильев
бунт на корабле?
Дмитрий Скрыльников
Я бы бил таких программистов.
Александр Васильев
а может "лень обыкновенная"?=) Ну незнаю - в гайдах много полезного. Недавно нужно было воткнуть в bar и выбор категорий и сортировку и поиск. Решил делать все в одном, а потом подумал "а как там в гайде это делается" - и в итоге реализация оказалась гораздо проще.
Александр Васильев
Но может для некоторых главное "удивить" - и пользователя необычным интерфейсом и коллег разработчиков замысловатой реализацией.
tdesc
разрабатывая сервис, нужно думать как и что пользователю будет комфортнее
tdesc
стайлгайды хорошо, но это просто база
tdesc
а “делаем по стайлгайдам” это просто забить на UX
Александр Васильев
обождите - стайл гайды как раз и есть фундаментальный UX написанный теми, кто OS пишет..
tdesc
yet another app that looks like build-in app
Александр Васильев
А надо, чтобы - зашел - удивился - закрыл и забыл?)
RЯ
[
{
"type": "link",
"text": "https://itsallwidgets.com"
}
]
Maria
The history of everything совсем не похож на матириал. Но вроде все были в восторге.
Maria
Далеко ходить не надо. У wrike вроде не совсем матириал. И не все так просто сделать на флатере из-за этого.
tdesc
хотя бы удивился, а то и не скачает даже
Наим
[
{
"type": "link",
"text": "https://www.reddit.com/r/FlutterDev/comments/a34u8u/the_history_of_everything_app_from_the_flutter/"
}
]
Александр Васильев
а вот пример из списка выше..
First Last
Пардон, залагало ??
Анатолий
Я качаю приложения не чтоб удивляться
Serge P
Ребята, ещё вопрос, кто-нибудь помнит пример приложения с MVP архитектурой?
Оганнес Асатрян
Если вдруг найдётся, дай и мне знать пожалуйста
Serge P
[
{
"type": "link",
"text": "https://github.com/brianegan/flutter_architecture_samples/tree/master/example"
}
]
Serge P
Куча примеров, но чистого MVP нет
Анатолий
[
{
"type": "link",
"text": "https://medium.com/@develodroid/flutter-iv-mvp-architecture-e4a979d9f47e"
}
]
Александр Котков
Если мне нужен максимально выжать пероформанс, сократить количество виджетов при апдейте, нужно BloC юзать?
tdesc
нужно понимать как работает флаттер
tdesc
выжать максимум из setState
.
видео с Dartup 2018 ещё не выложили в паблике?
Александр Котков
На сколько я понял в блок и редукс если виджету не нужно обновлять( да вообще в флуттере в коробке это вроде как есть) то у него не должен вызываться ребилд, если верно понял
tdesc
редакс и блок содержат состояние ( state )
tdesc
при изменении данных, кто то вызывает setState
tdesc
от того, как часто и глубоко изменяемые значения будет ребилд дерева виджетов
Оганнес Асатрян
Всмысле 3 слоя?
Maria
Не уверена, что какая-либо архитектура может влиять на это. Попробуйте посмотреть на State.didUpdateWidget
Andrew Tis
Архитектура косвенно влияет на перфоманс. Скорее она должна ответить на вопрос - как предоставить реализуемую фичу в виде программных компонент. Что это за компоненты, как называются, где находятся, за что отвечают. Реализация архитектуры повлияет на производительность, но потом уже можно искать узкие места и оптимизировать их. Главное, чтоб архитектура была понятна и принята разработчиками.
tdesc
mvp mvvi mvc и прочее это не архитектура
Анатолий
Архитекрута понятие растяжимое
tdesc
вот ее и вечно путают с реализацией UI слоя
Анатолий
юи слой лишь часть этих аббревиатур
tdesc
потому что туда обычно запихивают все что есть
Maria
Интересно это проверить в контексте флатера. Я не очень хорошо разьираюсь, но есть ощущение, что если реализовать виджеты хорошо, то не очень важно, что там за логика вокруг них. Флаттер сам немного заботится о том, чтобы излишне не перерисовывать. Но я не уверена, если кто-то проверял, интересно будет почитать результаты
Andrew Tis
[
"Тема нагрузки виджетов(UI) бизнес логикой - не нова. Так начинали разрабатывать в андроид. Потом это все вылилось в неподдерживаемый код внутри этих компонентов. \nИ только после - заговорили про разделение ответственности и прочее. Если проект реально небольшой (например, прототип на хакатоне) - то можно и в виджеты вложить логику. \nЕсли подразумевается поддержка и развитие хотя бы полгода - лучше подумать про архитектуру.\nТут есть - \n",
{
"type": "link",
"text": "http://fluttersamples.com"
},
""
]
Andrew Tis
Но весьма нетривиальны некоторые решения.
Maria
Я не про это. Виджеты рисуются отдельно, логика/архитектура отдельно. За отрисовку отвечает флатер, который не все подряд перерисовывает
Andrew Tis
По логике - графический движок и так отрисовывает все со скоростью 60 фпс. Просто в дереве компонентов отмечаются изменившиеся виджеты. Ты имеешь в виду, что можно накосячить в виджете и это серьезно замедлит программу? (прорисовка UI идет отдельно, ее замедлить сложно, я полагаю)))
Serge P
Если поставить апп inkino, который ты много раз упоминался, можно заменить большое количество фризов из-за некоторых огрехов в реализации redux
Serge P
Хотя там ui тривиальный
admin
на DartUP от mail ru был доклад, там на примере forex приложения показывали варианты архитектуры и меньше всего фризов было на BLoC
Serge P
Кстати на удивление не смотря на молодость flutter огромное количество опен сорса, как для крипты, так и для трейдинга
Дмитрий Скрыльников
Потому что тут нужна мегавысокая скорость разработки под максимальное количество платформ
Александр Котков
А есть где нибудь фулл почитать посмотреть?
Andrew Tis
Это которая в субботу в Питере была. Видел. Моё субъективное мнение - при выборе архитектуры руководствоваться удобством для разработки в проекте. Фризы с Redux, MVP, BLoC никак не свзяаны. Архитектура и производительность - не сильно связанные вещи. Этот доклад я не особо воспринял.
Maria
Там было довольно разная реализация виджетов. Я бы пересмотрела этот доклад
Maria
Наоборот, если проработать сами виджеты,то архитектура не особо повлияет. Предметно: если где-то вызывается setState, то не обязательно, что все вниз с этого виджета перерисуется.
Pavel Shilyagov
Я делал тесты на примере списка с карточками и еще небольшой версткой внутри. Вызывал setState в рутовом виджете каждые 50мс и обновлял рандомные айтемоы в списке, и скролил постоянно. Другой вариант был вызов setState каждые 50мс у каждого айтема списка отдельно, а не у рута. Разница была заметна, но не сильно. Я это к тому, что ребилд у рута даже в случае списков не так уж и страшно.
Serge P
Да, причём фризы в одних и тех же местах на обоих платформах
Maria
И меняли redux на что-то другое и при этом становилось лучше?
Igor Filippov
Привет, ребята. Захотел я себе в appBar добавить бекграунд в виде градиента. Оказалось что такой возможности нет, на СО предлагают сделать просто контейнер и через decoration сделать градиент. В общем, я так и сделал, но оказалось что контейнер нельзя посадить на appBar у Scaffold() ...В общем, я своему контейнеру нацепил абстракный класс PreferredSizeWidget ...и все заработало. По крайней мере в дев режиме. К вы думаете не огребу ли я проблем позже с такой реализацией? Может быть есть устоявшиеся решения, проще?
tdesc
чем это отличается от того же appBar
tdesc
он реализован точно так же
tdesc
как вариант отнаследоватся от него
Igor Filippov
Да, видел. Ну пока учу свой вариант попробую. Все равно никуда дальше моего компа и телефона приложение не пойдет))
Анатолий
777 мы походу джекпот сорвали
Anton Baben
Пишу в легендарном чате :)
Anton Baben
Дартоманы. Питерские.
Дмитрий Скрыльников
Кстати, а Дарт умеет в оптимизацию хвостовой рекурсии?
First Last
[
{
"type": "mention_name",
"text": "Vyacheslav",
"user_id": 382305252
}
]
Дмитрий Скрыльников
И да, я все еще ищу пример rest api на дарте...
First Last
Можно Ваш ответ, пожалуйста? :)
Дмитрий Скрыльников
Ну, хочется мне сервер писать. Смотрю в сторону andel, там вторая версия вроде как вышла а дока не обновилась. И еще там hot reload какой-то дико кривой
First Last
Я о том, зачем тебе пример Возьми что то и начни пилить :)
Дмитрий Скрыльников
Я начал. Чет нифига не выходит. Вот распарсил я боди пост запроса. А там Map , как его теперь к классу например привести?
First Last
В конструкторе принимаешь этот map и достаешь то, что тебе нужно
First Last
Или поищи библиотеку для этого, возможно есть, учитывая mirrors
Дмитрий Скрыльников
А какого-нибудь сериализатора не существует случайно. Ибо кажется это не очень хорошая идея все руками парсить
First Last
Я не знаю, поищи на pub
First Last
И да, а почему "не очень хорошая"?
First Last
В этом нет ничего плохого
Дмитрий Скрыльников
Ну хз...
Artyom Nesterenko
Как насчёт json_serializable или built_value?
Artyom Nesterenko
Всем привет. ??
Дмитрий Скрыльников
посмотрел на json_serializable и чёт не смог его завести. говорит что не находит что билдить
Artyom Nesterenko
У меня получалось, но это было месяца два назад. ??
Дмитрий Скрыльников
Ладно, пока смирился с ручной конвертацией
Artyom Nesterenko
Мне вот от нее стало больно, поэтому тоже смотрел в сторону сериализаторов. Но built_value пока не пробовал, потому что его сложнее завести, как по мне. Хотя он вроде функциональнее и в гугловских примерах по Flutter используется. ??
Анатолий
[
{
"type": "link",
"text": "https://pub.dartlang.org/packages/mapper"
},
"\nтока остарожней, он на рефлексии"
]
Анатолий
Для несложных нужд он подойдет, для сложных структур нет
Дмитрий Скрыльников
Спасибо, выглядит не плохо
Анатолий
замечу еще что версия пока маловата
Анатолий
по этому могут быть ньюансы, но тесты есть, и базовый функционал они покрывают
Дмитрий Скрыльников
Отлично, попробуй
Анатолий
Roadmap - тут ограничения описаны, их там 3 и они могут быть существенны, уточни перед пробами )
Ernest Stanbekov
Каким виджетом добиться плавного округления фона?
Анатолий
[
"Коллеги, у кого есть какие-то статьи типа \"анимация для даунов\"? Ато я вообще не вкурю ничего. Интересует справа снизу второй вариант отсюда ",
{
"type": "link",
"text": "https://cdn-images-1.medium.com/max/1800/1*u7FTwsfdRf_tuSzYS0MKzw.gif"
},
""
]
Artem Halas
[
"Json_serrializable делает это \n",
{
"type": "link",
"text": "https://pub.dartlang.org/packages/json_serializable"
},
"\n\nИ bind_value"
]
tdesc
[
"у него один недостаток есть с ",
{
"type": "mention",
"text": "@nullable"
},
" и дефолтными значениями"
]
tdesc
нужно еще абстрактный blablaBuilder делать для дефолтных полей
tdesc
но его плюсы перекрывают все недостатки + built_сollection практически идеальны
admin
[
"Здравствуйте, помогите с моей проблемой: когда пытаюсь запустить код в консоль выводит Unable to locate a development device, при том что подключен физический девайс и запущена эмуляция. \n\n",
{
"type": "code",
"text": "flutter doctor"
},
" выводит \n",
{
"type": "pre",
"text": "No valid Android SDK platforms found in /opt/android-sdk/platforms\n",
"language": ""
},
"Дело в том, что android SDK у меня установлен не по стандартному пути, как я могу изменить место где он его ищет?"
]
Оганнес Асатрян
В андроид студии зайти в file - project structure
Оганнес Асатрян
Это по памяти. Ща точно скажу. Сек
admin
[
{
"type": "link",
"text": "https://code.tutsplus.com/ru/tutorials/google-flutter-from-scratch-animating-widgets--cms-31709"
},
" вот что попалось"
]
j k
а можно как-то с android устройства подключенного по usb делать http запросы на localhost ?
admin
У меня здесь есть Android API 28, в нем указан путь до Android SDK, но все-равно не работает
Dmitry Gordin
если заморочится, но проще за один роутер встать
Оганнес Асатрян
Попробуй установить по стандартному пути
Serge P
ANDROID_SDK_HOME прописан в системе для кастомного пути?
admin
Вообще он жалуется на то что не находит SDK platforms в папке platforms, я ему ее и подсунул, но он все-равно не пропускает. Сейчас попробую полностью установить
??Tомат
[
"o/ Господа, кто подскажет виджет наподобие ",
{
"type": "code",
"text": "ListTile"
},
", только не ограниченный тремя строками?"
]
tdesc
Column ( children: [Row, Row, Row, Row])
??Tомат
Ок, а минусы у такого подхода есть?
tdesc
ListTile тоже самое
tdesc
просто оформлен в виджет
RЯ
та нет, не тоже самое)
RЯ
но лучше делать колумн и ров имхо тоже
tdesc
class ListTile extends StatelessWidget
tdesc
final Widget leading; final Widget title; final Widget subtitle; final Widget trailing;
tdesc
да они его рендерят через _ListTile
RЯ
ага, вот он самое интерсеное)
RЯ
class _ListTile extends RenderObjectWidget
??Tомат
[
"Хм. А ",
{
"type": "code",
"text": "Card"
},
" от ",
{
"type": "code",
"text": "ListTile"
},
" далёк по функционалу? Мне просто надо как раз нужен лист из плиток, на которых одинаковый лейаут, только контент не влезает в три строки."
]
RЯ
ну это разные вещи по сути
RЯ
но ты можешь в Card всунуть Columns и Rows
RЯ
и сделать то же самое что и лист тайл по сути)
RЯ
как тебе выше уже ответили)
tdesc
надо почитать, видимо реализация RenderObjectWidget имеет какие то преимущества
??Tомат
Я не вникая особо в Дарт рванул сразу лепить снеговиков из Флаттера, поэтому - сложно. Но, блин, интересно)
First Last
Это здесь не при чем
RЯ
это да, никак не доберусь до этого(
Serge P
Вопрос к знатокам, проанализировал опенсорс и не нашёл некоторых либ, которые нужны в проекте, есть ли возможность использовать нейтив либы (отдельные для каждой из платформ) во флаттере?
Yauhen Sampir
Через plugin projects вроде
Yauhen Sampir
[
"Тут примерчик есть\n",
{
"type": "link",
"text": "https://stackoverflow.com/questions/50020347/calling-native-libraries-in-flutter-using-platform-channels"
},
""
]
First Last
[
"Да, конечно\nИначе в этом смысла никакого не было бы :)\n\n",
{
"type": "link",
"text": "https://flutter.io/docs/development/platform-integration/platform-channels"
},
""
]
Serge P
[
{
"type": "mention",
"text": "@dskrylnikov"
},
" ",
{
"type": "mention",
"text": "@shindakioku"
},
" спасибо! Значит ли это, что и с ndk не будет никаких проблем?"
]
RЯ
баги висели по этому поводу вроде
RЯ
с с++ там не очень было, но я не пробовал и не разбирался в чем у них проблема
RЯ
так то я её не вижу, но баги видел
tdesc
NDK через платформу доступ
tdesc
не должно быть никаких проблем
First Last
А, не sdk Пардон
RЯ
да вот я тоже так думаю
Serge P
Спасибо, но ведь core написан на c++ какие могут быть проблемы?
|