Size: a a a

Dart & Flutter по-русски

2020 May 16

SS

Sergey Salnikov in Dart & Flutter по-русски
Назар Калитюк
да это все понятно. Проблема в том, что я пишу interop библитеки из js. И там есть такой код. Вот думаю как его перенести на дарт. Выходит нужно копировать вручную вместо наследованиня.
в любом случае в dart нет перегрузки сейчас

ты не можешь сделать так
foo()
foo(int value)
источник

SS

Sergey Salnikov in Dart & Flutter по-русски
Назар Калитюк
да это все понятно. Проблема в том, что я пишу interop библитеки из js. И там есть такой код. Вот думаю как его перенести на дарт. Выходит нужно копировать вручную вместо наследованиня.
workaround

class Arg {}
class IntArg extend Arg { int value }
class StringArg extend Arg { String value }

foo(Arg arg) {
switch(arg) by type
}
источник

НК

Назар Калитюк... in Dart & Flutter по-русски
Sergey Salnikov
в любом случае в dart нет перегрузки сейчас

ты не можешь сделать так
foo()
foo(int value)
это я знаю, решил эту проблему.
источник

OP

Oleg Pchelkin in Dart & Flutter по-русски
Назар Калитюк
да это все понятно. Проблема в том, что я пишу interop библитеки из js. И там есть такой код. Вот думаю как его перенести на дарт. Выходит нужно копировать вручную вместо наследованиня.
Ну так js динамически типизированный и там нет понятия overload - ты можешь передать в функцию любые параметры, не зависимо от того, что указано в определении функции. Или не передавать ничего, даже если параметры определены. То же и с объектами. Дарт же, как и Котлин/жава и тд - все таки больше по статическую типизацию.
источник

НК

Назар Калитюк... in Dart & Flutter по-русски
Oleg Pchelkin
Ну так js динамически типизированный и там нет понятия overload - ты можешь передать в функцию любые параметры, не зависимо от того, что указано в определении функции. Или не передавать ничего, даже если параметры определены. То же и с объектами. Дарт же, как и Котлин/жава и тд - все таки больше по статическую типизацию.
ну вот. Теперь понимаете как сложно написать статически типизированный интероп на дарте для джс?
источник

OP

Oleg Pchelkin in Dart & Flutter по-русски
Константин Буланов
Коллеги не могу понять разницу между watch и select (https://pub.dev/packages/provider).
context.watch<T>(), which makes the widget listen to changes on T

context.select<T, R>(R cb(T value)), which allows a widget to listen to only a small part of T.

И не могу найти примера где увидеть разницу.
Можете ткнуть носом где можно увидеть разницу в их работе в виде примера кода.
Ну судя по описанию - метод watch возвращает полностью объект обозреваемый структуры T, в то время как select может возвращать только нужное Поле или вообще другую структуру, в которую будет маппиться T. При этом точки входа у них будут одинаковые и можно не париться о преобразовании данных и покидаем их дольше в самом провайдере - просто можно настроить корректно маппинг через функцию R cb(T value)
источник

КБ

Константин Буланов... in Dart & Flutter по-русски
Oleg Pchelkin
Ну судя по описанию - метод watch возвращает полностью объект обозреваемый структуры T, в то время как select может возвращать только нужное Поле или вообще другую структуру, в которую будет маппиться T. При этом точки входа у них будут одинаковые и можно не париться о преобразовании данных и покидаем их дольше в самом провайдере - просто можно настроить корректно маппинг через функцию R cb(T value)
Можете на простом примере пояснить плиз. Я по коду в основном учусь.
источник

OP

Oleg Pchelkin in Dart & Flutter по-русски
Назар Калитюк
ну вот. Теперь понимаете как сложно написать статически типизированный интероп на дарте для джс?
На дарте для js?) Не оч понял сути)
источник

НК

Назар Калитюк... in Dart & Flutter по-русски
Oleg Pchelkin
На дарте для js?) Не оч понял сути)
ну я хочу написать chrome extension на дарте. Мне нужно вызывать методы например chrome.webNavigation.onComplete.addListener(…). Для этого нужно написать interop с помощью библиотеки https://pub.dev/packages/js
источник

OP

Oleg Pchelkin in Dart & Flutter по-русски
Ну по идее для js overload методы не нужно писать. Должен быть один метод с максимально возможным количеством переменных. При вызове же их из дарта покидать только нужные, а на js парсить параметры и смотреть, какие поля прилетели в методе. В js объекте не может быть нескольких методов с одним именем, насколько я в курсе
источник

НК

Назар Калитюк... in Dart & Flutter по-русски
Oleg Pchelkin
Ну по идее для js overload методы не нужно писать. Должен быть один метод с максимально возможным количеством переменных. При вызове же их из дарта покидать только нужные, а на js парсить параметры и смотреть, какие поля прилетели в методе. В js объекте не может быть нескольких методов с одним именем, насколько я в курсе
да, я так и пишу. Выходит вот такая штука. `external void executeScript(
   dynamic tabIdOrInjectDetails, [
   dynamic injectDetailsOrCallback,
   void Function(List<dynamic> result) callback,
 ]);`
источник

r

roman G in Dart & Flutter по-русски
а нормальная ли практика делать global bloc
мне например, нужно знать, обновил ли пользователь данные на экранах и если да, то в глобал блоке поймать event и что-нибудь сделать с пользователем
ну либо можно сделать static userUpdateStream, и на него подписываться например в main, но это точно плохая практика
источник

НК

Назар Калитюк... in Dart & Flutter по-русски
А потом чтоб были все такие типы, я пишу 3 метода уже, и там в зависимости от аргументов вызываю этот.
источник

OP

Oleg Pchelkin in Dart & Flutter по-русски
Назар Калитюк
А потом чтоб были все такие типы, я пишу 3 метода уже, и там в зависимости от аргументов вызываю этот.
Ну тип того, в js все работает именно так)
источник

OP

Oleg Pchelkin in Dart & Flutter по-русски
roman G
а нормальная ли практика делать global bloc
мне например, нужно знать, обновил ли пользователь данные на экранах и если да, то в глобал блоке поймать event и что-нибудь сделать с пользователем
ну либо можно сделать static userUpdateStream, и на него подписываться например в main, но это точно плохая практика
Вроде да, но кмк логичнее делать это в локальном блоке - разницы что ты вызываешь глобальный блок или локальный особо нет, а если есть локальный - зачем глобальный) а саму логику уже унести дальше в БЛ, в тч можно в статический метод упаковать именно логику обработки, которую вызвать из локального блока)
источник

P

Pavel in Dart & Flutter по-русски
Коллеги, а кто-нибудь пользовался flutter_background_geolocation? Лицензия стоит своих денег или можно эту задачу руками навелосипедить?
источник

t

tdesc in Dart & Flutter по-русски
Pavel
Коллеги, а кто-нибудь пользовался flutter_background_geolocation? Лицензия стоит своих денег или можно эту задачу руками навелосипедить?
при наличии квалификации навелосипедить называется сделать самому. просто на обоих платформах есть подводные камни с этим делом
источник

t

tdesc in Dart & Flutter по-русски
roman G
а нормальная ли практика делать global bloc
мне например, нужно знать, обновил ли пользователь данные на экранах и если да, то в глобал блоке поймать event и что-нибудь сделать с пользователем
ну либо можно сделать static userUpdateStream, и на него подписываться например в main, но это точно плохая практика
когда появляется глобал блок то недалеко и до глобал стейта
источник

P

Pavel in Dart & Flutter по-русски
Есть пакет background_locator,  как в описании на пабдев так вроде те же функции (может только без энергосбережения) и бесплатно. Вот  же  вопрос что использовать...
источник
2020 May 17

L

Lermont in Dart & Flutter по-русски
Товарищи, а что у флаттера в возможностью выполняться в фоне?
источник