Программирование : Dart & Flutter по-русски
Alexandr Drobyshev
абы не заблочили эпл его и все))
Alexandr Drobyshev
так это не я задался вопрсом)) српшивайте выше) у тех кто задался) я до них и не думал об этом
???Abduxalil ???Raxmonberdiyev
ету прогу вы сделали?
Alexandr Drobyshev
из за http code 403
Alexandr Drobyshev
я ее только начал набрасывать)) в целях изучения создания анимаций и игрушек на флаттер ??
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://en.wikipedia.org/wiki/HTTP_403"
}
]
Alexandr Drobyshev
а вы вообще уверенны что у вас юрл картинки указан а не страницы
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://cdn.pixabay.com/photo/2020/06/01/07/59/paris-5245585_1280.jpg"
}
]
Alexandr Drobyshev
вот картинка
Alexandr Drobyshev
а у вас вот
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://pixabay.com/photos/paris-church-france-dom-5245585/"
}
]
Vyacheslav
[
"Привет всем, подскажите - как открыть url в том же окне flutter web?\nВот такой метод 'open' открывает в другой вкладке\n",
{
"type": "pre",
"text": "js.context.callMethod('open', ['https://stackoverflow.com/questions/ask']);",
"language": ""
},
""
]
Alexandr Drobyshev
может просто location как на жс?
Alexandr Drobyshev
location.href
Alexandr Drobyshev
я во флаттере не юзал, сложно сказать как точно называется
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://api.dart.dev/stable/2.9.3/dart-js/context.html"
}
]
Alexandr Drobyshev
если это window то window.location.href
Alexandr Drobyshev
[
{
"type": "code",
"text": "js.context."
},
"location.href = url например"
]
Vyacheslav
[
"нашел решение:\n",
{
"type": "pre",
"text": "import 'dart:html' as html;\nhtml.window.location.assign(url);",
"language": ""
},
""
]
Artem
Подскажите по регистрации в Apple Developer. Хотел сделать платеж (перввый раз) но платеж не прошел из-за настройки лимита на карточке. После того, как я увеличил лимит. Эпл всеравно не позволяет сделать мне платеж. Пробовал другую карточку. Тоже сообщение. We are unable to complete your order There was an issue when we processed your order. Verify that your information is correct and try again. If you need further assistance contact us. Duplicate order
Artem
Попробовал им писать. Они мне прислали такую фигню. Эпл настолько зажралось, что даже не позволят повторно заплатить....
Artem
[
"To avoid a delay in receiving your order, please contact your card provider and let them know you placed an order with Apple.\n\nYou can also cancel this order or submit a new order with updated payment information by contacting ",
{
"type": "email",
"text": "devpayment@apple.com"
},
".\n\nIf after 7 days we’re still unable to process your payment, your order will be canceled.\n\nSenior Apple Developer Program Support:\nEmail: ",
{
"type": "email",
"text": "devpayment@apple.com"
},
""
]
Andrey Unger
[
"Господа, кто с ",
{
"type": "code",
"text": "FlareControls"
},
" работал? Как остановить зацикленную анимацию?"
]
Дмитрий Сосновский
Здравствуйте! Подскажите пожалуйста: открыт экран. Поверх него открывается другой с помощью Navigator.push. Возможно ли внутри первого экрана отследить момент, когда второй экран будет закрыт?
Andrey Unger
then повесь на push и все
Дмитрий Сосновский
Спасибо)
Тима Егембердиев
Всем привет кто нить работал с amplify на flutter? Можно проконсультироваться?
Alexandr Drobyshev
а нет ли случайно визуальнйо возможности настроить цвет? типа что то нажал и колорпикер появился
Evgen Fil // (=^.^=)
[
{
"type": "link",
"text": "nometa.xyz"
}
]
Evgen Fil // (=^.^=)
Попробуй тыкнуть на квадратик слева
Alexandr Drobyshev
так пробую, не тыкается)
Evgen Fil // (=^.^=)
Странно В пучарме и вебшторме работало
Alexandr Drobyshev
оно и в студии вроде работало когда нативно делал под андроид, а в флатере нет
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://pastebin.com/Rjv2GFWg"
},
"\n\nхотел обернуть ячейки в Expanded чтоб автоматом тянулись, а тогда нет размера( обязательно передавтаь размер выходит в паинтер?"
]
Alexandr Drobyshev
УРАААА. не виснит студия
Alexandr Drobyshev
Просто нужно сделать так
Alexandr Drobyshev
а где скачать звук карандаша для анимации зарисовывания клетки
4nk1r
[
"Сделал контейнер аля разделитель. Назначал ему цвет ",
{
"type": "code",
"text": "CupertinoColors.separator"
},
" - работало. Назначил заклинание со скрина - не работает. Почему?.. заранее спасибо"
]
Alexandr Drobyshev
цвет вроде бы впереди альфа идет
Alexandr Drobyshev
0xff38383c попробуйте
Noob Noobskiy
Можете подсказать, причем здесь эти Key? Пробовал убрать их, все равно работает. Никак не пойму к чему они, с чем они связаны. Ранее, в других туторах такое вроде не писали
Noob Noobskiy
Извиняйте за столь очевидные темы вопроса, только учусь)
Alexandr Drobyshev
[
"есть супер сайт, ",
{
"type": "link",
"text": "google.com"
},
""
]
Alexandr Drobyshev
пишешь flutter key
Alexandr Drobyshev
[
"первая ссылка\n",
{
"type": "link",
"text": "https://habr.com/ru/post/446050/"
},
""
]
Alexandr Drobyshev
ужас как сложно!
Алексей Александрович
такая же штука, как в web фреймворках
Alexandr Drobyshev
как мне вот отловить все эелементы как в вебе над которыми я сделал движение пальцем понять бы))
Alexandr Drobyshev
типа mouseover
Maks Kravchenko
на onLongPress в GestureDetector details приходят думаю родителя можно в GestureDetector обернуть и там поработать с details сам не details не юзал, но думаю там будет нужная инфа
Alexandr Drobyshev
[
"лонг смотрел, должго ждать, нашел ",
{
"type": "code",
"text": "onPanUpdate"
},
" ?? ща мучаю его"
]
Alexandr Drobyshev
но хочу чуть усложнить, выбирать направление, строго вретикаль и строго горизонталь и чтоб если палец двинулся не попадало на сосдний ряд
Alexandr Drobyshev
то есть я так понимаю надо запоминать начало, потом смотреть когда попал на соседнюю клетку где она и уже направление фиксировать то етсь либо ряд либо строку
tdesc
посмотрите виджет тесты, там ключи в полный рост
Alexandr Drobyshev
глупый вопрос, не ожидал что сталкнусть)) вот есть виджет Game в котором етсь List fields ...100элементов
есть стейтфул виджет Cell в него передаю checked парамтер, но при перерисовке не вызывается initState и не запускается анимация)) как запустить
Alexandr Drobyshev
[
{
"type": "code",
"text": "Cell(size: size, checked: fields[pos + i * 10])"
}
]
Alexandr Drobyshev
[
{
"type": "code",
"text": "if (widget.checked) {\n _play();\n}"
}
]
Alexandr Drobyshev
не вызывается, а хотелось бы
Alexandr Drobyshev
Добавил key: GlobalKey конечно помогло, но будет перерисовка кжадый раз всех виджетов либо надо хранить 100 экземпляров key как то криво это
Alexandr Drobyshev
Передавтаь стреам то же ка кто криво))
Alexandr Drobyshev
та лень_ хотелось ка кто проще) это ж чисто поковырять а. не продакшин
Alexandr Drobyshev
но видимо придется
Andrey Unger
riverpod попробуй
?? ??????????????????????????
Где-то я это уже слышал ??
Andrey Unger
мне после него в сторону блока даже смотреть не охота)
Andrey Unger
riverpod + flutter_hook
?? ??????????????????????????
А был опыт блока до?
Andrey Unger
на крупных проектах нет
?? ??????????????????????????
На нет один ответ)
Andrey Unger
а смысл? с блоком я не понимаю как спроектировать большое приложение с минимум бойлерплейта. С риверподом - без проблем.
?? ??????????????????????????
Да брось, я бы тоже не понимал еслибы не использовал) вот например минимум бойлерплейта вообще не понимаю)
?? ??????????????????????????
У меня не много времени, tz обязывает, можно тезисно) почему я должен забыть о BLOC? Я рассмотрю все предложения
Andrey Unger
ну для блока надо создавать кучу дополнительных классов и енумов со стейтами, и прочим. Два потока, листенеры… геморой. А тут создал changenotify или statenotify - и весь стейт в нем нужный. Надо другой - создал еще один. Весь код провайдера в одно окно обычно помещается.
Andrey Unger
через референспровайдер связываешь провайдеры между собой какхочешь
?? ??????????????????????????
Ну смотри, создать 3 файла - плагин блок Создать 3 класса лайф темплейт - потратили 20 секунд, дальше внедряем логику
Andrey Unger
ну а тут ты сразу логику внедряешь. Не заморачиваясь с тем откуда должно что придти, куда должно быть что отправлено.
?? ??????????????????????????
Про потоки не понял претензии и ишу не видел, а альтернативу для любопытства покручу)
Andrey Unger
просто пишешь асинхронную функцию которая тебе что-то с бэка тянет и оборачиваешь ее в провайдер
?? ??????????????????????????
Основная цель разделить UI и логику, ты с этим согласен или ты из других?)
Andrey Unger
естественно)
?? ??????????????????????????
Я посмотрю о чем ты )
Alexandr Drobyshev
Шо то я не пойму а как мне футуре сделать типа class GameCell {. Future state; check() { state.add(true); } }
Alexandr Drobyshev
ни как?)
Andrey Unger
с риверподом у тебя в виджете остаются только if else которые в зависимости от стейта рисуют разные виджеты. А сам стейт определяется в провайдере. Ты просто на кнопку вешаешь вызов какого-то метода из провайдера и у тебя сразу стейт меняется. Причем стейт ловят все виджеты которые на него подписаны
Andrey Unger
причем ничего не мешает миксировать блоки и провайдеры - есть streamprovider )
?? ??????????????????????????
А в блоке логика в блоке и ты рисуешь ui по состояниям
Andrey Unger
да, через буилдеры
?? ??????????????????????????
Ну и норм) чем тебе они не нравятся?)
Andrey Unger
меня бесит когда в коде определяющем верстку идет всякие функции и методы. Я даже на кнопку хэкндеры выношу в методы)
?? ??????????????????????????
Это хорошая практика
Andrey Unger
это не до конца разделенная логика и ui получается. ListView.builder - яркий тому пример
?? ??????????????????????????
У тебя есть ui который рисует 10 твоих состояний, там нет логики если ты сделал все правильно
?? ??????????????????????????
Только блок решает когда рисовать, каждое рисование приводит только к 1 результату
Andrey Unger
ну с темже ListView.builder - когда у тебя не одинаковые итемы рисуются - всю логику описывать приходится внутри builder метода ListView - фактически запихать в код UI
Flow
Что мешает Бюллер вынести не в лямбду
?? ??????????????????????????
Билдер делает новые виджеты, которые как чёрный ящик тебе не известны
?? ??????????????????????????
И могут содержать свои блоки)
?? ??????????????????????????
И честно говоря листвью тут вообще отсебятина)
Andrey Unger
это я неудачный пример выбрал. стримбилдер будет более подходящим
Alexandr Drobyshev
[
{
"type": "code",
"text": "class GameCell extends ChangeNotifier {\n bool state = false;\n check() {\n if (!state) {\n state = true;\n notifyListeners();\n }\n }\n}"
}
]
Alexandr Drobyshev
так сделал, вроде норм
?? ??????????????????????????
Он тебе не нужен, если пару раз подумать можно от этого отказаться)
Alexandr Drobyshev
не понмиаю почему нет behavior, стрим билдер же фигня, постоянно надо получать что уже есть в стейте, и прииходится еще отдельно доставать
Andrey Unger
я уже молчу что везде и все диспозить надо))) это ли не бойлерплейт?)
Andrey Unger
когда начинал ковырять BLoC часто сталкивался, что дергаешь его а там уже другой экземпляр блока потому что в другом виджете его задиспозил. Все это конечно от кривых рук, и с правктикой проходит, но осадочек остается
Andrey Unger
вот ковыряю сейчас flame - там похоже вообще нет никакого стейт менеджмента! Вообще не понятно как туда прокинуть тотже BLoC или riverpod. Там нет BuildContext - и как с ним работать? не понятно пока)
Andrey Unger
Что-то гугл совсем мышей не ловит. Уже сутки прила на проверке висит. Аппл раздуплился часов 6 назад. Отправлял одновременно
?? ??????????????????????????
Стейт - конечное состояние, это гарантирует отсутствие бизнес логики в UI
?? ??????????????????????????
Стримбилдкр вообще о другом
Alexandr Drobyshev
я имею ввиду что СтримБуилдер НЕ хранит ласт элемент, а он нужен, для этого делают Бехавиор, но почему то его нет)
Alexandr Drobyshev
есть но в отдлеьной либе
Alexandr Drobyshev
и flutter_bloc не реализует его
?? ??????????????????????????
Если мы говорим о стримбилдерея то кто в этот стрим сует данные? Разве не мы сам туда из замкнус а потом говоришь что это не айс?)
Alexandr Drobyshev
и приходится ингда делать так, получать стейт и еще подписываться на слушатель, аможно было сделать метод типа listenWithLast отя бы чтоб подписался и туда же передлао сразу
Alexandr Drobyshev
ты не понимаешь видимо о чем я
Alexandr Drobyshev
бывает нужно в initState из блока достать состояние и еще подписаться на измение
Alexandr Drobyshev
вот я и гворю в ангуляре я юзал бы Behavior из rxjs
Alexandr Drobyshev
тут тожее сть реализация
?? ??????????????????????????
Давай выше, посмотри что ты можешь вытащить из стрима, стримбилдкр это плагин провайдер а не асинх
?? ??????????????????????????
Ты можешь перебрать все значения
Alexandr Drobyshev
ой ну StreamController, можно догадаться о чем я)
?? ??????????????????????????
Которые были в потоке, делай что хочешь
Alexandr Drobyshev
речь вообще о реализации flutter_bloc, могли б сдлеать и подписку с последним значением
Alexandr Drobyshev
я могу перебрать а речь о том что жто лишнийкод)
Alexandr Drobyshev
просто говрю етсь удобная штука, моглиб и реализовать)
Alexandr Drobyshev
[
{
"type": "link",
"text": "https://pub.dev/documentation/rxdart/latest/rx/BehaviorSubject-class.html"
}
]
Alexandr Drobyshev
я про это
?? ??????????????????????????
Я знаю этот паттерн с плохой стороны, я не буду сейчас его обсуждать, попробую может здесь он сделал лучше)
Andrey Unger
[
{
"type": "mention",
"text": "@HunterKaan"
},
" как riverpod попробуете - отпишите. Хочу услышать о минусах по сравнению с BLoC )"
]
Alexandr Drobyshev
ну так я не говрю что он только нужен)) я говрю иногда надо было в инит стейт получить сразу из блока что то, который с родителя пришел чреез провайдер, я подписался и получил бы сразу, та к подписался и потмо еще отельно смотрю)
?? ??????????????????????????
В блоках можно в инитстейт засунуть что угодно на любом уровне
?? ??????????????????????????
Можно из другого блока в контексте данные брать, там сейчас как раз заехало слушать или читать блок в экстеншн
Alexandr Drobyshev
При чем тут читать или засунуть
Alexandr Drobyshev
Вообщем не важно раз не понимаете зачем нужен бехавиор в блоке) значит вам не нужен)
Alexandr Drobyshev
А мне нужен и я привык к нему)
.
у меня вопрос как сделать приложение строго для владельца
.
Чтобы он принимал заказы
.
Обновлял данные товаров
admin
[
"Привет, хочу сделать некий логин скрин, на котором пользователь введёт пароль, и если он верный то уже отобразит основной контент (это ",
{
"type": "code",
"text": "Scaffold"
},
" который указан как значение ",
{
"type": "code",
"text": "home"
},
" у ",
{
"type": "code",
"text": "MaterialApp"
},
"). Как правильно реализовать смену экранов?\n\nКак себе это представляю я: делается материнский стейтфул виджет, который по умолчанию отображает логин-скрин, при нажатии на кнопку происходит сет-стейт переменной в которой хранится виджет текущего скрина (изначально он это логин скрин) и в билде прописать тупо ",
{
"type": "code",
"text": "return _current_page_widget"
},
""
]
admin
[
"Насколько такой подход правильный? Внутри у меня будет ",
{
"type": "code",
"text": "Drawer"
},
", наверное для него нужно будет сделать похожую схему"
]
Flow
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/Navigator-class.html"
}
]
admin
А можно отключить переход на пред. страницу в этом? Я тоже что-то нагуглил но там везде было ощущение что это хлипкая конструкция, с которой можно всегда выйти
Ivan
пушреплейсментом можно
Flow
pushAndRemoveUntil насколько помню
Flow
и насколько помню в лямбде false возвратить
Ivan
если это первая страница в стеке, то хватит и пушреплейсмент
admin
А что насчёт Drawer? Припустим я хочу менять только тайтл скаффолда и содержимое при выборе разных пунктов.
Ivan
то есть ты хочешь, чтобы в дравере были разные пункты меню в зависимости от логина?
admin
Да, с сервера будет приходить список фич (все известны заранее но могут быть ограничены) и в зависимости от этого списка в дравер выводить разные пункты
Ivan
например success unsuccess
Ivan
Тогда просто булёвкой рендерь виджет в дравере
Ivan
if(isSuccesLogin) Text("Text")
Ivan
а если надо менять эти виджеты, то тернарником
admin
А при нажатии на пункт меню в дравере основное содержимое скаффолда как поменять?
admin
[
"Я сделаю на каждый скрин свой виджет и его тупо подставлять в ",
{
"type": "code",
"text": "body"
},
" через переменную типа \"виджет\", которую менять сет-стейтом?"
]
Ivan
можно пушем, можно индексед стеком
Flow
под каждый экран делай разный Scaffold лол
Flow
в качестве root виджета
admin
Но дравер должен быть один у них
Ivan
так ты сделаешь его как виджет
Ivan
и в каждом классе будешь переиспользовать
admin
Не, сорри, звучит не логично, это выход из вложенности и бесполезная редупликация, логичнее ведь один скаффолд рутовый, по нажатию на драверные пункты менять бади этого рутового скаффолда
Ivan
ну если хочешь сделать так, как написал выше, то юзай индексед стек и заменяй пейджи в зависимости от индекса
Ivan
индекс сетишь по тапу в дравере
Ivan
один общий бади и массив скаффолдов (они же пейджи)
admin
Окей спасибо, я погуглю. Отпишусь если получится
EcsFlash-
у кого нибуть в проекте была куча однотипных экранов? если да, то как вы реализовывали их заполнение?
Derek Z
Добрый день. Вопрос по flutter, не нашел внятного ответа в сети. Скажите есть ли весомые причины не использовать SVG в виде иконок. Вроде как это влияет на производительность, но конкретных прцфов не нашел
Daniil Kolyasnikov
Какого рода экраны ?
Daniil Kolyasnikov
Формы ?
EcsFlash-
Я не знаю как описать по-человечески, но вот сейчас скину скрин, вот таких экранов будет огромная куча
Владимир Калашников
Кто-то знает, можно ли при вызове функции получить время ее исполнения?
Владимир Калашников
Допустим у меня есть функция
Владимир Калашников
И я хочу показывать в процентах, сколько осталось до конца завершения
Павел Середа
так это изначально считать нужно
Павел Середа
для выведения индикатора прогресса остаточное время всегда подсчитывается изначально
Владимир Калашников
В питоне есть библа, которая делает это по ходу выполнения функции. Во флаттере не знаю
Владимир Калашников
Смысл индикатора прогресса тогда, если функция уже будет завершеной
Павел Середа
вы там совсем уже со своим питоном? это невозможно технически! Представьте что вы вызывается запрос к БД в теле вашей функции, питон подсчитать время выполнения запроса никогда в жизни не сможет, поскольку это будет зависеть от кучи факторов: от нагруженности диска в данный момент времени, от сложности запроса, от объёма данных и т.п. Думайте пожалуйста своей головой
Дмитрий Коноферчук
некогда думать, она занята питоном)
Дмитрий Коноферчук
чтобы считать %% нужно знать начальное и конечное значение, а уж как "тикать" %% дело десятое можно конечно на ходу менять начальное и конечное значение, но тогда надо под новые значения подстраивать и текущее
Дмитрий Коноферчук
не зная изначально конечное значение можно только эмпирически высчитывать текущее
Владимир Калашников
Согласен, тупанул
Владимир Калашников
Тогда всё-таки какой смысл прогресс индикатора, если мы узнаем время исполнения только по завершении?
Дмитрий Коноферчук
дать хоть какое-то "движение" пользователю, чтоб ему не скучно было))
Владимир Калашников
Просто как прога на винде понимает, сколько осталось до конца установки?
Андрей Козак
Запихай контент в маркдаун. И подключи Лиду какую нить для рендера
Дмитрий Коноферчук
зачастую делают конечное значение на статистике предыдущих использований и его подсовывают, примерно так работает процент копирования в винде
Дмитрий Коноферчук
так и считает на основе уже кем-то собранной статистики
Владимир Калашников
Понял
Владимир Калашников
Мне просто нужно расшифровать файл, который выбрал пользователь, и я хотел бы показывать, сколько осталось до конца
DmitryL
Она прогресс не по времени показывает, а по количеству установленных файлов. Или по их размеру или еще как-нибудь так. Конечное количество заранее известно.
tanos19
Можно игру с динозавриком вставить)
|