Программирование : Dart & Flutter по-русски
admin
> Contact - readonly примитив для контакта. Поля: [id, firstName, lastName] Я просто плохо понимаю зачем здесь builder
Evgeny Kot
Э? Вы смотрите не тот gist
admin
Разве что, у тебя строитель сможет: Считывать с хранилища которое ты ему дашь, прводить к нужному типу и создавать сущности
Evgeny Kot
у меня ссылка другая
admin
Да я просто спрашиваю, интересно же)
Evgeny Kot
Это давнишнее тестовое задание ??
Vadim Tsushko
[
"А David Morgan просто его немного перевыполнил с ",
{
"type": "code",
"text": "built_value"
},
" :)"
]
Evgeny Kot
Оно же простое, большинство делало
admin
Кстати > При этом ContactManager периодически должен синхронизировать данные с хранилищем (раз в 30сек) А как такие штуки делаются? Я знаю только через Timer, но это костыль как по мне ??
Kirill Ponomarev
[
{
"type": "mention",
"text": "@bunopus"
},
" спасибо."
]
Kirill Ponomarev
Кстати, какими патернами должен владеть программист, чтобы работать в Wrike? Что входит в соглашение об оформлении кода? :)
Evgeny Kot
[
"уф, прям паттерны не перечислю. Вообще следуем ",
{
"type": "link",
"text": "https://www.dartlang.org/guides/language/effective-dart"
},
"\nВнутренние паттерны есть, но они внутренние ??"
]
admin
А ты на работу собрался? :)
admin
> names.forEach(print); Ух ты, дарт и такое умеет ??
Kirill Ponomarev
А если я хочу вызвать билдер при вызове pub build_runner build не указывая явно вызов в main? Ну как трансформер, то как его в yaml прописать?
Kirill Ponomarev
И опираться на release.
admin
Моя не понимать, извиняй
Kirill Ponomarev
Да вопрос к Евгению
Evgeny Kot
Это мне вопрос, я чуть позже ответить смогу
admin
А ни у кого случаем не найдется тестового для flutter'a?
admin
А то на беке я далеко не уеду ??
Evgeny Kot
Тестового чего, задания?
Grabli66
Что то мне подсказывает, что вакансий flutter-а в россии, да что там в россии, в мире, очень и очень мало, если вообще есть.
admin
Но выбор не особо велик) Или flutter, или фронт
admin
Но второе я не хочу??
admin
Не люблю я этот фронт
Grabli66
Я предложения о работе(разовой) с использованием flutter видел только на upwork, пару раз. За смешные 200$.
admin
На самом деле, я в украине вообще не вижу вакансий на дарт
admin
Так что, плевать что я выберу)))
Grabli66
Не ты один. Многие не видят вакансий на дарт.
admin
И чо это за беспредел.
Grabli66
На данный момент, как по мне, дарт это язык для "души". Пришёл с работы, после написания говнокода на C#. Сел за компьютер и написал монументальный хеллоу ворлд на дарте :)
admin
Аналогично делаю ??
Богдан
[
"неужели дарт так идеален? а как у него обстоят дела с системой типизации? нет ли у него случайно таких же недостатков как и у typescript про которые рассказано в этом докладе ",
{
"type": "link",
"text": "https://www.youtube.com/watch?v=etKOc80-cw0"
},
" ?"
]
admin
А в тсе вообще есть типизация?
admin
Или там подсказки для разработчиков?
admin
[
{
"type": "mention",
"text": "@bunopus"
},
" дай ссылочку на 20минутный доклад на эту тему"
]
Evgeny Kot
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=6XCkB9Nr2s8"
}
]
Evgeny Kot
[
"А ещё советую посмотреть Антона Лобова\n",
{
"type": "link",
"text": "https://youtu.be/spIfirNCeVs?t=1h48m19s"
},
""
]
Богдан
[
"типизация есть но она сломана - бивариантные параметры методов, отсутствие type variance и ковариантность дженериков (из-за чего в массив собачек можно запушить котика), невозможность выразить композицию функций через дженерики, не ловит ошибки где надо (двойной вызов log(",
{
"type": "link",
"text": "obj.id"
},
") из того доклада Климова ) а где не надо находит (",
{
"type": "link",
"text": "https://github.com/Microsoft/TypeScript/issues/19209"
},
")"
]
Kirill Ponomarev
[
{
"type": "mention",
"text": "@bunopus"
},
" мне удалось разобраться с билдером. Но остался вопрос с режимом сборки. Как определить mode release или debug?"
]
Evgeny Kot
А там должен быть в конфиге флаг
Kirill Ponomarev
Т.е. создать 2 файла build.release.yaml и build.debug.yaml. В них явно указать target: builders: my_builder: options: isRelease: true
Kirill Ponomarev
А в билдере смотреть BuildOptions.
mark
Если про запуск, то можно так запускать pub run build_runner build —config=release —fail-on-severe —output build
Kirill Ponomarev
У transformer было свойство mode, которое в serve было debug а в build release
Kirill Ponomarev
Ну я про то и рассуждал, что нужно вызывать с config, т.е. создавать файл.
Kirill Ponomarev
[
{
"type": "mention",
"text": "@bunopus"
},
" еще один вопрос по билдеру, если можно. Когда я преобразую main.dart в main.g.dart все ок. Нужные изменения видны. Но если не менять расширение и пробовать писать в ассет main.dart то возникает ошибка переполнения буфера. Сталкивались с таким?"
]
Evgeny Kot
Билдеры не могут перезаписывать тот же файл, там в правилах написано.
Kirill Ponomarev
Хм. Т.е. чтобы main.dar выполнил некий код, созданный билдером, то его нежно выносит в отдельный файл. По аналогии с component.template.dart? В main вызывать функцию, которой еще нет.
Serhiy Z
Вечер добрый. Подскажите плз гле можно почитать про синтаксис дарта, интересуют такие операторы как ?? или ?. . Как это все использовать? Бегал по ссылкам у них на сайте, но так и не попал на нужную. Спс
Grabli66
[
"Может вот это подойдёт? ",
{
"type": "link",
"text": "http://blog.sethladd.com/2015/07/null-aware-operators-in-dart.html"
},
""
]
Serhiy Z
Спс, то що нужно) пойду читать
Oksana
Привет ??Может кто-то сталкивался с проблемой роутера AngularDart, а именно после _router.navigateByInstruction(instruction) в routerCanDeactivate хуке nextInstruction параметр null?
Evgeny Kot
Привет. А есть возможность какой-то синтетический пример сделать?
Oksana
чуть более детально
Oksana
Есть два равнозначных роута A и B. Мы находимся на чайлд роуте A, по клику создаем final instruction = _router.generate([ 'B' {...}]); и вызываем _router.navigateByInstruction(instruction);. В другом компоненте ловим хук routerCanDeactivate и все, дальше теряем параметр nextInstruction
Oksana
но видимо есть невидимые на то причины, просто думала может кто-то сталкивался) Пошла дальше мучать роутер
admin
Привет. Решил попробовать dart в предверии 2 версии. Почитал что теперь есть только strong mode. Поставил версию 2.0.0-dev.42.0, при этом спокойно позволяет использовать динамические типы. Я что-то делаю не так?
admin
ну как минимум ожидал, что int переменной нельзя будет присвоить строку
admin
[
{
"type": "pre",
"text": "void fn(List a) => print(a);\n\nvoid main() {\n var list = [];\n list.add(1);\n list.add(\"2\");\n fn(list);\n}",
"language": ""
}
]
admin
[
"ну и например\n",
{
"type": "pre",
"text": "int a = 4;\na = \"2\";",
"language": ""
},
""
]
admin
dartanalyzer не ругается и код исполняется
admin
вот и я так подумал) прочел доку на эту тему и там везде написано что так работать не должно
admin
а, не, вру. на присвоение строки сругался
admin
тем не менее первый пример работает
admin
хотя он как раз из статьи про стронг мод
Evgeny Kot
[
{
"type": "link",
"text": "https://www.dartlang.org/guides/language/analysis-options"
}
]
Evgeny Kot
analyzer: strong-mode: implicit-casts: false implicit-dynamic: false
Evgeny Kot
Оба правила в true поставьте
Evgeny Kot
Ну и dart 2 по умолчанию работает в режиме совместимости с 1.0, чтобы включился 2, надо запустить с флагом --preview-dart-2
admin
т.е по умолчанию в версии 2 strong mode включен, а implicit-casts и implicit-dynamic отключены? в статье не написано актуально ли это для версии 2
Evgeny Kot
Для того, чтобы ругался на кастование неправильное - нет
admin
с флагом —preview-dart-2 все равно так же себя ведет
admin
ну точнее для dart работает, для dartanalyzer видимо придется указывать ключи
Evgeny Kot
Так а с опциями анализатора ругается?
admin
--preview-dart-2 где то можно в конфигурации указать опцией так же?
admin
чтобы по умолчанию к проекту применялся
Evgeny Kot
Пока нет, к сожалению
Evgeny Kot
Впрочем завтра надо глянуть, но нет, насколько я помню
admin
щас посмотрел, это я с ключами проверял и сработало. Если просто в analysis_options.yaml указать, то ему пофиг
admin
удалил pubspec.lock и .packages. сделал pub get и заработало
admin
параметры меняются только после pub upgrade
admin
хотя вроде бы какое это отношение имеет
Evgeny Kot
А вы анализатор рестартовать пробовали
Evgeny Kot
Сорян, я если что, только завтра отвечу, у нас полтретьего ;-)
admin
спасибо большое за ответы
Kirill Ponomarev
Вопрос по Angular. Как передать в контент очередной элемент списка, чтобы отобразить его в ng-content? Пример использования:
Kirill Ponomarev
В my-list должен быть ngFor. Очередной элемент хочу передать в ng-content.
Kirill Ponomarev
Можно ссылочку?
Evgeny Kot
AngularDart? Нет такого
Evgeny Kot
Ну вы же сами ответили, если будет ngFor, из него можно текущий элемент получить
Kirill Ponomarev
Но что написать вместо "$????" В моем примере.
Kirill Ponomarev
И как будет выглядеть ng-content, если переменную обозвать row.
Evgeny Kot
А вам тогда надо show-item внутрь my-list передавать
Kirill Ponomarev
[
"Хи. В ",
{
"type": "mention",
"text": "@Input"
},
" помещать Component?"
]
Evgeny Kot
Давайте я до работы доеду и отпишу
Alexander Bazan
А разве, если ты хочешь ng-content, ты не должен передавать его внутрь твоего тега?
Kirill Ponomarev
Если я хочу, чтобы мой компонент отображал некое вложение, то я пишу так:
. Если вложений несколько, то в ng-content добавляется select="[header]".
Kirill Ponomarev
Тот кто использует мой компонент может писать так: Hello
Олжас Сулеймен
проблема иногда возникает: обновил входные параметры функций в либе с doubla на num, а в main функций code ругается по старой версий, обычная либа с основным export файлом
Олжас Сулеймен
проблема с анализатором в vs code
Evgeny Kot
Перезапустить анализатор помогает?
Олжас Сулеймен
но это как то не очень
Олжас Сулеймен
если писать через part-of то проблем нет
Evgeny Kot
[
"Вам поможет магия ",
{
"type": "link",
"text": "https://webdev.dartlang.org/angular/guide/structural-directives#microsyntax"
},
""
]
admin
В шторме не испытываю проблем
Evgeny Kot
part of не рекомендуется использовать >Note: You may have heard of the part directive, which allows you to split a library into multiple Dart files. We recommend that you avoid using part and create mini libraries instead.
Evgeny Kot
[
{
"type": "link",
"text": "https://www.dartlang.org/guides/libraries/create-library-packages"
}
]
Олжас Сулеймен
я по этому и делаю
Олжас Сулеймен
есть ли правило которое игнорирует присваивание int к double?
admin
> A value of type 'double' can't be assigned to a variable of type 'int'.
admin
У тебя strong mode врублен?
admin
Ну, может там деньги для кошелька пользователя
admin
Заберешь копейку - загрызет ??
Олжас Сулеймен
перевожу js в дарт там классы матриц большие в некоторых функция идет присваивание ячеек целыми
Evgeny Kot
Подождите, int к double кастовать безопасно. Обратно - нет
Олжас Сулеймен
как раз int к double
Grabli66
Вот ведь. Уже лень сделать yourDouble.round();
Kirill Ponomarev
Спасибо. Получилось. :)
Serhiy Z
Здравствуйте. Подскажите плз, есть способ в флаттере загрузить плагин перед стартом апликейшена? Хочу в щаредПреференс хранить настройки темы и надо его загрузить до старта. Спс
Анатолий
В начале пустой компонент, который грузит настройки темы
Анатолий
Затем подключается основной с нужными настройками
Анатолий
+ там есть отложенная загрузка пакетов чтоб быстрей загрузилось приложение
Serhiy Z
Пробовал юзать future.wait но флаттер бросает ошибку что платформа не определена и в канале нет метода getAll. Видтмо надо сначало как то сказать на какой платформе я запускаю?
Анатолий
а что вам ждать надо?
Анатолий
создайте пустой виджет изначально
Анатолий
Или он говорит что разные подходы на айос и андроид для загрузки данных из шаред преференс?
Serhiy Z
Создание инстанса шаренПреференс асинхронно, надо подохдать пока он создастся и щапустить runApp, но при создании инстанса флаттер бросает ошибку что он еще не знает на какой платформе запускается
Анатолий
создай пустой виджет, и когда он создастся то грузи свои преференсы
Анатолий
я думаю виджет то он рисует уже когда знает на какой платформе запускаться
Serhiy Z
Можно пример кода плз
Serhiy Z
Не совсем понимаю в какой момент что грузить
Serhiy Z
Мне надо это на самом старте приложения сделать
tdesc
вопрос: кто-то пользует firebase_auth с flutter? неожиданно стал разваливаться при попытке залогиниться '_InternalLinkedHashMap' is not a subtype of type 'Map '
Анатолий
У тебя в приложении есть точка входа? Первый виджет?
Serhiy Z
Я хочу загрузить пдагины в методе main, до запуска runApp. Так не получится?
Анатолий
тебе принципиально прям вот супер до runApp? Это с чем-то связано или просто хочу?
tdesc
запустить программу до запуска программы )
Анатолий
у тебя есть какой-то главный первый виджет, делаешь другой, стейтфул, с проперти - загружены ли настройки Если настройки не загружены, ты рисуешь ничего (лоадер по желанию) и пытаешься грузить настройки, как только настройки загрузились, ты меняешь свой проперти, соответственно рендер вызывается и ты делаешь ретурн своего главного виджета
tdesc
final ios = Theme.of(context).platform == TargetPlatform.iOS;
tdesc
а щаредПреференс это что?
Анатолий
NSUserDefaults | SharedPreferences
Serhiy Z
Кажется идею понял. Спс
Анатолий
Какую ты библиотеку используешь для этого?
Анатолий
Ато мне тоже понадобится скоро :)
Анатолий
[
{
"type": "link",
"text": "https://pub.dartlang.org/packages/shared_preferences"
},
" эту?"
]
Evgeny Kot
[
{
"type": "link",
"text": "https://twitter.com/flutterio/status/979434980358078464?s=19"
},
"\n\nФлаттер проводит опрос"
]
Grabli66
Было сложно. Но я прошёл. :)
admin
Давайте лучше опрос: Что популярнее на дарте: flutter или фронт ??
tdesc
Есть у меня одна мысль, что flutter будет и под веб
Grabli66
А кто знает. В дарте есть future и микротаски(создаются с помощью scheduleMicrotask). И те и те выполняются в event loop асинхронно. А в чём отличие?
Evgeny Kot
[
{
"type": "link",
"text": "https://webdev.dartlang.org/articles/performance/event-loop"
}
]
Grabli66
Всё что я понял. Так это то, что микротаски выполняются до выполнения футур.
Evgeny Kot
[
{
"type": "link",
"text": "https://abc.danch.me/microtasks-macrotasks-more-on-the-event-loop-881557d7af6f"
}
]
Grabli66
Что то я совсем запутался. А чем async/await отличается от обычного синхронного кода? Если await блокирует пока не завершится выполнение future. Это не то же самое, что и синхронное выполнение кода?
Наиль Гилазиев
Не блокируется. Так же как и с callback. Там ведь нет блокирования. async await это синтаксический сахар. по сути это завёрнутые future. А future это завёрнутые callback. Это если грубо говорить
Grabli66
Как не блокируется? Если блокируется. Выполнение же не продолжается дальше, пока не завершится future. Да внутри футуры выполнение идёт. Так же как и шло бы в случае синхронного вызова.
mark
Обрати внимание что async функция требует возвращаемый тип Future
Igor Katsuba
не блокируется. await просто синтаксический сахар для Future
mark
async/await это просто сахарок для .then(...)
admin
Там же под капотом генераторы
Igor Katsuba
Смотря под капотом чего. Если мы говорим о js, то да - генераторы
Igor Katsuba
хотя и у дарта тоже)
admin
[
{
"type": "link",
"text": "https://www.dartlang.org/articles/language/beyond-async"
}
]
Igor Katsuba
ага, я че то тупанул
Grabli66
Вот к примеру: await myAsyncMethod(); print("Хорошо"); Чем оно отличается от mySyncMethod(); print("Хорошо"); В обоих случаях "Хорошо" напечатается только, когда завершатся myAsyncMethod и mySyncMethod
Igor Katsuba
в твоем случае async не нужен
Grabli66
Хорошо. А в каких случаях оно нужно?
Igor Katsuba
но представь что там запрос за данными
Igor Katsuba
вместо print
Igor Katsuba
и резолвится он секунд через 10
Grabli66
Представил: final data = await getAsyncData(); print(data); final data = getSyncData(); print(data); Всё одно получается
Ludwig
[
"смысл в том, что пока getAsyncData спит ожидая получения данных с сокета, другие Future могут выполняться. await не блокирует поток, он заворачивает всё, что после него (в этом случае ",
{
"type": "code",
"text": "print(data)"
},
") в Future и кладёт его в конец очереди"
]
Grabli66
От оно чё. Теперь всё стало ясно.
Grabli66
Теперь можно спокойно пойти и
Александр Лебешев
Всем привет. Скажите, пожалуйсте, есть ли во Flutter превью лэйаутов по аналогии с тем, когда мы дизайним ui через xml? А то строить ui вслепую не очень удобно
Evgeny Kot
Есть кто на Кодфест, в Новосибирске? Можем кружок Дарт собрать
|