Программирование : Dart & Flutter по-русски
Serhei
да, вы правы, работает отлично.
Serhei
тоже так считаю, это чисто эксперимент. Спасибо за помощь)
???????
Если ищите прикольных патернов, то мне всегда нравился карбон :3
???????
[
"Естественно таким же макаром надо пережать.\nРазмер 1024х768 и меньше выставляйте, пережимайте потом на этом ресурсе: ",
{
"type": "link",
"text": "https://squoosh.app/"
},
"\nС помощью MozJPEG если жпегу, OptiPNG, если PNG (также уменьшайте паллитру)"
]
???????
Это фон, даже если он весь в артифактах и 640х480 будет - никто не заметит, на крайней случай, картинку уже в самом приложении можно будет заблюрить)
Serhei
да, это все понятно, дело техники) за ссылку спасибо
???????
[
{
"type": "pre",
"text": "(new) BottomNavigationBar({Key key, List items, (int) > void onTap, int currentIndex: 0, BottomNavigationBarType type, Color fixedColor, double iconSize: 24.0}) > BottomNavigationBar",
"language": ""
},
""
]
???????
Я так понимаю, ты с локализацией чтото придумываешь?
???????
[
"Или у тебя он не из ",
{
"type": "code",
"text": "import 'package:flutter/material.dart';"
},
" берется"
]
???????
[
{
"type": "link",
"text": "https://flutter.dev/docs/development/ui/widgets/cupertino"
},
"\nЯ, чегот, вообще не вижу боттом на бар"
]
???????
У меня IDE, по крайней мере не ругается
???????
Или в каком месте оно должно начать возмущаться?
???????
Эм, а это вообще законно?
???????
[
"Оно хочет:\n",
{
"type": "code",
"text": "Static type: CupertinoTabBar"
},
""
]
???????
А ты совершенно другое ему скармливаешь
???????
По моему, ты чтото не то делаешь)
Alex Adrianov
В какой контейнер можно поместить CachedNetworkImage, чтобы закруглить края?
Daniil S
в обычный контейнер
Daniil S
а картинку использовать как декарацию
Alex Adrianov
Сяп, там через provider
Eugene
как шрифт будет работать везде
Eugene
единственное что может отличатся способ сглаживания
???????
Ну малоли какие подводные камни)
Eugene
собственно это один из самых распространенных способов в веб-дев юзать svg монохромные когда появилась возможность интегрировать полноценно свои шрифты
Eugene
[
"наверное самый известный в мире комплект шрифта-иконок ",
{
"type": "link",
"text": "https://fontawesome.com/?from=io"
},
""
]
Eugene
с обрезкой действительно могут быть проблемы но это все решаемо, при создании шрифта сделать размер страницы под иконку(строго желательно квадрат иначе гемор, но редко когда межбуквенное растояние важно для иконок...) и далее все вписывать в этот размер
Eugene
например в inkscape есть встроенные тулзы для создания шрифта где можно сделать разбивку побуквенную для символов(нажал B — иконка1, b — иконка33 и тд)
???????
В ворованном иллюстраторе такое есть?)
Eugene
возможно через плагин но не уверен, а по поводу ворованного так сейчас у них более чем доступный тариф помесячный какой смысл заморачиваться))
???????
А в работе оно мне не надо)
???????
Как буду этим копеечку зашибать - обязательно куплю. А сейчас, считаю, что у меня тариф "для учебных заведений" :3
Eugene
[
{
"type": "link",
"text": "https://design.tutsplus.com/tutorials/how-to-create-a-font-in-adobe-illustrator--cms-25921"
},
"\n",
{
"type": "link",
"text": "https://design.tutsplus.com/tutorials/how-to-create-a-font-using-fontself-and-fontforge--cms-25923"
}
]
???????
Пасиб, утощил все ваши сообщения себе в сохраненное :3
Eugene
обращайтесь, у меня за 15 лет в индустии уже рука набита, могу поделиться опытом при необхожимости ))
Aleksey Chumikov
[
{
"type": "link",
"text": "http://fontello.com/"
}
]
Bohdan Martynov
Господа, подскажие плиз как правильно валидировать поля с помощью bloC архитектуры? Есть ли какие-то примеры? Так же нужно когда ошибка приходит с сервера для какого-то поля (типо email уже используеться), показывать эту ошибку для соответсвенного TextField.
???????
Блок возвращает статус В зависимости от полученного статуса выводите тот или иной виджет
???????
[
{
"type": "pre",
"text": "try {\n if (event is PublicationsFetch) {\n yield LoadingBBS();\n fetchList = await _repository.publicationsFetch(pagination: _nextPage).timeout(Duration(seconds: 30));\n yield LoadedBBS();\n }\n} catch (err) {\n if (err is TimeoutException) {\n yield ErrorBBS(text: \"Превышено время ожидания запроса.\");\n } else {\n yield ErrorBBS(text: err.toString());\n }\n}\n\n",
"language": ""
},
"Вот пример, как я делаю запрос к серверу, если он не завершается за 30 секунд или возникает ошибка - возвращаю ошибку"
]
???????
И вывожу такой вот виджет:
???????
[
"Настало время идиотских вопросов.\n\nЕсть длинный список и есть короткий список.\nНадо в длинный список добавить короткий.\nНо так, чтоб не повторялись значения.\n\nНужен вариант наиболее элегантный и что самое главное - быстрый (менее требовательный к ресурсам и количеству иттераций).\n\nВот мои предложения:\n",
{
"type": "pre",
"text": "// 1 способ\nlist.forEach(fetchList.remove);\nlist.addAll(fetchList);\n\n// 2 способ\nlist.addAll(fetchList);\nlist.toSet().toList();",
"language": ""
},
"\n\nКейс самый, что ни на есть популярный:\nполучение некой таблицы данных с пагинацией."
]
First Last
[
{
"type": "mention",
"text": "@bunopus"
},
" ",
{
"type": "mention",
"text": "@AnokhinAnton"
}
]
First Last
В списке какой тип лежит?
???????
Сложный объект. Но хэш задаю ему ручками
???????
[
{
"type": "pre",
"text": " @override\n operator ==(Object p) {\n if (p is Publication)\n return this.id == p.id; // identical(this, p)\n else\n return false;\n }\n\n @override\n int get hashCode => this.id;",
"language": ""
}
]
First Last
[
"Ну ты вон с ",
{
"type": "code",
"text": "Set"
},
" сам на свой вопрос ответил"
]
???????
Я не хочу хранить значения в Set, тк мне нужны индексы в списке
???????
а у сета нет индексов (или я туповат)
???????
Собственно List используется для построения ListView.builder
Serhei
Товарищ, что вас так насмешило?
Alexey Beloded
Ребята, добрый вечер, подскажите плиз, как решить задачу. У меня есть в виджете row, в котором 3 expanded с текстами. Нужно добавить к expanded границу, тобишь обводку черной линией, причем чтобы граница шла именно по expanded, включая пустое пространство между текстом
???????
А завернуть экспандед в контейнер?
Alexey Beloded
Не могу expanded поместить в элемент с decoration чтобы границу прописатт
Alexey Beloded
Нельзя его в контейнер класть, ругается
Анатолий
Это первый бан в группе?
Evgeny Kot
Нет, и боюсь не последний :-(
Анатолий
Ну да, чем больше группа, тем больше волны
Александр
Ох уж эти дивергенты
Анатолий
Да банят в основном за оскорбления и гадости словестные
???????
Я сам еще дико путаюсь во всех этих контейнерах. Тебе надо границу у каждого экспандед или вокруг всех?
???????
Экспандед, вроде как, надо, по хорошему, не в Row, а в Flex убирать.
???????
Но я сам дурашка и меня слушать не обязательно)
???????
А внутрь каждого по контейнеру засунь
???????
[
{
"type": "pre",
"text": "Flex(\n direction: Axis.horizontal,\n children: [\n Expanded(\n child: Container(\n decoration: BoxDecoration(),\n ),\n ),\n ],\n )",
"language": ""
}
]
Alexey Beloded
Пробовал, тогда обводка идет по вложенному элементу в экспандед игнорируя пустое пространство
???????
я понял твою беду
???????
Контейнер занимает все свободное место, если что. Можешь цветами раскрасить, мне это помогает)
Maria
а какое пустое пространство между экспандет?
???????
[
"Попробуй ",
{
"type": "code",
"text": "Stack"
},
""
]
???????
По идее с помощью него рисовать одно под другим
Alexey Beloded
Пустое пространство внутри экспандед
Maria
в стандартном случае все должно работать с контейнерами внутри
???????
[
"Кстати да, пустое пространство между экспандед заполни ",
{
"type": "code",
"text": "Spacer"
},
""
]
Maria
не должно быть там пустого пространства. Это ж Экспандет. Он занимает сам свободное пространство, в этом его цель и предназначение??
Alexey Beloded
У меня один из экспандед может занимать несколько строк, а другой одну строку, в таком случае пустое просиранство есть
???????
[
{
"type": "pre",
"text": "Flex(\n direction: Axis.horizontal,\n children: [\n Expanded(\n child: Container(\n decoration: BoxDecoration(),\n ),\n ),\n Spacer(),\n Expanded(\n child: Container(\n decoration: BoxDecoration(),\n ),\n ),\n ],\n);",
"language": ""
}
]
???????
Спейсер, по идее, заполнит пространство между ними
Alexey Beloded
Я сейчас скину скрин с сутью беды, а то вы не совсем поняли
Alexey Beloded
3 экспандед содержит текст с большим количеством строк, чем первые 2 и в первых двух есть пустое пространство
Alexey Beloded
Тут вложенный контейнер с границей
Alexey Beloded
Вот мне нужно, чтоб граница покрывала пустое пространство в первых двух
Maria
каждый row оберните в контейнер, и все это в expanded
Alexey Beloded
Не помогает
recvec
[
"Доброго вечера!\nВпервые работаю с Google API.\nХотел бы спросить, каким образом можно работать на Flutter с Google Photos API, если его еще нет в списке поддерживаемых (",
{
"type": "link",
"text": "https://pub.dartlang.org/packages/googleapis"
},
")?\nКак я понял после авторизации (доступна в списке) чтобы получить желаемые фото отправляются специальные get-запросы в которых указываются ключи и заголовки аутентификации, полученные ранее, но каким образом обрабатывать полученный json оптимальнее?\nСпасибо."
]
Олжас Сулеймен
есть еще вариант list.followedBy(fetchList).toSet().toList();
???????
Офигенно, дома гляну метод
???????
Во флатере есть виджет таблицы, если что)
Alexey Beloded
Да, я только что table попробовал, все хорошо, просто думал без него обойтись:)
???????
Это вы и ваши контейнеры :3
???????
json в map, map в конструктор объекта. С фотос апи не работал, но вероятно вам предварительно надо попросить пользователя пройти implisit oauth2 с достаточным scope, получить access token и им уже взаимодействовать с картинками пользователя.
Azamat Mullabaev
Сортировка по ид? Или то что в коротком просто в хвост летит?
???????
Без сортировки, добавлять в хвост
???????
Вот представь, ты пагинацией идешь по наборам данных. Обычно на сайтах так данные постранично выводятся.
???????
Но если за время между загрузкой первой и второй страницы добавится 1 элемент в начало, то вторая страница будет начинаться с последнего элемента первой)
Azamat Mullabaev
Думаю во втором варианте порядок не сохранится
Azamat Mullabaev
Редюсер мб какой поискать
???????
[
"Я пока вот так сделал:\n",
{
"type": "code",
"text": "list.forEach(fetchList.remove);\nlist.addAll(fetchList);\n\n"
},
"Завтра добавляю раз в дцать минут перезагрузку первой страницы и такимже способом добавление в начало."
]
???????
Ничего лучше придумать не могу)
Анатолий
Обычно над этим не парятся ??
Ilia Kurtov
Сохранится, тк .toSet() внутри создает LinkedHashSet
???????
Ну это не чтоб копеечку сделать, а чтоб ручки выпрямить, виджетами разжиться и все такое :3
Ilia Kurtov
Исходники наше все )
Анатолий
Твоим подходом теоретически может быть вариант что вторая страница вернет 0 элементов, тоже не прикольно. Если очень хочется честную пагинацию, используй айдишники в запросе
???????
0-3 элементов - в списке по прежнему не будет новых элементов и он попросит еще
Анатолий
Оке, не ноль, один
Анатолий
Выглядмт так же как дубликат, тока с другой стороны ??
???????
Пользователь посмотрит 1 и пойдет дальше грузить
???????
Если что, мой дополнительный челендж - информация с сайта без api
???????
И в кодировке win1251
Mike Dark
Где-то в гугле лежит аккуратная функция для дарта decode1251...
Mike Dark
когда-то нашел, где-то лежит...
Олжас Сулеймен
Может запилите кодек
Eugene
ой это фигня а вот: 1. сайт без api 2. в кодировке utf-8 3. содержит html файлы с текстом в кодировке win-1251 и koi8-r одновременно с метой utf-8 4. с кусками кода с комментами: я не знаю зачем это нужно но если это удалить то все падает нахуй
Artyom Nesterenko
[
"Flutter ?? Unimodules – Exposition\n",
{
"type": "link",
"text": "https://blog.expo.io/flutter-unimodules-bb66b9bf21de"
},
""
]
???????
Если это про бэк и комментарии вида То возможно оно надо для рендеринга страницы. Тк найти и заменить строку быстрее и менее требовательно, чем строить DOM. Но это фигня, да, сам факт рендеринга страницы на сервере - только если от безисходности.
Azamat Mullabaev
это обычно для индексации поисковиками
Eugene
нееее там все было очень криво перемешка статики и php вставки + очень много легаси от разных разработчиков, проект стартовал в 97 году и менялся без рефакторинга по сей день, а на тот момент был год 2007 наверное...
???????
Очень похоже на то, что парсю сейчас я) Страница с 51 элементом весит 500 кб. Поэтому сильно заморачиваюсь с архитектурой.
???????
А еще запрос может зависнуть и остаться без ответа, например)
???????
[
"Такую бедосю я отлавливую так:\n",
{
"type": "pre",
"text": "List fetchList = await _repository.publicationsFetch(pagination: this._nextPage).timeout(Duration(seconds: 10));",
"language": ""
},
"\nЕсли репозиторий не возвращает данные в теечении 10 секунд - вываливаю экспешен, блок возвращает статус ошибки, а на форме выводится виджет с ошибкой и кнопкой \"попробывать еще раз\""
]
Олжас Сулеймен
а есть что чем потестить бек, статус коды хедеры общий перфоманс?
Олжас Сулеймен
или общее принятый чек лист
???????
Ну на бэке должны быть свои тесты написаны.
???????
Наверн, банально get запросики поделать.
Олжас Сулеймен
да не про это, например кодга при каких ситуацияю что и как возвращается
???????
Когда свой бэк делаю (на 1с), то делаю пару сугубо вспомогательных методов. Например: api.domain.tld/test - возвращает в json все переданные заголовки и параметры тем или иным способом
???????
Вообще коды ответа стандартные лучше использовать, тогда и вопросов возникать не будет)
Олжас Сулеймен
да пишу свой бек думал выкатить, чтоб с общими стандартами и тд тп etc
???????
А, ну так просто в гугле вбей: "http response code"
???????
Насчет тела, могу показать как проектирую я)
Олжас Сулеймен
да с этим все норм
Олжас Сулеймен
http спеки курить чтоль
???????
[
"Тело я оформляю таким макаром:\n",
{
"type": "pre",
"text": "{\n \"success\": true,\n \"code\": 200,\n \"errorText\": \"\",\n \"data\": [\n {\n \"date\": \"2018-01-01T00:00:00+03:00\",\n \"description\": \"Праздник\",\n \"isWorkday\": false\n },\n {\n \"date\": \"2018-01-02T00:00:00+03:00\",\n \"description\": \"Праздник\",\n \"isWorkday\": false\n },\n]",
"language": ""
},
""
]
???????
Но, но, но. Стоит учитывать, что если у тебя код ответа не 2ХХ - тело может быть запросто заменено веб сервером (особенно, если его какойнить еблан настраивал)
???????
Поэтому ошибку я еще дублирую в заголовках ответа)
Олжас Сулеймен
вот про это как раз
???????
[
{
"type": "link",
"text": "https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP"
},
"\n\n",
{
"type": "link",
"text": "https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE%D0%B2_HTTP"
}
]
Олжас Сулеймен
а есть утилиты который кормишь путями с примерным ответом и отвечает что неправильно
???????
Отличнейшая тулза как по мне
Олжас Сулеймен
а он умеет проверять на валидность?
Karen
зачем статус код в json?
???????
Для удобства, очевидно
???????
Тебе пару байт жалко?
Олжас Сулеймен
ну я просто пихаю message
???????
[
"Ну я всегда возвращаю такую структуру:\n",
{
"type": "pre",
"text": "{\n \"success\": true,\n \"code\": 200,\n \"errorText\": \"\",\n \"data\": null\n}",
"language": ""
},
""
]
???????
При любом раскладе будут эти 4 поля (если веб сервер не заменит)
???????
[
"Тобишь, если взаимодействовать с моим api, в идеале надо глянуть в заголовки и найти там: ",
{
"type": "code",
"text": "Content-Type >application/json; charset=utf-8"
},
""
]
???????
Но по опыту, фронтэндеры на все мои старания ложат хуяку)
Олжас Сулеймен
нет чтоли таких утилит например такой то путь должен возвращять страницу\файл\картинку, пипшеш бек с такими требованиями и он смотрит что и как бек возвращает объект контет типы, размер и тд
???????
Яж сказал postman
Azamat Mullabaev
это для проверки, а для генерации доки свагер
Azamat Mullabaev
мониторинг настроить хочешь?
???????
Если тебе имено автоматическая проверка, типа wathdog'а - наверняка должно быть, но яб сам написал. http get есть на любом языке (а можно просто яндекс метрику пристегнуть)
Олжас Сулеймен
да не вот например я написал бек с теми требованиями и забыл реализовать content type возвращаемого результат и валидатор говорит что его нету
???????
Забыл и хуй бы с ним, по опыту)
Олжас Сулеймен
что это плохо -10 очков тебе
???????
Но по идее должно быть
???????
Лучше это спроси в чятике бэкэндеров
???????
[
{
"type": "link",
"text": "https://t.me/gogolang"
}
]
Karen
а в чём удобство в дублировании инфы самого http response?
???????
JSON.parse() в объект ответа загнать, например
???????
Я даю выбор, не хочешь - не пользуйся, например
???????
это пару лишних байт же
Azamat Mullabaev
а если код 204 ?)
???????
Ну и надо понимать, что таким образом у меня не высоконагруженные чятики реализованы, а бэк на 1с, туда запросы не тысячами в секунду прилетают. А данные возвращаются довольно крупным куском.
???????
Ну я же лапками от и до формирую заголовки, коды ответа и тело. Там все норм.
???????
Ну и опятьже, во всем этом деле самое главное понимать, что ответить может не тот у кого ты спросил.
???????
Ответить может не бэк, а веб сервер или вообще провайдер со своей заглушкой или админ в локальной сети или еще что.
???????
[
{
"type": "mention",
"text": "@ykmnkmi"
},
" на хабре была отличная статья про заголовки и не менее отличные комментарии с различными точками зрения)"
]
Олжас Сулеймен
сейчас вот парюсь с Last-Modified - NotModified
???????
[
{
"type": "link",
"text": "https://habr.com/ru/post/412813/"
}
]
???????
[
"Ну и вот, менее захватывающая:\n",
{
"type": "link",
"text": "https://habr.com/ru/post/413205/"
},
""
]
???????
А на правах доки хватит и википедии
Олжас Сулеймен
ну на вики я уже был, а так спс
IB Akhrorov
ребят нужен совет как работает приложение которые созданы на flutter ? Быстродействие и можно ли создать приложение за короткий период времени?
???????
Работают крайне быстро, приложения перерендеривают не весь экран, а только часть экрана
Олжас Сулеймен
сканер штрих кода за 2 минуты можно написать )) без времени на прогрев, как питонщик говорю
IB Akhrorov
не открывает весь экраан
???????
Мне, как человеку не знакомому с нормальными интерфейсами и реактивщиной - было немного больно вкатываться. Но когда научишься и пообживешься - разработка довольно быстрая)
???????
Один раз зарендерит экран, затем будет обновлять только кусочек экрана, где чтото изменилось
IB Akhrorov
я щас учил котлин если смысл переходить на flutter,
???????
Была здоровская статья, где на примере виджета с часами сравнивали со свифтом
???????
Не у меня спрашивай) Я котлина и в особенности жабы - касаться не хочу) Но сейчас работаю одинэсником)
|