Программирование : Dart & Flutter по-русски
???????
а мучать сеошников и вебдевелоперов С ОПЫТОМ.
???????
Чтоб на реальных кейсах пояснили.
???????
[
{
"type": "link",
"text": "https://www.searchenginejournal.com/get-progressive-web-apps-indexed-google-search/178209/"
}
]
Anton ?? ? ??
скролл с фризами на сафари
???????
[
{
"type": "mention_name",
"text": "Iurii",
"user_id": 666901430
},
" мне кажется, если картинки на главно страннице завернуть в InkWell - будет крайне бомбезно.\n\nНасчет скролла - добавь ",
{
"type": "code",
"text": "physics: const AlwaysScrollableScrollPhysics(),"
},
" listview, мб поможет."
]
Anton ?? ? ??
никто еще не запустил AOT на макоси 10.15?(
???????
Алсо, оценил, что ты предусмотрел и ориентацию, также везде стараюсь)
???????
На мобильнике "Samsung Galaxy S8" в хроме при открытии публикации, почемут кнопка "назад" далеко не с первого раза срабатывает.
Bernar Saparali
Всем салам
Bernar Saparali
Хотелл спросить вообще не понимаю взаимоотношения между Navigator.pop(contex,false) Return Future.value(true)
Bernar Saparali
Все это в onwillpop
Bernar Saparali
Какая связь между bool там и там
Анатолий
ну, начнем с того что это две совершенно разные функции
Анатолий
второй вариант возвращает тру
Sergey Lavinov
SSR... Видимо клиент-сервер все же не индексируется)
Web Developer
карта сайта с ссылками на статьи и серверный рендеринг. Без SSR ни как ибо робот хавает только самые первые теги(интересующие его) Проверено на vue.js проекте + rest api. Из за этого сейчас переписываем все на SSR.
cyber mason
ни у кого не было такого? try { } on MyException catch(_) {} catch (e) { print(e); }
выводит в консоль: MyException
cyber mason
а понятно, throw нада со скобочками делать. извините
Dmitry Lvov
всем привет, помогите разобраться с bloc! Почему данный код при смене стейтов вызывает стактрейс? В этом месте нельзя пользоваться навигатором?
Dmitry Lvov
если поменять так то вроде работает, но почему не хочет с роутами?
hakon
blocbuilder должен возвратить widget, а не переходить на другое окно
DVS (Read The F.ng Manual) Studio (NoHello)
Юзайте для навигации BlockListener. Он работает вне отрисовки и в нем можно вызывать Navigator, setState и прочие методы, которые нельзя в билде делать
hakon
Можно попробовать засунуть в WidgetsBinding.instance.addPostFrameCallback
DVS (Read The F.ng Manual) Studio (NoHello)
Фуфуфу, когда есть специальный виджет от блока )
Dmitry Lvov
а что должно быть в билдере?
Dmitry Lvov
просто виджеты в зависимости от стейтов?
DVS (Read The F.ng Manual) Studio (NoHello)
[
"flutter_bloc | Flutter Package\n",
{
"type": "link",
"text": "https://pub.dev/packages/flutter_bloc"
}
]
Dmitry Lvov
[
{
"type": "italic",
"text": "// return widget here based on BlocA's state"
}
]
Dmitry Lvov
вернее прочел но мимо ушей
Dmitry Lvov
так. То есть если ты хочешь сохранять как то переключения, то нужно использовать listener ?
Dmitry Lvov
для того чтобы вернуться обратно если что?
DVS (Read The F.ng Manual) Studio (NoHello)
Тоже долго держал открытой этот ман чтоб копипастить виджеты. Сейчас как то на автомате пишу
DVS (Read The F.ng Manual) Studio (NoHello)
Если это связано с отрисовкой - BlocBuilder Если это не отрисовка - BlocListener Если надо прокинуть блок вниз по дереву виджетов - BlocProvider
Dmitry Lvov
я говорю о переключении виджетов, но чтобы их был стек, который можно чистить для обратной навигации
Dmitry Lvov
речь про отрисовку
Dmitry Lvov
третий случай не понятно для чего нужен. Хм
Dmitry Lvov
я думал делать по bloc на каждый экран грубо говоря
Dmitry Lvov
навигатором переключать виджеты экранов, внутри вызывается bloc и рулит логикой
Dmitry Lvov
зачем их по дереву пробрасывают? Интересно
Dmitry Lvov
как вам такая запись, с точки зрения эстетики? Или без разницы? )
Dmitry Lvov
тоже работает...
DVS (Read The F.ng Manual) Studio (NoHello)
ну.. у меня так же )
DVS (Read The F.ng Manual) Studio (NoHello)
вернее, бесполезный
Dmitry Lvov
потому что return ?
Dmitry Lvov
ну да. Я тут по синтаксису кстати не понял что нужно что то возвращать, пока вы не сказали
Dmitry Lvov
[
"очень непонятно в дарте сделали. Ты вроде возвращаешь ",
{
"type": "code",
"text": "BlocProvider"
},
", это и есть виджет. Поэтому не беспокоился о том что там в зависимости от стейта нужно что то возвращать"
]
Dmitry Lvov
ладно спасибо.
KDVMan
подскажите пожалуйста, super.initState() принципиально где вызывать? я вызываю его в начале, потом свой код, но смотрю на презентациях и разных обучающих видео, почти всегда его вызывают в конце метода (т.е. после моего кода) есть ли разница?
DVS (Read The F.ng Manual) Studio (NoHello)
судя по исходникам, его лучше в начале писать, что сразу сработал assert
KDVMan
ну вот я обычно его сразу пишу, но смутило то, что на презентации флаттера (первая версия) сами разработчики писали его в конце :) вот решил уточнить, вроде в документации даже написано (если ничего не путаю) "вызовите обязательно сначала super.initState)
Мумитроль
Тоже обычно удивляюсь в чем прикол вызывать свои методы до. Мое мнение - это не правильно и редко когда оправдано.
DVS (Read The F.ng Manual) Studio (NoHello)
ну.. учитывая, что обычно инит вызывается нормально сразу и без пересоздания... пофиг
KDVMan
оки :) спасибо за ответы :)
Ivan
Ребят, такой вопрос: добываю по api имена людей и вывожу на экран списком, сами имена хранятся строчными буквами, я хочу чтобы выводилась первая буква заглавная. Как такое можно сделать?
???????
[
{
"type": "mention",
"text": "@bunopus"
}
]
???????
Можно на пальцах, для не веб девелопера? Особенно как это применимо в реалиях флаттер веб.
???????
[
{
"type": "mention_name",
"text": "Ivan",
"user_id": 439494622
},
" \n",
{
"type": "pre",
"text": "String toTitleRegister(String string) =>\n string\n .split(RegExp(r'\\s'))\n .map ((String val)\n => val.isEmpty\n ? ''\n : '${val[0].toUpperCase()}${val.substring(1).toLowerCase()}')\n .join(' ');\n\nvoid main() {\n String data = 'ivan ivan ivan';\n print(toTitleRegister(data)); \n}",
"language": ""
},
"\n\n",
{
"type": "link",
"text": "https://dartpad.dartlang.org/973fdcaa9f49613ec4b57aaea0a60b5d"
},
""
]
???????
Можешь не благодарить)
Олжас Сулеймен
[
"можно без интреполяций ",
{
"type": "code",
"text": "val[0].toUpperCase() + val.substring(1).toLowerCase()"
},
""
]
???????
Только как правило на вход подается не "иван"
???????
а "иванов иван иванович"
Олжас Сулеймен
если так то можно регуляркой
???????
Поэтому и нужна разбивка по словам.
???????
Можно) Но мне, кажется, так очевиднее) Да и быстрее должно быть.
???????
[
"Сча подумал и заменил \n",
{
"type": "code",
"text": ".split(' ')\n"
},
"на\n",
{
"type": "code",
"text": ".split(RegExp(r'\\s'))\n\n"
},
"а то малоли какую наркоманию на вход можно подать)"
]
???????
Сча схороняй, еще одну багу поправил, связаную со спец символами)
Олжас Сулеймен
нужен сайтик подобия гист с мини примерчиками
Кирилл Пешин
Изменено в 7 33?? Это последняя редакция?
???????
Угу. Меня супер злит, что у меня гист в гитхабе в кашу превращается.
???????
Хочу выкладывать все подряд, а в итоге перемешивается дарт с 1с и с конфигами.
???????
Сча вот начал Evernote использовать, чтоб хоть какт разгрести
???????
мелкомягким срочно надо пересмотреть навигациюв гисте
Олжас Сулеймен
теги, комменты и все дела
???????
[
{
"type": "link",
"text": "https://dartpad.dartlang.org/973fdcaa9f49613ec4b57aaea0a60b5d"
}
]
???????
Комменты тама есть
Anton ?? ? ??
Достаточно сортировки по языкам
???????
А так, багов хватает)
Олжас Сулеймен
в pub'e тегов не хватает, чего то подобного
???????
При изменении дата не сбрасывается, такие дела :3
Aleksey
Так делать нельзя, но если очень хочется, то можно обьявить функцию void _onWidgetDidBuild(Function callback) { WidgetsBinding.instance.addPostFrameCallback((_) { callback(); }); } и отдавать вызов навигатора внутри билдера через эту функцию
northelks
если есть BlocListen
Denis Dubov
Ребят , а вот Statefullwidget, при загрузке мне нужно чтобы например с апи чтото бралось и т.д Это мне в initState самовызывающуюся ф-ю асинк нужно или как это делается?
Aleksey
я же и говорю, что так делать нельзя))) но работает
northelks
а, понял) сорян, утро, ещё не проснулся
Кирилл Пешин
Я в initState обращаюсь к SQLite - делаю запрос... Все прекрасно работает
???????
Главное, чтоб у вас к этому моменту уже был поднят коннект с sqlite
???????
А не прост: "а, пихуй, по идее должно успеть"
Кирилл Пешин
Сделано через примеры найденные... Через класс яля синглтон, который сначала проверяет есть ли БД, если нет создаёт ее.
???????
БД не просто должна быть, с ней должен быть поднят коннект)
???????
Тобишь в идеале это должно делаться при старте приложения, а не в момент, когда вам что то понадобится)
???????
[
"Накидал упрощенное представление блок'а для DartPad'а\n",
{
"type": "link",
"text": "https://dartpad.dartlang.org/e3710bbb18d5b201a656811e5ef46ad8"
},
"\n\nПолезно будет тем, кто решил вкатиться или поэксперементировать."
]
Кирилл Пешин
Про Коннект просто забыл написать...
Dambas
всем привет! Кто может помочь, я сижу не могу найти ошибку, уже по разному попробовал Мне нужно через post отправить запрос, в виде json строки, но у меня никак не получается
Dambas
[
"Я использую httpClient \n\nHttpClient client = new HttpClient();\n client.badCertificateCallback = ((X509Certificate cert, String host, int port) => true);\n var SecondQuery = await client.postUrl(Uri.parse(\"",
{
"type": "link",
"text": "https://172.30.3.106:5001/api/People"
},
"\"))\n .then((HttpClientRequest request) {\n try {\n request.headers.set('content-type', 'application/json');\n\n Map jsonMap = {\"name\" : \"$userName\", \"age\" : 0, \"photoUrl\" : \"$imgUrl\", \"phone\" : \"string\", \"favouriteLocation\" : \"string\"};\n request.add(utf8.encode(json.decode(jsonMap.toString())));\n return request.close();\n }\n catch(e){print(\"Error: $e\");}\n })\n .then((HttpClientResponse response) {\n response.transform(utf8.decoder).listen((data){\n try {\n myThing = (json.decode(data) as List).map((e) => new Person.fromJson(e)).toList().first;\n\n Person.currentPerson = myThing;\n }\n catch(e) {\n print(\"Error: $e\");\n }\n });\n });"
]
Dambas
request.add(utf8.encode(json.decode(jsonMap.toString()))); - я вот тут не знаю как правильно написать уже как кодил-недекодил все равно ошибка
Andrey
Пиши в личку,раз закооперироваться емеешь желание.
Dambas
ребята!! как пофиксить, все packages поставил!
Aleksey
я пропустил и не смог найти по сообщениям, о каком проекте идет речь?
???????
Сейчас на флатер веб делаю корп портал.
???????
С мыслью в будующем портировать на десктопы и мобилки.
Vsevolod
А как он щас? насколько нормально работает?
Vsevolod
я имею ввиду флаттер веб
???????
В целом устраивает. Вчераж скидывали демку)
XbIK
FOX, если не секрет какой функционал портала
Vsevolod
я провтыкал, есть ссылка?
???????
[
{
"type": "link",
"text": "https://yuriyluchaninov.github.io/flutter_for_web_test/#/"
}
]
???????
Интеграция с http сервисами (REST) 1c
Aleksey
там фотки, а где портал то?
???????
Тобишь доступ к кадровой базе (список сотрудников + портал), расчет отпускных
???????
Ты все одно не зайдешь, тк тама я сделал аутентификацию через Google OAuth2
Aleksey
портал есть, но ты не пройдешь, ок)))
???????
Я иногда скидываю скриншотики и ролики. Делаю медленно, обкатываю разные решения, да и другой работы хватает.
???????
[
"Вот, например:\n",
{
"type": "link",
"text": "https://t.me/rudart/76657"
},
""
]
???????
Сейчас разберусь со шрифтами и доделаю калькулятор, чтоп по клике на сумму открывалось модальное окно, со всеми космическими расчетами)
Aleksey
я тоже пэт проект пилю, но тока на мобилки
???????
Ну осенью, надеюсь, уже начнем свое дело и будем почаще штамповать)
Sergey Lavinov
Как заставить SingleChildScrollView занять все доступное место? Под Expanded был Column, все прекрасно, занимал всё пространство, понадобилось между ними воткнуть SingleChildScrollView и всё, скукожилось :с
???????
так там же свойство есть, MainAxisSize
Sergey Lavinov
Только у колонки
???????
Значит в него самого засунуть колонку или экспандед)
Sergey Lavinov
Но она по умолчанию на макс
???????
[
{
"type": "code",
"text": "The widget that is to grow to fit the remaining space so provided is wrapped in an Expanded widget."
}
]
Sergey Lavinov
Содержимое скролла же типа бесконечно по высоте
Sergey Lavinov
Так Column и так по умолчанию занимает весь объем по главной оси
???????
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/SingleChildScrollView-class.html#centering-spacing-or-aligning-fixed-height-content"
},
"\n\nВот, корочь"
]
Sergey Lavinov
Опа, кажется первый пример - это оно
Sergey Lavinov
Правда выглядит как-то не очень)
???????
Ты попробывал завернуть свой лист вью в экспандед?
???????
А тот, в свою очередь, должен быть во флексе
Sergey Lavinov
Expanded |-SingleChildScrollView // сюда вклинить Flex? |- Column
???????
Нет, флекс на самом верху и в нем не только твой экспандед, а вообще все
???????
Экспандед как раз и означает, какой процент от доступному флексу места взять
Sergey Lavinov
А, снаружи его не надо оборачивать. Там Column
???????
[
"если флексу дать весь экран, и поместить в него:\n",
{
"type": "pre",
"text": "SizedBox( 50px) // 50 px\nExpanded(flex 1) // (100%-50px) / 4 \nExpanded(flex 3) // *(100%-50px) / 4) * 3",
"language": ""
},
""
]
Aleksey
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/Stack-class.html"
}
]
???????
Сам по себе flex и есть column
Sergey Lavinov
Я знаю что такое стек, как им решить проблему?)
???????
Нирисуй экран в паинте который ты хочешь получить
Sergey Lavinov
Найс, ща будет
Aleksey
в стеке вместе с SingleChildScrollView положи какой нибудь котейнер фикс размера, чтобы SingleChildScrollView не схлопывался
Sergey Lavinov
Нужно чтобы при выезде клавы оно скролилось и не ломалось
???????
Слышь, ты чо пес, мое приложение воруешь?
Sergey Lavinov
Сейчас если обернуть это в скроллвью, то нижняя часть улетит наверх
Sergey Lavinov
Я те хату разнесу
???????
Сча попробую сверстать тебе
Sergey Lavinov
Не спеши, я хочу попробовать LayoutBuilder из примера, что выше кидал
Sergey Lavinov
Это выглядит как решение проблемы
???????
[
{
"type": "pre",
"text": "+-Flex------------------------------+\n| +-Expanded----------------------+ |\n| | +-ListView------------------+ | |\n| | |Text(Восстановление пароля)| | |\n| | |Text(Введите почту) | | |\n| | +---------------------------+ | |\n| +-------------------------------+ |\n| +-SizedBox----------------------+ |\n| |TextField | |\n| +-------------------------------+ |\n| +-SizedBox----------------------+ |\n| |RaizedButton | |\n| +-------------------------------+ |\n+-----------------------------------+",
"language": ""
},
""
]
Sergey Lavinov
Листаться должно всё
???????
Что именно "все"?
Sergey Lavinov
Поля тоже, иначе какой смысл?
???????
Листвью с текстом у тебя сжиматься будет, а кнопка с полем ввода - на верх уезжать
Sergey Lavinov
Клава открылась, экран сжался, теперь все не помещается, но я все еще могу нажать кнопку назад, долистать до инпута и нажать на кнопку
???????
при раскрытии клавиватуры
???????
Так ты у меня и можешь
Sergey Lavinov
Как листвью сожмется?
Sergey Lavinov
Получается текст обрежется
???????
Expanded сожмется
???????
Если пиздецки мало текста будет, кнопка и поле ввода будут доступны, а текст будет прокручиваемым
Sergey Lavinov
Так лучше если все будет прокручиваемым
Sergey Lavinov
Весь экран
???????
Зачем прокручивать поле ввода или кнопку?
Sergey Lavinov
Только без пространства по середине
???????
они должны быть постоянно доступными
Sergey Lavinov
Оно сожрется при появлении клавиатуры
???????
Простыня текста - вот что надо прокручивать
Sergey Lavinov
Небольшое скролл окошко наверху - этож стремно
???????
Ты сделай, сначала)
???????
Опять же, ты не поверишь, но при мелкой доступной высоте, текст можно просто не отображать)
???????
Просто скрыть и пихуй.
Sergey Lavinov
Для этого нужно париться с состоянием и условиями отображениями
Sergey Lavinov
Не тот экран, где стоит над этим париться
???????
Ладн, делай как знаешь)
Sergey Lavinov
Приму к сведению) Технически это классно, но как пользователь яб такое не понял
???????
Я кажись понял чо ты хочешь
???????
Но тогда вообще все просто
Sergey Lavinov
Звучит обнадеживающе, потому что реализация на LayoutBuilder сходу не завелась)
???????
[
{
"type": "pre",
"text": "+---------------------------------+\n| |\n| +-Expanded--------------------+ |\n| | | |\n| | Text(Восстановление пароля) | |\n| | | |\n| | Text(Введите почту) | |\n| | | |\n| +-----------------------------+ |\n| |\n| Spacer |\n| |\n| +-SizedBox--------------------+ |\n| | | |\n| | TextField | |\n| | | |\n| +-----------------------------+ |\n| |\n| +-SizedBox--------------------+ |\n| | | |\n| | RaizedButton | |\n| | | |\n| +-----------------------------+ |\n| |\n+---------------------------------+",
"language": ""
},
""
]
|