Программирование : Dart & Flutter по-русски
Artyom Nesterenko
Вроде раньше работал.
Artyom Nesterenko
[
"Может быть\n",
{
"type": "link",
"text": "https://docs.flutter.io/flutter/widgets/WidgetsBindingObserver-class.html"
},
""
]
uri
готового метода не встречал, можно через RenderObject var renderObject = currentContext.findRenderObject(); RenderAbstractViewport viewport = RenderAbstractViewport.of(renderObject);
Vadim Lukichev
Аналогия понятна, но во flutter не совсем так,на экране "появляются и уходят" не виджеты, а elementы - производные от виджетов, если ещё точнее renderobjects - производные от elementов)) Виджеты, по сути - описательная часть, грубо - без жизненного цикла. А что за задача - если подробнее? Чтобы понять возможные способы решений.
uri
через Rect легко проверить пересечение прямоугольников
Stas Buldakov
На первом экране список купленных продуктов, на втором эти продукты покупаются. После возврата на первый экран, нужно обновить список купленных продуктов
Vadim Lukichev
Дык, это, вроде "классическая" задача. Тут можно использовать существующие паттерны работы с состоянием, использовать setstate, bloc, redux, не?
Daniil S
"На практике это означает, что они могут быть полезны для сохранения местоположения прокрутки пользователя или сохранения состояния при изменении коллекции."
Daniil S
забыли еще добавить, что еще в очень большом количестве других сценариев
Daniil S
можно было добавить примеры с ключами PageStorage или ValueKeys
Daniil S
наверное одни из самых более юзабельных
Daniil S
в самом начале было только про скролл, я подумал просто не указали
Trump
Респект! Сейчас почитаем.
Maria
Вообще ключи оказываются мега-полезны в интеграционных тестах
admin
какой шаблон вы можете порекомендовать мне во флаттере
Artyom Nesterenko
Шаблон для чего?
admin
Имею виду Патерн , MVC ...?
admin
Какой лучше выбрать для Флуттер
admin
Гугл тоже рекомендует
tdesc
скажите, кто нить с рекапчей на флаттер игрался?
Vadim Lukichev
"флуттер" отправляется в копилку названий к "флаттер" и "флюттер"))
Daniil S
ребят, horsie спрашивает за что его тут забанили
Daniil S
может кто-нибудь обьяснить, ему передам
First Last
[
{
"type": "mention",
"text": "@bunopus"
},
" ты коняшка забанил?"
]
Evgeny Kot
Я никого не банил
Evgeny Kot
Сейчас посмотрю
Airat Zh
а как правильно?
First Last
[
{
"type": "mention",
"text": "@codev0"
}
]
Evgeny Kot
С телефона не посмотреть оказывается, через час гляну с компа
Evgeny Kot
пусть попробует зайти
Evgeny Kot
видимо когда я ботов банил, случайно соседей цепанул, сорян
Anton Anokhin
Это я забанил за оскорбление. Там была очень некорректный переход на личности. Пусть будет предупреждением.
Anton Anokhin
Теперь буду делать скриншоты
??
[
"Очень интересно, кого я оскорбил. Уж не ",
{
"type": "mention",
"text": "@shindakioku"
},
" ли часом? :)"
]
Александр Котков
Плз не начинайте а
??
Скриншоты не нужны, в админке же видно удаленные сообщения
Vadim Lukichev
Если пока заняться нечем, кроме выяснения отношений, может поможете по streams(Observables)?)) События приходят с разной периодичностью, надо чтобы не терялись и выходили с периодичностью(не реже не чаще). Можно «красиво» в пару строчек на streamах или rxdart?
Александр Котков
А более конкретно что требуется? Типо сделать задержку при поиске или как?
??
как удовлетворить требование "не реже", если периодичность источника неизвестна?
Vadim Lukichev
Приходять события асинхронно (поиск девайсов в сети по SSDP ), надо чтобы в список они добавлялись по очереди, через равный промежуток времени
Vadim Lukichev
Т.е. там могут сразу несколько девайсов «прилететь», а может и через несколько секунд другое ответить, но в UI интерфейсе, должны раз в 3 секунды добавляться в список
Александр Котков
Time interval поидее
Александр Котков
Типо раз в определеное время будет испугаться значения
Vadim Lukichev
Можно конечно реже, но не чаще, тут с буфером получается
??
zip(источник, Interval)
Александр Котков
[
{
"type": "link",
"text": "http://rxwiki.wikidot.com/101samples#toc30"
}
]
Александр Котков
Вот там много примеров на эту тему
??
[
{
"type": "pre",
"text": "Observable.just(1,2,3,4,5)\n .zipWith(Observable.interval(500, TimeUnit.MILLISECONDS), (item, interval) -> item)\n .subscribe(System.out::println);",
"language": ""
}
]
Александр Котков
Тип того да)
Vadim Lukichev
[
{
"type": "mention",
"text": "@f3ath"
},
" ",
{
"type": "mention",
"text": "@AlexFix123"
},
" Thanks \nпошёл изучать"
]
Александр Котков
Погоди, а просто таймер который раз в 3 сек апдейтит из условного кэша?
Vadim Lukichev
Не красиво)) Думаю stream прямо в streambuilder использовать
Vadim Lukichev
В один конец девайсы сыплются, с другого конца Material Cards))
Maria
[
"вот сюда еще можно посмотреть ",
{
"type": "link",
"text": "https://github.com/dart-lang/stream_transform"
},
" на debounceBuffer"
]
??
debounce будет пропускать события, как я понимаю
??
терять "слишком частые"
Александр Котков
Он для этого и сделан
Maria
[
{
"type": "link",
"text": "https://github.com/dart-lang/stream_transform/blob/master/lib/src/debounce.dart#L17"
}
]
Александр Котков
Самый часто используемый он это в поиске
Александр Котков
Чтобы не спамить сервак запросами
??
> then emits the collected values.
??
не значит ли это, что он их выплюнет все сразу?
Александр Котков
Только последнее
Vadim Lukichev
[
{
"type": "mention_name",
"text": "Maria",
"user_id": 410551855
},
" Да, похоже debounceBuffuer похоже , спасибо"
]
Maria
не уверена, может быть кстати
Maria
рано радоваться похоже??
Vadim Lukichev
Может дальше интервал делать, т.е. цепочку? Я вообще думал это типа одной строчкой, вот как в примерах, как показали, но, пока плаваю в этом, только общие представления
Maria
выше красивый пример дали с rxDart и строчек немного
??
если ты подождешь минут 15, я попробую сделать пример
??
так-то я нагуглил это все
??
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/33291245/rxjava-delay-for-each-item-of-list-emitted"
}
]
Daniil S
а данные динамически приходят?
Daniil S
или статичный лист просто ?
Александр Котков
Зачем исправил?? хотел написать фантасиске
Vadim Lukichev
[
{
"type": "mention",
"text": "@f3ath"
},
" Спасибо за инфу, попробую сам врубиться, как это работает, не помогай пока))"
]
Daniil S
да будут с тобой священные писания из документации Dart
Александр Котков
Хороший подход??
Vadim Lukichev
Динамически
??
нет уж, теперь мне самому интересно
Daniil S
можно в бродкасте фьючи дилейные кидать
Daniil S
а запросы как идут?
Daniil S
получил данные, попросил еще?
Vadim Lukichev
Технически это SSDP протокол для локальной сети. Грубо - типа широковещательного сообщения в локалку «Кто здесь?», затем начинают отвечать девайсы в локалке, с разной скоростью, кому как заблагорассудится
Vadim Lukichev
Эти ответы планирую помещать в stream и забирать в streambuilder, но не больше 1 го девайса в 3 сек например
Vadim Lukichev
Т.е. список например, и этот список девайсов постепенно увеличивается, по элементу в 3 сек,
??
короче я походу был неправ по поводу того, что rxdart не нужен
??
я не знаю, как сделать zipWith() нативными стримами
??
с rxdart это делается за минуту
??
[
"Не смотри сюда ",
{
"type": "link",
"text": "https://gist.github.com/f3ath/97206d1a38e06af65e7fc9e85d895a6a"
},
""
]
??
change my mind как говорится)
Daniil S
а зачем нам вообще zip?
Daniil S
у нас же один стрим вроде нужен
??
вон выше описана проблема
??
я предложил решение с zip
??
наверно можно проще, но я не знаю
Daniil S
проблему то я понял, мне кажется нужно создать коллекцию или стрим и каждые 3 секунды забирать от туда последнее значение
Vadim Lukichev
«Не смотри» действует сильнее, чем «смотри»)) пытаюсь понять как этот zip работает
Daniil S
два стрима приобразуешь в один так, как ты хочешь
Daniil S
а если попробовать горячий стрим?
Daniil S
его можно так зипнуть?
Daniil S
наверное нет, сейчас попробую тоже написать
??
[
{
"type": "link",
"text": "https://gist.github.com/f3ath/cf121e4c79eeffb81f4ded03d1892015"
},
"\n\n\nвот версия с вводом из консоли (лупишь по кнопкам, жмешь enter)"
]
??
я так понимаю, что тебе именно такое надо
??
с непредсказуемым вводом, чтобы события не терялись
??
а не, не совсем, наверно
Vadim Lukichev
входит с разной скоростью, а выходит не чаще раз в 3 сек. К сожалению, сейчас за компом нет возможности проверить, пока я на стадии «теория», завтра «практика»
Vadim Lukichev
И да, события не теряются, теоретически может прорвать трубу)) если не забирать оттуда
Vadim Lukichev
Из того ещё что попалось, это сделать свой transformer, забирать внутри по await в буфер и yeldить по таймеру из буфера, но это похоже на предложения в начале с буфером и таймером, думал может «из коробки» такое решение есть. В общем, для прокачки навыка буду завтра смотреть все варианты, которые накидали. Всем спасибо.
??
[
"вот мой финальный результат ",
{
"type": "link",
"text": "https://gist.github.com/f3ath/cf121e4c79eeffb81f4ded03d1892015"
},
""
]
Daniil S
или интервал от туда?
??
но это самое простое, что я нашел
??
[
{
"type": "code",
"text": ".transform(IntervalStreamTransformer(Duration(seconds: 1)))"
},
" собственно вот. одна строчка"
]
??
блин. зашел на пять минут в чат
??
в итоге потратил два часа и открыл pr в rxdart
Vadim Lukichev
Похоже на зависимость))
Vadim Lukichev
Что за pr? Глянуть можно?
??
[
{
"type": "link",
"text": "https://github.com/ReactiveX/rxdart/pull/264"
}
]
Vadim Lukichev
Я как раз эти интервалы изучал, по неправильной доке) Думаю, отлично ты сегодня зашёл
Daniil S
[
{
"type": "link",
"text": "https://gist.github.com/Renesanse/1ae7a21694b1d71f63f241c81890b811"
}
]
Daniil S
шо це работает, rx не нужен)))
??
можешь сделать версию как у меня? чтобы с консоли можно было вводить строчки, а оно их отображало с интервалом?
Daniil S
да я блин сразу полетел в чат писать как заработало, ну ты чего)))
Daniil S
ну ладно, уговорил))
Daniil S
по идее по stdin слушать и при дате делать действие?
Daniil S
не пользовался им прост
Daniil S
у меня прост global evaluation not supported
??
[
{
"type": "pre",
"text": "stdin\n .transform(utf8.decoder)\n .transform(LineSplitter())\n",
"language": ""
},
" вот такая штука даст тебе Stream "
]
??
я хочу чтобы ты ее своим методом затротлил
Daniil S
почему при прослушивании global evaluation not supported?
Daniil S
не пойму чот, надо почитать как это работает
Vadim Lukichev
На dartpad работает отлично, только восприятие конечно от rx версии отличается, тут мозги задействовать больше нужно)
Daniil S
я ожидаю, что еще раз напишет
??
ваще не знаю, что бы это значило
Daniil S
вот тоже не догоняю чот я такого)
Daniil S
[
{
"type": "pre",
"text": "broadcaster.add(stdin.readLineSync(encoding: utf8));",
"language": ""
}
]
??
твоя штука работает точно так же
Daniil S
еее rxDart не нужен)))
??
[
{
"type": "pre",
"text": "main() {\n final broadcaster = StreamController.broadcast();\n\n broadcaster.stream\n .asyncExpand((_) =>\n Stream.fromFuture(Future.delayed(Duration(seconds: 1), () => _)))\n .listen((_) => print(\"> $_\"));\n\n stdin\n .transform(utf8.decoder)\n .transform(LineSplitter())\n .listen(broadcaster.add);\n}",
"language": ""
}
]
Daniil S
ну да, так и написал, только у меня stdin ругается что-то
Daniil S
дак что по итогу
??
[
{
"type": "pre",
"text": "main() => stdin\n .transform(utf8.decoder)\n .transform(LineSplitter())\n .asyncExpand(\n (_) => Stream.fromFuture(Future.delayed(Duration(seconds: 1), () => _)))\n .listen((_) => print(\"> $_\"));",
"language": ""
}
]
??
броадкастер не нужен :)
Daniil S
ну это если только на ввод, а тут человеку нужно данные с бека получать
Daniil S
пускай в бродкастер кидает
Vadim Lukichev
Тут главное «цепочка» есть, а broadcast или single уже не принципиально.
??
[
{
"type": "link",
"text": "https://gist.github.com/f3ath/94c144fd7a87ef1b9528d82f0a8a556a"
}
]
Vadim Lukichev
Вот я с вами прокачался по стримам
CrazyAlarmClock
Всем доброй ночи, помогите новичку, не могу понять почему он не выводит список в консоли, в чем может быть проблема?)
??
[
"вон ",
{
"type": "code",
"text": "Instance of 'HistoryLocal'"
},
""
]
CrazyAlarmClock
А почему он тогда не хочет показывать текст из полей?
??
чтобы показывать текст переопредели toString() у своего класса
CrazyAlarmClock
писал вот так к полям
??
[
"или делай ",
{
"type": "code",
"text": "print(stories.map((_) => _.desription))"
},
";"
]
CrazyAlarmClock
Сейчас попробую, спасибо)
CrazyAlarmClock
Показывает, спасибо большое)
??
слушай, очень любопытно, а что ты такое делаешь? это же часть какого-то большого проекта?
??
я так понимаю, это некий микросервис на dart vm?
Vadim Lukichev
Да, часть, хотя проекта, конкретно под flutter пока нет)) Присматриваюсь к технологии, что можно на dart сделать, что нет, какие платформы поддерживаются, средства разработки, порог входа, перспективы развития, сообщество, документация, наработки, в общем что там обычно от новой технологии надо)) Пока скорость разработки и порог входа по языку, очень симпатизирует.
Vadim Lukichev
Ну и с документацией гугловцы молодцы
Анатолий
мобильный сегмент да
Анатолий
ангуляр, спорней
Vadim Lukichev
Так если, в теории, они эту модель на веб перенесут, то почему-бы нет, как SPA, с canvas в браузере все ок, тем более я так понимаю там тоже Skia используют. Но это пока теория конечно
Анатолий
я про ангуляр ангуляр
Анатолий
он у них в целом норм, но он отстает на пару шагов
Анатолий
и история никак не поменяется
Анатолий
тс ангуляр приоритетней, там стадо хомяков хотят прям щас и много
Анатолий
а флаттер на вебе это вообще адище
|