Программирование : Dart & Flutter по-русски
Evgenii Elchev
и типо, да нафиг усложнять, когда и пешеом норм
Vlad Pisatel
Как раз я скорее всего и понимаю, что определенные конструкции и инструменты нужно использовать в определенных местах, а не палить по воробьям
neikist
Ну так все верно. Зачем просто пользоваться null safety если можно постоянно себе когнитивную нагрузку создавать пытаясь не забывать на налл проверять и помнить где он проскочить может (особенно круто если это сторонняя библиотека или чужой код).
Evgenii Elchev
хорошо что у нас такие эксперты)
Vladimir
> то что вы этого не понимаете не значит что это сложно согласен, особенно когда так говорят про ручное управление памятью
Vladimir
ну и указатели со ссылками в ту же копилку
Vlad Pisatel
По пешеходным улицам не удобно на машине, а по шоссе не удобно пешком. Простите, но средство передвижения выбирается исходя из задач. И странно требовать всех ездить на авто по тротуарам или пешком ходить по шоссе
Vlad Pisatel
Ой, неловко вышло....
Evgenii Elchev
ну началось,
Evgenii Elchev
в какой задаче тебе удобнее думать где у тебя null а где нет, вместо того что бы за тебя об этом подумал компилятор?
Evgenii Elchev
только если ты байтики в память рука раскладываешь что бы оверхеда по перформансу небыло
neikist
Ну по вашей логике можно и динамическую типизацию использовать. "Мы же всегда помним где какие типы, а если что можно и if написать"
Vlad Pisatel
В задаче, где я уверен, что нула нет)
Vlad Pisatel
Нет, нельзя. У нас же все задачи одинаковые и существует только один расово правильный язык:)
Evgenii Elchev
let a = 5 - я уверен то там нет null, компилятор уверен что там нет нул
Evgenii Elchev
в чем сложность?
neikist
А откуда такая уверенность? А откуда уверенность что завтра библиотека не изменится или коллега код не поправит и теперь там не начнет налл проскакивать? Не говоря уж что это нужно зачем то самому запоминать.
Evgenii Elchev
тоже на дарте
(
Ну так если у вас в ней нулла нет, вам и с нуллабельными типами голову там морочить не придется
Evgenii Elchev
final a = 5; я уверен что там нула нет, а компилятор и вася из моей команды уже не уверены
Evgenii Elchev
пишется одинаково
Evgenii Elchev
шанс допустить ошибку во много раз выше
Evgenii Elchev
я бы может согласился со всем с этим
Nikita Domnitskii
щас бы сопротивляться когда тебе язык пытается работу упростить
Evgenii Elchev
если бы не натыкался постоянно на баги, которые возникли по причине "ну я был уверен что там null не может быть"
Evgenii Elchev
если бы каждый раз находят такой баг мне давали доллар я бы был уже очень богат
neikist
Тем более если хочешь по старому писать ну так и объявляй все как наллбл. Только не удивляйся потом что коллеги от твоего кода плеваться будут и бить по рукам
Evgenii Elchev
но за то в чатах все мастера
Evgenii Elchev
все помнят, все знают
Evgenii Elchev
колги не будут плеваться если их нет) или если они так же пишут)
Evgenii Elchev
блин, я опять стараюсь донести какие то очевидные для меня вещи, хотя это делать не надо
neikist
Ну все таки такая точка зрения к счастью исключение. И все понимают что лучше когда компилятор тебе работу упрощает.
Evgenii Elchev
ну нравится вам без нул сейфти, ради бога)
Vlad Pisatel
Хм. Так а почему всемне используют контракты тогда?
Vlad Pisatel
Крутая штука же
Vlad Pisatel
И компилятор за тебя думает
Oleg Pchelkin
ну если ты вызовешь этот метод не в основном потоке, а в бэкграунде - то вполне может возникнуть ситуация, где этого контекста и нет, в остальных случах юзай requireContext либо инжекть интент через DI и контекст самого приложения, чего бы нет?
Evgenii Elchev
не исключение, много где пишут как хотят
Yerassyl Maikhanov
Null это нормально вы че ребят
Evgenii Elchev
я просто так давно в таких местах не работал что забываю о том что так бывает
neikist
Да ну, не может же быть все так плохо. Я вообще впервые в жизни сегодня увидел точку зрения что "null safety не нужно"
Oleg Pchelkin
Я может тупой, но в чем преимущество неимения null в языке перед null-safety?
Evgenii Elchev
[
"если кому то интересно зачем нужны монады, и нулсейфти, посмотри просто мой доклад и все ",
{
"type": "link",
"text": "https://www.youtube.com/watch?v=Bepwx4j_vvA&feature=emb_logo"
},
" )"
]
neikist
Так мы вроде как полезность null safety и обсуждаем
(
В том, что оно не ломает консистентность
les forest
ну например чтобы не обмазываться проверками на null
Oleg Pchelkin
ну и я о том же
Yerassyl Maikhanov
Экономит написание 3 букв в ide
Evgenii Elchev
я года два назад взял халтурку на битриксе, а мне отдали верстку, с js и вот этим всем, я смотрел на этот js код и у меня кровавые слезы текли, неделю наверное текли, там написано, на уровне паскаля в школе было)
neikist
В каждом методе. И ладно бы просто лишний бойлерплейт, но ты ведь и забыть можешь.
(
null - это такой же тип с единственным инстансом, как и любой другой, но почему-то трактуется, как будто какая-то особенная конструкция
Oleg Pchelkin
этому помогает нулсэйфти, при чет тут вообще отсутствие null в принципе? если вам он не нужен - не значит что никому не нужен
Yerassyl Maikhanov
Есть куча ситуаций когда null разрешён или даже необходим
Evgenii Elchev
топовая студия у нас в красноярске)
neikist
Изначально все началось с того что человек писал что null safety не нужно.
les forest
я не говорю что оно не нужно. но читаемость кода повышает
Yerassyl Maikhanov
Я как java разработчик это говорю
Nikita Domnitskii
я уже писал что отсутствие результата можно обрабатывать более лучшими способами
Yerassyl Maikhanov
Потому что например либа не отработала и там null возвращает
Vlad Pisatel
Вы уже 20 раз сказали, что лучше, круче и быстрее) Все уже поняли) И что есть только одна точка зрения правильная мы поняли. И что пойдем выкидывать свои динамически типизированные языки и ручное управление памятью тоже поняли) И что нулсейфти - это единственный способ избегать (не поднимаем запрощенный вопрос «а все гда ли оно помогает избегать) нул-экс тоже поняли))
Oleg Pchelkin
можешь скинуть? не видел этих способов
Nikita Domnitskii
и все они существуют только из-за наличия нулла (:
les forest
я как джава разработчик был очень рад котлину)
Evgenii Elchev
суть нулсейфти, не в том что бы не использовать nul, а в томы что бы у тебя была возможность помечать перменные как нот нул, что бы и ты и компилятор знали что там нул нибудет никогда
Evgenii Elchev
и что бы если перменная нул ты не забыл обработать этот кейс
Yerassyl Maikhanov
Но даже там разрешение на null прописывали
Yerassyl Maikhanov
Ибо это необходимо
neikist
Полностью согласен. Я на java не очень много писал, но после котлина ее страшно трогать. И null safety одно из главных для меня преимуществ.
Григорий Коваленко
Кто это негодяй, кому не нужна нулл сейфети?
Григорий Коваленко
старообрядец
Nikita Domnitskii
Maybe из хаскеля, Option из раста/скалы
Yerassyl Maikhanov
Я негодяй и маргинал
Yerassyl Maikhanov
Но не настолько
Evgenii Elchev
Optional из swift)
Evgenii Elchev
нет ни одного нового языка где не был бы null сайфти
Григорий Коваленко
На самом деле это довольно удобно, и я сейчас уже не представляю как жил без этого
Evgenii Elchev
и в старые во все завозят
neikist
Either какой нибудь там наверно тоже подходит. Или банальный sealed Result класс. Но вот тут мне и null кажется нормальным. Если язык null safety поддерживает
Evgenii Elchev
вообще история же повторяется, когда swift вышел, все разработчики привыкшие к objc везде писали что нулсейфти это дичь
Evgenii Elchev
сейчас те же разработчики шеймят меня что я пошел писать на дарте где нет нул сейфти)
Григорий Коваленко
вообще чем больше ограничений мы на код накладываем, тем лучше. статическая типизация, файнал переменные, иммутабельные классы, приватные поля, все это великое добро
Evgenii Elchev
maybe это частный случай Either
Yerassyl Maikhanov
допустим я создал класс с null Safe полем
Evgenii Elchev
просто надо менять мышление, раньше ты о типах не думал, а теперь думаешь, раньше о null сейфти не думал, теперь думаешь, это же не так то просто сделать
Oleg Pchelkin
гляну, но вроде такие конструкции и в rx и в свифте есть.. Посмотрю, может это и правда удобнее, но пока выглядит как то же самое, только обернутое в дополнительный Option..
(
[
"Нуллабл против Опшионала - это сэкономить несколько символов в сигнатуре и ",
{
"type": "code",
"text": "T?? ~ T?"
},
""
]
Yerassyl Maikhanov
и заполняю поле методом, но метод не нашел ничего и что тогда он положит?
neikist
О черт. Я вспомнил своего коллегу который кучу всего принимал как Any а потом кастил. Я его еле отучил от этого дерьма
Evgenii Elchev
оно не так работает. нул сейфти поле не может ничего не содержать, и не может создаться без значения что бы его потом можно было заполнить
Evgenii Elchev
если ты не знаешь что туда положить помечаешь как нулабл и живешь как жил
Yerassyl Maikhanov
ну так а тогда зачем мне это нужно
Evgenii Elchev
потому что в большенстве случаев я знаю что туда положить
Dmitriy Orteney
тебе анализатор не даст так делать: класть нуллабл тип в обычный
Vlad Pisatel
А что происходит с меньшинством?
Yerassyl Maikhanov
если у меня not null только id а все остальное может вернуть null и на это есть бизнес логика
Zetts
Всем привет, столкнулся с проблемой, учавствую в тестировании проекта на флаттер под ios и на девайсе с ios 10.3.3 после обновления чего-то, скорей всего икскода пропали все элементы, отображаются только фоны, такое даже с демо проектом. может кто сталкивался с проблемой и знает как фиксить?
Evgenii Elchev
у меня нулами только данные из бд и от сервера помечаны
neikist
Компилятор тебе ругнется и предложит обработать. Либо значение по умолчанию положишь, либо как nullable объявишь
Evgenii Elchev
да еп, ты читаешь вообще что я пишу? я перед этим описал кейс когда ты не знаешь что ложить, тыт тут же этот вопрос задаешь
Evgenii Elchev
если ты не знаешь что туда положить помечаешь как нулабл и живешь как жил
Yerassyl Maikhanov
в приложении?
Oleg Pchelkin
пробовал откатить xcode? cleanы тоже не помогают?
Zetts
да, при запуске демо приложения к примеру только белый фон и кнопка создания поста без плюсика внутри, только круг
Vlad Pisatel
Окей, окей, поясни, может я приобщусь к такой религии. И что дальше мне с этим нулаблом делать? Жить как жил раньше с нулами?)
Zetts
я не разработчик, но разработчик пробовал откатывать икскод и даже демо проект с оффсайта проблемно отображается
Evgenii Elchev
если уметь с этим работать, то ты можешь просто вычислять весь код, прочто не парясь, есть там null или нет, до самого коца использования значения
Evgenii Elchev
ну я же скидывал ссылку на видео, я там подробно про этот рассказал, пробробнее уже в чате не раскажешь)
Yerassyl Maikhanov
возможно вы что то юзаете что опирается на класс который недавно в mixin переделали
Zetts
на 13 айоси никаких проблем и в эмуляторе 10.3.3 всё ок, а на реальном девайсе перестало работать
Yerassyl Maikhanov
и у вас все пропало
Yerassyl Maikhanov
у меня так календарь пропадал
Zetts
а и проблема только на айпаде мини2 моём, на старой 5ке айфоне тоже всё ок
neikist
Угу. Нередко какие то куски так и пишу
Nikita Domnitskii
[
{
"type": "link",
"text": "https://dartpad.dev/63a4c482cebafad097996fe7c4d19f61"
}
]
Nikita Domnitskii
фп придёт порядок наведёт
Zetts
а демо проект почему перестал работать?
Evgenii Elchev
[
"ну я уже приводил пример \n\nможно написать вот так\n\n",
{
"type": "code",
"text": "final intEge = ege != null ? int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "(ege) : null;"
},
"\n\nа можно вот так \n",
{
"type": "code",
"text": "final intEge"
},
" = map(",
{
"type": "code",
"text": "ege"
},
", ",
{
"type": "code",
"text": "int."
},
{
"type": "italic",
"text": "tryParse"
},
")"
]
Evgenii Elchev
особенно заметен профит на длинных дистанциях
Nikita Domnitskii
ну я видел, просто опшн явно показывает возможность отсутствия результата
Yerassyl Maikhanov
надо сидеть смотреть
Nikita Domnitskii
и необходимость его обработки
Evgenii Elchev
[
"типо когда можно заменить \n\n",
{
"type": "code",
"text": "final intEge = ege != null ? int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "(ege) : null;\nfinal intHeight = height != null ? int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "(height) : null;\nfinal intCurrentWeight =\n currentWeight != null ? int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "(currentWeight) : null;\n\nPerfectWeightFlow flow;\nif (intEge != null && intHeight != null && intCurrentWeight != null) {\n flow = PerfectWeightFlow(\n ege: intEge,\n height: intHeight,\n currentWeight: intCurrentWeight,\n );\n}"
},
"\n\nна \n\n",
{
"type": "code",
"text": "final flow = map(\n map(ege, int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "),\n map(height, int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "),\n map(currentWeight, int."
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "),\n PerfectWeightFlow,\n);"
},
"\n\nили на каком нибудь хаскеле\n\n",
{
"type": "code",
"text": "PerfectWeightFlow <*>\n int."
},
{
"type": "italic",
"text": "tryParse "
},
{
"type": "code",
"text": "<<- ege\n int."
},
{
"type": "italic",
"text": "tryParse "
},
{
"type": "code",
"text": "<<- height\n int."
},
{
"type": "italic",
"text": "tryParse "
},
{
"type": "code",
"text": "<<- currentWeight"
},
""
]
Nikita Domnitskii
красота (:
Evgenii Elchev
кстати на swift тоже можно написать через <*> просто операторы надо самим сделать, из коробки нет
Evgenii Elchev
или либы поставить
Pavel Vasilenko
А разве tryToParse не выдает и так null в случае некорректного значения ege?
Evgenii Elchev
нет, в него нельзя передать null, он упадет
Eduard Lanchev
[
"Привет! \nРебята, если я хочу, чтобы приложение на Google Play имело помесячную подписку и льготный период, скажем, неделю, то это делается через пакет in_app_purchase 0.3.4+1 или есть более простые варианты?\nТо есть хочу только платную подписку + льготный период на все приложение и больше ничего.\n\n",
{
"type": "link",
"text": "https://pub.dev/packages/in_app_purchase"
},
""
]
Evgenii Elchev
[
{
"type": "italic",
"text": "/**\n * Parse [source] as a, possibly signed, integer literal and return its value.\n *\n * Like [parse] except that this function returns null where a\n * similar call to [parse] would throw a [FormatException],\n * and the [source] must still not be null.\n */\n"
},
{
"type": "code",
"text": "external static int "
},
{
"type": "italic",
"text": "tryParse"
},
{
"type": "code",
"text": "(String source, {int radix});"
}
]
Yerassyl Maikhanov
лол это в каком языке
Evgenii Elchev
что в каком языке?
Yerassyl Maikhanov
dart что ли
Pavel Vasilenko
Точно, я просто не пытался никогда null передавать туда
Yerassyl Maikhanov
а почему не добавили проверку они
Evgenii Elchev
а какие альтернативы?) я пока только на нативе написать придумал)
Pavel Vasilenko
А вообще в clear code рекомендуют вообще null никуда не передавать
Nikita Domnitskii
потому что нулл - это заебись
Yerassyl Maikhanov
ну тип очевидно же что это не повод к null safety
Andreu
Подскажите в сторону какого лейаута надо копать, чтобы более адекватно сделать зеленую иконку выше окна диалога
Evgenii Elchev
у меня то бек есть
Nikita Domnitskii
это кстати не валидный синтаксис же? вариадик параметров у нас нету ещё
Nikita Domnitskii
а что повод?
Nikita Domnitskii
миллиарды проёбаных долларов
Evgenii Elchev
валидный же
Yerassyl Maikhanov
ничего)
Nikita Domnitskii
ну у тебя мап с 2 аргументами, а потом с 4
Yerassyl Maikhanov
потому что null это заебись
Evgenii Elchev
так у меня не одна функция)
Григорий Коваленко
диалог с прозрачным фоном, а внутри - это
Evgenii Elchev
ну он все равно платный
Evgenii Elchev
я лучше на нативе напишу)
Andreu
не совсем приходит в голову как сместить иконку выше
Evgenii Elchev
это вопрос пары часов
Yerassyl Maikhanov
Stack->Positioned
Nikita Domnitskii
так а конфликта имен не будет разве?
Nikita Domnitskii
[
{
"type": "link",
"text": "https://news.ycombinator.com/item?id=12427069https://news.ycombinator.com/item?id=12427069"
},
" ага"
]
Nikita Domnitskii
вы просто не видели мира без нуллов
Nikita Domnitskii
поэтому так за него цепляетесь
Eduard Lanchev
Это оно? А никак еще проще сделать нельзя? Вообще удивлен, почему Google простейшую вещь не сделал на своей стороне? Ведь подписки все равно вбивать надо в Play Console. Может быть есть что-то толковое по теме почитать? Типа полного хелпа, как запустить платный функционал? )
Evgenii Elchev
а, в этом плане не валидный да) я привык что в swift может быть функция с одним и тем же именем, тут их приходится называть по разному
Evgenii Elchev
да хз, у нас куча проектов на нативе работает как часы, никто не будет оплачитвать подписку стороннего сервиса вместо того что бы написать на нативе обработку платежей
Evgenii Elchev
in_app_purchase в гугле крайне странно написали, кажется просто положив на ios
Sergey Hottabych
Фигасе у тебя заказики!)) Из Даркнета? ??
L
Как сделать прокрутку вверх по тапу на статус бар в ios? чето ничего не нашел
Dmitriy Orteney
Должно из коробки работать, если AppDelegate наследует FlutterAppDelegate
L
[
{
"type": "pre",
"text": "@objc class AppDelegate: FlutterAppDelegate {",
"language": ""
}
]
Saidkamol
почему фонт не работает помогите пж
L
А, я понял почему не работает, я использую scrollable_positioned_list
Saidkamol
perezagruzil app vse ravno ne rabotayet
Eduard Lanchev
Тихо фигею... У меня, конечно, попроще задача. Но жаль, что флаттер напрямую нормальных классов для работы не предоставляет.
Dmitriy Orteney
а почему этим не может бэк заниматься? например хранить, что пространство другого оплачено и отдавать разрешения на редактирования
IB Akhrorov
и/ или как искать в гугле
Igor Kusoff
[
"не получается найти виджет для этого элемента:\n\n",
{
"type": "link",
"text": "https://material.io/develop/ios/components/page-controls/"
},
""
]
Igor Kusoff
что посоветуете использовать?
Mikhail Spiridonov
rtl flutter
Mikhail Spiridonov
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/intl/TextDirection/RTL-constant.html"
}
]
Maks Andrienko
а покажи что у тебя указано в поле ввода
IB Akhrorov
начал писать текст с правой стороны на лево
IB Akhrorov
[
{
"type": "link",
"text": "https://github.com/Appli-chic/google-translate-flutter"
}
]
Eduard Lanchev
А как получается так, что он отменил бесплатную неделю, а по факту, все осталось?
Eduard Lanchev
И как этого избежать?
Maks Andrienko
можешь сказать что там за класс ? а то не могу найти)
IB Akhrorov
lib/components/translate_input
Sergei We jhdhfdhdfg
почему данный код может не работать?
Eduard Lanchev
То есть мы таким образом сверяемся с базой юзеров на своем сервере. Я правильно понимаю, что если мы у себя на сервере не ведем базу юзеров, то полагаемся на Гугл, который где-то у себя ведет списки подписанных, отписанных клиентов и время? Это так работает?
Maks Andrienko
у тебя скорее всего где то косяк с TextEditController-ом попробуй его убрать и посмотри нормально ли будет отображатся
Eduard Lanchev
Спасибо! ??
Andrew Ka
[
{
"type": "link",
"text": "https://youtu.be/wSyZM90N2MA"
}
]
Ruslan Kim
Привет, кто работал с гугл картой во флаттере, подскажите, мне нужно после ребилда изменять polyline на карте, но у меня остается старый отрисованный путь
Ruslan Kim
GoogleMap( polylines: Set.from(polylines), ... )
Ruslan Kim
задаю путь вот так
IB Akhrorov
спасибо Заработал
|