Программирование : Dart & Flutter по-русски
Adel Gilyazeev
Мб замыкаешься на них? Через всякие асинхронные функции
Adel Gilyazeev
А как ты их генеришь? Сразу списком огромным?
Adel Gilyazeev
Мб глобальные ключи используешь, или клбчи через объекты
Дмитрий Щербаков
Бесконечный список и билдер
Дмитрий Щербаков
Чота тут не то)
Adel Gilyazeev
Ну хз, всякое может быть
Дмитрий Щербаков
Он повторяется или ты с сети подгружаешь по ходу скрола?
Дмитрий Щербаков
cacheExtent не менял?
Adel Gilyazeev
Ну если видео и фото говорит, может и с диска/кеша
Григорий
По ходу скрола подгружаю
Adel Gilyazeev
А есть асинхронные списки? Которые вместо элемента, пока он не загружен рисовать плейсхолдер? Или каждый элемент во фьючерБилдер обернут?
Adel Gilyazeev
О мб в последнем дело
Дмитрий Щербаков
Нужен код)
Григорий
Не, у меня streambuilder он просто грузит и column фото или видео и описание к нему
Adel Gilyazeev
Как грузит?
Дмитрий Щербаков
В колонку?
Adel Gilyazeev
Стрим билдер поверх листа? Или внутри на каждый элемент?
Adel Gilyazeev
Ну это у него элементы внутри сгруппированы я так понимаю
Adel Gilyazeev
Хорошо сказал)
Григорий
И в нем элементы
Adel Gilyazeev
То есть у тебя СтримБилдер - Лист - [колонки с данными]?
Григорий
Я пробовал удалять которые уже посмотренные но тогда лист прыгает
Дмитрий Щербаков
Может надо наоборот лист билдер а внутри стрим
Adel Gilyazeev
И у тебя стрим получает листы с элементами?
Adel Gilyazeev
Так не удаляй начало списка, а элементы сами удаляй
Adel Gilyazeev
Чтобы по первым индексам вместо данных были null
Григорий
Хорошо, спасибо, попробую
Дмитрий Щербаков
[
"Flutter: Creating a ListView that loads one page at a time | by AbdulRahman AlHamali | SAUGO 360 | Medium\n",
{
"type": "link",
"text": "https://medium.com/saugo360/flutter-creating-a-listview-that-loads-one-page-at-a-time-c5c91b6fabd3"
}
]
Дмитрий Щербаков
Вот ещё прикольно сделано "постранично"
Adel Gilyazeev
Советую всё таки внутри позапихать фьючер билдеры
Adel Gilyazeev
Вместо внешнего стрим билдера
Adel Gilyazeev
И шоб фючеры по индексу лист билда создавались на загрузку необходимых тебе элементов
Григорий
То есть проблема не в большом количестве фото и видео, а в том что их сразу все грузит?
Adel Gilyazeev
[
"Типа Image.fromUrl('",
{
"type": "link",
"text": "http://example.com/$index"
},
"');"
]
Adel Gilyazeev
Нет, в том что ты новые погруженные добавляешь к старым
Adel Gilyazeev
И у тебя этот список растёт
Adel Gilyazeev
И более того, ты его при погрузке пересоздаешь
Adel Gilyazeev
Хотя я хз как ты реализовал загрузку от скролла
Adel Gilyazeev
А так у тебя билдер в листе не будет вызывать функцию билдера с индексами элементов которых не видно
Adel Gilyazeev
А те которые перестали быть видимыми он удаляет из дерева виджетов, соответственно и все объекты которые были связаны только с тем виджетом
Григорий
Спасибо большое!
Adel Gilyazeev
Билдер создаёт виджет по индексу, тут же можешь и данные связать, либо процесс получения данных типа через фьючера, этот фьючер будет связан с фьючербилдером если ты его прям тут будешь создавать, и если у тебя фьючерБилдер уйдет раньше чем успеет обработать запрос, то так как ссылка на фьючер из фьючербилдера была потеряна в связи с удалением из памяти построено, а системная ссылка через получение данных осталась, то он исчезнет после получения данных с самими данными из памяти
Adel Gilyazeev
Если у тебя этот фьючер где-то зависнет в памяти, то и его полученные данные зависнут
Adel Gilyazeev
А если фьючер ещё не создан, как для невидимых элементов, то ну ты сам понимаешь, никакого запроса никаких данных, ничего
Adel Gilyazeev
Это вот как раз и надо чтобы теперь несколько ближайшее к она просмотра невидимые виджеты никуда из памяти не девались, в случае если ты проскпрлишт вниз и потом вверх, то верхние могут начать пересоздаваться, так как ранее были удалены из за маленького значения cacheExtent, и пользователю придется ждать повторного получения данных для ранее видимых виджетов
Adel Gilyazeev
В джс есть утечка когда ты создаёшь огромные строки, а хранишь только их маленькие кусочки, то на самом деле у тебя в памяти вместо маленьких кусочков, будет храниться те самые огромные строки, ну и объекты которые указывают где надо и конец маленького кусочка
Adel Gilyazeev
Как в дарте с этим обстоит, хз
Adel Gilyazeev
Хотя тут такого быть не должно
Adel Gilyazeev
Тут строки это прям отдельные константные наборы байт
nikto _b
Учитывая что работает это на жвм, видимо также как и с жавой - строка динамически ширится при заполнении
Adel Gilyazeev
Я про то что метод substring в жс даёт не новую строку а ByteView, для немаленьких кусков порядка десятка символов и больше
Adel Gilyazeev
[
"То что ",
{
"type": "code",
"text": "var f = 'hello world'.susbtring(1,5)"
},
", в джс в памяти будет хранить не ",
{
"type": "code",
"text": "'ello'"
},
", а весь ",
{
"type": "code",
"text": "'hello world'"
},
" из за того что в ",
{
"type": "code",
"text": "f"
},
" указатель на него и пару 1,5"
]
Adel Gilyazeev
Там есть три метода излечения, типа split+join, или toJson+fromJson, и ещё какой-то
nikto _b
Хотя и прикольно
Adel Gilyazeev
Всё ради оптимизаций
nikto _b
[
"Т.е. если я сделаю так\n",
{
"type": "pre",
"text": "\nvar s = \"shit\"\nvar v = s.substring(2,3)\ns = \"java\"\n",
"language": ""
},
"\nТо в ",
{
"type": "code",
"text": "v"
},
" будет ",
{
"type": "code",
"text": "va"
},
"?"
]
nikto _b
Или просто в s перезапишется указатель?
nikto _b
А если мы сможем мутировать s?
Adel Gilyazeev
Но "shit" сам по себе из памяти никуда не денется
Adel Gilyazeev
Хотя в этом примере исчезнет
nikto _b
Или у жеса строки иммутабельны?
nikto _b
Какой-нибудь replace, не знаю Не жесник
Adel Gilyazeev
Мгм, как и в дарте)
Adel Gilyazeev
Новую строку создаст
nikto _b
У дарта там черт пойми что по иммутабельности
Adel Gilyazeev
Строка это константа (немодифицируемый набор байт)
nikto _b
Тогда звучит ± безопасно
Adel Gilyazeev
Так строка это не лист
nikto _b
Ну, если мы говорим о константых строках, не?)
Adel Gilyazeev
И там и там строки это одинаковые сущности
Adel Gilyazeev
Хотя на счёт жс не уверен
nikto _b
Т.е. это по сути char[] с постоянной длиной?
Adel Gilyazeev
Там мб всё таки можно строку как нить мутировать обходя запреты иммутабельности
nikto _b
Который не реаллочится
Adel Gilyazeev
Это Uint8List, либо Uint16List
nikto _b
Надо будет покопаться под капотом
Adel Gilyazeev
Который не модфицируемый
nikto _b
Да, важное замечание
Adel Gilyazeev
В дарте в основном широкие 16битные данные под символы, а как синглбайт строку создать я не понял, но в дебагере Дарта этот тип встречал
Adel Gilyazeev
Это жс код, а не дарт, дарт скорее всего таким не страдает
nikto _b
Ну суть я уловил, да, прикольно Ждём когда иммутабельные листы в мастер завезут?)
Adel Gilyazeev
Сча глянем в дартпаде, с телефона))
Adel Gilyazeev
Что? Есть же
nikto _b
Это сторонний пакет
nikto _b
[
"есть похожее в dartz - ",
{
"type": "code",
"text": "Either\n\n"
},
{
"type": "link",
"text": "https://pub.dev/packages/dartz"
},
"\n\n",
{
"type": "link",
"text": "https://medium.com/@cb.yannick/a-small-monad-library-for-dart-flutter-project-e49b71205bd0"
},
" (2-й пример)"
]
nikto _b
Прикол функциональщины же в том что ее оптимизируют до скоростей императивщины в момент сборки
nikto _b
А это - просто чистота кода за счёт скорости работы
nikto _b
Притащил я как-то раз ФП в старую жаву...
nikto _b
А потом ресурсы закончились
nikto _b
Не, я тоже быдло Но больше мем в ФП там где нельзя
Adel Gilyazeev
[
"В дарт паде невозможно с телефона что либо делать\n\n",
{
"type": "pre",
"text": " \nimport 'dart:async';\nmain() {\n var s = Stream.fromIterable([1,2]);\n s.listen(print);\n s = Stream.fromIterable([3,4]);\n \n\n\n\nString memoryLeak() {\n\n final huge = \"\".padLeft(256*1024*1024, 'x'); // 256МБ строка\n\n final small = huge.substring(0,256); //Маленький кусочimport ;\n \nreturn small;\n\n}\n\nvar arr = [];\n\nvar t = Timer.periodic(\n Duration(seconds:1),\n (e){ //Каждую секунду добавляем 25 байт или 15 мегабайт?\n\n final str = memoryLeak();\n\n //str = clearString(str);\n\n print('Добавляем памяти:' + str.length.toString() + ' байт');\n\n arr.add(str);\n\nprint('Текущая память страницы:' + (arr.length*256).toString()+' байт');\n\n});\n \n }",
"language": ""
},
""
]
Adel Gilyazeev
Вставить, выполнить, наблюдать за памятью в течении минуты
Adel Gilyazeev
Превосходно))
Adel Gilyazeev
Чем меньше размеры делаю, тем реже ошибка выпадает
Eldar
Ребя кто знает какой у Card shadow? Нужно подогнать для Container'a
Константин Бобров
в stateful виджете есть какое-нибудь системное событие, что страница полностью отрисовалась для начала подгрузки данных?
Andrew Shalaev
Может вам надо чекать свойство mounted?
Константин Бобров
возможно. Спасибо
MiT
Лучше сначала в поддержку написать и узнать, так как многие платежные шлюзы разрешают использовать свой сервер для обработки, но с определенными условиями безопасности. Наверняка они запретят передавать открытые данные карты, только зашифрованные (RSA)
MiT
Я бы все же посмотрел в сторону нативного SDK. Или даже реализовал бы SDK на flutter
MiT
[
{
"type": "mention",
"text": "@bunopus"
}
]
Kherel
понимаю, сроки немного жмут. спасибо за информацию.
ilx13
Тип String сколько символей может в себе держать? Проблема в том что у меня 260кб текста нужно хранить временно где-то. String подводит тут. Какие есть варианты?
Pavel Erokhin
Обычно максимальная длинна строки равна Int.MAX_VALUE
Pavel Erokhin
Обычно в языках строка представлена как наследник чар сиквенса какого-нибудь где в итоге это все в массиве храниться, дальше простой вопрос, какая макс длинна массива?))
ilx13
есть аналоги стринга?
Pavel Erokhin
И обычно длинна массива равна Int.MAX_VALUE
Pavel Erokhin
Не знаю, у меня не было такой проблемы и вряд-ли будет
Pavel Erokhin
я думаю 260КБ это ничто для строки, не парься
Pavel Erokhin
Почему кстати подводит, это копеечный размер
ilx13
а вот урезает начало текста. там миллионы символов
ilx13
тока конец остается
Pavel Erokhin
Миллионы символов и 260кб?
Pavel Erokhin
я сгенерировал файл размером 571КБ и у меня всего 568385 символов получилось
Pavel Erokhin
нагенерировал спиздив текст лицензий, не знаю как у тебя получилось 260кб и миллионы символов
Pavel Erokhin
да даже 10 миллионов символов это ничто для строки, спокойно вместит
Дмитрий Щербаков
utf-8, размер символа от 1 до 6 байт. расчехляйте калькулятор
ilx13
ну я так сходу миллионы сказал не считал конкретно)
Pavel Erokhin
даже при 1 байт символе, миллион займет один мегабайт)
ilx13
то есть проблема не в нем?
Pavel Erokhin
Не в нем, а откуда ты строку эту берешь, в смысле ее контент
Pavel Erokhin
проблема при доставке строки, больше чем уверен
Pavel Erokhin
из сети, из локального хранилища, не важно, проблема точно в этом, либо в рантайме чет делаешь такое, что строка поганиться
ilx13
String musor; socket.listen((List event) async { musor = await CharsetConverter.decode("windows1251", event); });
Pavel Erokhin
Хм, а зачем windows1251, должна быть весомая причина чтобы конкретно такую кодировку использовать
Pavel Erokhin
Может проблема кроется как-раз за этим
ilx13
с остальными кирилица отображается как «?» с утф8 тоже
Pavel Erokhin
Не должно, а ты через что смотрел, что вопросики видел?
Pavel Erokhin
Может в бэке проблема
ilx13
лог самого флаттера так показал
Pavel Erokhin
А лог где смотришь? Может в аутпуте просто так получается, что вопросики
Дмитрий Щербаков
Так погоди
Pavel Erokhin
У меня такое у самого было)
ilx13
может быть. но бэк заказчик не будет менять. у него там все кошмарно колхозно, но работает как то
Дмитрий Щербаков
Дэв консоле в логе что-ли строка обрезается?
ilx13
кстати да. тогда щас с утф8 попробу.
Дмитрий Щербаков
Принт имеет ограничение
ilx13
при print(musor); не обрезается
Дмитрий Щербаков
Ты через стринг.length
Pavel Erokhin
ты в консоли не смотри, попробуй с этой строкой чет сделать, или вывести в файл строку, и потом через вс код открой), ну точно не в этом проблема
Дмитрий Щербаков
Проверяй
Дмитрий Щербаков
Или да в файл пиши
Дмитрий Щербаков
Или в буфер
Дмитрий Щербаков
Так с буфера можно принтить посимвольно ??
Дмитрий Щербаков
Проще проверить через количество символов
Дмитрий Щербаков
Длину строки
Дмитрий Щербаков
Совпадают значит ок
Илья Маненков
Ребят кто нибудь дась хелпу, как можно разделить круг на такие части в CustomPainter, либо хотя бы как загуглить это
Daniil Kolyasnikov
[
{
"type": "link",
"text": "https://www.kevlatus.de/blog/making-of-flutter-fortune-wheel"
}
]
Daniil Kolyasnikov
центр можно обрезать через настройку сегментов(их центр) или через наложение круга поверх сегментов
Аманжол Умурзаков
Кто-нибудь знает, как ловить onbackground message на ios и android? не могу найти рабочее решение
Daniil Kolyasnikov
firebase ?
ilx13
в консоле с print(musor) все выводится от начала до конца. а при int first = musor.indexOf(' '); находит -1
Vyacheslav
Всем привет! Разбираю код, подскажите про такую конструкцию: userNameStream = login; Как можно присваивать стриму значение типа String?
MiT
Добавь лог тут и смотри сколько тебе пакетов отправили
MiT
[
"А хм ",
{
"type": "code",
"text": "musor = await …"
},
", ты точно все правильно делаешь?)"
]
ilx13
правильно поставили вопрос.
ilx13
спасибо сейчас попробую
ilx13
[
"вот это зарешало. Благодарен вам всем ",
{
"type": "mention",
"text": "@mit_73"
},
" , ",
{
"type": "mention",
"text": "@mairwunnx"
},
" , ",
{
"type": "mention",
"text": "@eshxe"
},
""
]
ilx13
у меня частично перезаписывалась строка мусор
MiT
И используй StringBuffer
Alexander
Нужен Flutter разработчик для создания мобильного приложения используя API с таким функционалом: - Регистрация/Авторизация - Профиль (редактирование) - Кнопка на главном экране Так же при выполнении задачи возможно дальнейшее сотрудничество в поддержании данного проекта. Подробности и обсуждения стоимости в личные сообщения.
Alexander
Ой, эт в вакансии нужно было кинуть, а не сюда?)
MiT
[
{
"type": "mention",
"text": "@dartlang_jobs"
}
]
Evgenii Elchev
когда даже вакансию сложно составить) нужно сделать каких то не известно каких три экрана, преположительно там будут поля ввода и кнопка)
Дмитрий Щербаков
Цену в директ ??
Alexander
Поэтому я и попросил в лс писать
Andrey
Почему могут фотографии не грузиться в Image network, ошибок никаких нет
Adel Gilyazeev
Ручками считать координаты точек, и строить либо окружность с толстой шириной границы, или два круга, и белые линии как разделители, либо рисовать полигоны
Adel Gilyazeev
Если не знаешь как считать координаты, читай Вики про тригонометрические функции
Andrey
И так во всем приложении
d
не уверен но контейнер возможно перекрывает изображение
Andrey
Нет, работало, просто все эмуляторы перестали загружать изображения, не могу понять почему, ошибок нет, на телефоне не могу проверить
d
ну а само изображение по ссылке грузится?
Adel Gilyazeev
У тебя анализатор нигде не ругается?
Andrey
Да, их много в приллжении и ниодно не грузится
Adel Gilyazeev
Ибо я вижу отсутствие работы форматировщика
d
ну можно попробовать загрузить какую-то картинку из гугла которая загрузится наверняка и дальше уже от этого отталкиваться в какую-либо сторону
Andrey
У меня картинки из разных источников, которые через браузер моментально загружаются и в приложении тоже загружались, но в какой-то момент перестали
Adel Gilyazeev
А то что он типа её грузит, показывает?
Andrey
Индикатор загрузки я не успеваю увидеть, сейчас принтану, посмотрю
EcsFlash-
господа, почему так?
Adel Gilyazeev
Можешь принт в обоих местах поставить в билдере индикатора
|