Статья :: Dart & Flutter по-русски |
Программирование : Dart & Flutter по-русски
Compote
Тема мне интересная просто.. чтоб от стейтфулов избавиться - осталось только логику анимаций деть куда-то.. Остальное все уже вытащил
Roman Vasiliev
Есть какие-нибудь быстрые предположения по какой причине два контейнера, обвернутые во Flexible внутри Row, для правого из которых взят оригинальный размер (ширина) контейнера и поделен на ширину Row, затем выставлен как flex (с точностью 1:100) правому и левому (обратное значение) Flexible... и у правого контейнера случается overflow?? P.S.: для правого округление до int через .ceil()
Compote
Или это и не нужно делать.. анимация это же часть ui слоя
Andrey
не очень понял что ты написал, с текстом overflow внутри row решается оборачиванием его в expanded, то бишь эквивалент Flexible…
Roman Vasiliev
не решится, потому что у меня флексы выставлены
Roman Vasiliev
Мне нужно чтобы правый контейнер был не меньше своего оригинального размера и мог расширяясь "ужать" левый контейнер, при этом левый контейнер изначально, и пока не уйдет в ноль, должен занимать все место которое ему дают. Поэтому я после того как наигрался со всем этим без расчетов и не получил нужный результат, решил прибегнуть к таким велосипедам
Andrey
мне кажется, тебе нужно использовать IntrinsicWidth
Andrey
по описанию, если я правильно понял, он как раз сделает то, что тебе нужно
Roman Vasiliev
не, а что обворачивать им? Я бы разобрался но сразу хочу прикинуть и понять вообще куда его приплести
Sergey Salnikov
это легко щас пример накидаю на Provider'е и отмечу тебя
Compote
спасибо, интересно посмотреть
Dagba
зачем использовать провайдер когда есть get_it
RЯ
ну да чё, наплодил синглтонов и рад
Dagba
там фактори тоже есть
Roman Vasiliev
Он сам по себе фиксированного размера, расширяется только Flexible который его обворачивает А убрать Flexible ради constraint я так понимаю даст ошибки из-за неопределяемой ширины
Andrey
у меня вот так: нижние две полоски остаются на месте, а верхняя уже занимает оставшееся место
Dagba
инжектить в материал апп с помощью мульти провайдера зависимости не синглтон? одна херня только в профиль
RЯ
ну если инжектить так все тупо то конечно
Andrey
надеюсь, понятно, что я имею ввиду
Dagba
синглтон это один экземпляр на весь рантайм приложения
Mitai
а че там с рыбкой правильный ответ уже был?
RЯ
тут и гет ит тогда не поможет ????
Dagba
а с помощью фактори мы сколь угодно можем
Dagba
экзмеляров инстанцировать
Dagba
так что ты сам себе там напридумывал либо тебе навязали этот провайдер
Roman Vasiliev
Не очень понял как это применить, под Row у меня ширина весь экран минус паддинг.
Dagba
всегда в нативе использовали сервис локатор в качестве di, а провайдер
Dagba
то всего лишь специфичный di для флаттер изза inhereted widget
RЯ
ну после твоего мультипрвайдера на материал
RЯ
я представляю какие фактори
Dagba
ты можешь что угодно преставлять я провайдер не использую
Andrey
блин, ещё раз: у тебя row поделено на 3 части, и ты хочешь сделать 45%, 45%, 10% —> 0%, 20%, 80%?
RЯ
глобально все создал и погнал
Dagba
синглтонов кста у меня тож нет
Dagba
токсиный какойто ты
RЯ
я ж не виноват что они так сделали
RЯ
и что ты этого не видел
Roman Vasiliev
у меня Row на две части: правая фикс минимальная ширина (должна быть), с возможностью расширения потенциального места под виджет за счет левой. Левая может ужаться в ноль, но изначально расширена до размера, который позволяет иметь наличие фиксированной правой части
Roman Vasiliev
сужения, расширения я добился за счет изменения флексов у Flexible, но совсем не понимаю почему у меня вылез overflow
Dagba
что ж вся мобильная индустрия до могучего провайдеры делала...
Roman Vasiliev
на данный момент
Dagba
пойду свечку поставлю за гугл
Andrey
а в левой части текст есть?
Roman Vasiliev
да, колонка из двух Text виджетов и SizedBox между ними, ведет себя нормально когда жмется
Andrey
а как он в 0 должен ужиматься?
Dagba
рэми это твой папа?
Roman Vasiliev
он не нужен становится, это часть анимации
Roman Vasiliev
на тексте ellipsis выставлен
Roman Vasiliev
сейчас в личку скину как выглядит
Dagba
впринципе после того как ты factory назвал синглтоном все стало понятно
RЯ
я синглтоном назвал гет ит
Dagba
ну да чё, наплодил синглтонов и рад
Dagba
там фактори тоже есть
Igor
[
{
"type": "link",
"text": "https://github.com/rudart/community/blob/master/chat_rules.md"
}
]
RЯ
регаешь твои называемые фактори
RЯ
создаётся тупо сразу объект
RЯ
и каждый раз его заменяшь
RЯ
при новом создании(читай регистрации) как тебе удобнее)
Dagba
я извиняюсь, серьезно, только что осознал что борюсь в ветрянными мельницами
Sergey Salnikov
[
"Ключевой момент в импорте TestVSync из flutter_test\nМожно сделать AnimationControllerProvider и будет ещё проще, сам себя dispose'ить будет\n\n",
{
"type": "link",
"text": "https://gist.github.com/cutzmf/abb32636f990bc1415b49034513c29a6"
},
""
]
Roman Vasiliev
проблема решена, проблема в руках из жопы
Compote
выглядит лаконично, спасибо. А TestVSync можно посмотреть?
Sergey Salnikov
[
"это из flutter_test, простой как пробка\n",
{
"type": "pre",
"text": "class TestVSync implements TickerProvider {\n /// Creates a ticker provider that creates standalone tickers.\n const TestVSync();\n\n @override\n Ticker createTicker(TickerCallback onTick) => Ticker(onTick);\n}",
"language": ""
},
""
]
Константин Буланов
Коллеги а подскажите как из экрана в другой экран данные передать то есть из одного виджета в другой. Я пока только через путь научился но большие данные так не закодировать. Направьте куда копать?
Compote
ты так все и пишешь?
Roman Vasiliev
передать их идентификатор
Константин Буланов
Извините я нуб. Можно по подробнее?
Sergey Salnikov
все анимации мои были пока привязаны к существующим контроллерам - scroll, tab (там внутри уже есть AnimationController) но теперь если потребуется - да буду так =) может напишу упрощатор AnimationControllerProvider всё равно я сижу на flutter_bloc и он зависим от provider
Compote
пожалуй да, отличная идея??
Roman Vasiliev
допустим нам нравится для доступа к данным использовать условный Bloc, чтобы иметь доступ отовсюду, он должен быть в корне. Если не нравится, ну например условно берем делаем синглтон класс. Большие данные любим получать из бд. Передаем в роут идентификатор данных, по которым ищем в бд данные и скармливаем их через Bloc/синглтон/что-то еще/напрямую, получаем большие данные. Примерно таков концепт
Константин Буланов
Ну навигацию так сделал в одном из уроков так предлагали. Все пути как URL строяться ну и данные так же передаем в url кодируя. Вот и думаю что странно.
Константин Буланов
[
"Пожалуй тут покурю ",
{
"type": "link",
"text": "https://flutter.dev/docs/cookbook/navigation/passing-data"
},
"\nнаверное я как то сложно делаю."
]
Roman Vasiliev
это вроде для веба только так, я не сильно шарю В любом случае и в вебе они будут тогда подгружены с помощью идентификатора из локальной браузеру бд или удаленно
Dagba
ты имеешь ввиду routes?
Константин Буланов
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=YjMcekfMLOA"
},
" Вот тут поясняли."
]
Dagba
в методе пуша будет параметр argumets он типа object
Dagba
передаешь любой объект
Dagba
и кастишь потом в тип модельки
Dagba
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/Navigator/pushNamed.html"
}
]
Dagba
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/Navigator/onGenerateRoute.html"
}
]
Константин Буланов
Спасибо. То что надо. Пошел курить ман.
Dagba
[
{
"type": "link",
"text": "https://pastebin.com/6Wte4Yvk"
}
]
Константин Буланов
Сложно мне такое пока. Сжальтесь :)
Dagba
в флаттере ттема роутинга не нормально усложнена
Roman Vasiliev
упрощена как по мне
Dagba
ну например в ios ты просто создаешь viewcontroller и пушишь его
Dagba
а здесь какие то route
Roman Vasiliev
когда доходит до сложных анимаций, выглядит это неудобно
Dagba
я говорю про логику перехода между экранами
Dagba
изначально это было как создал экран и запушил его в стэк
Roman Vasiliev
я как-то высматривал что как делать, чтобы попытаться сделать контролируемый пальцем переход обратно, как в телеграме, и решил отложить это дело
Nikolay Plotnikov
Здравствуйте. Для своего проекта мобильное приложение. Типа Личного кабинета компании. С авторизацией, картами Яндекс, геолокацией. Ищу технологический стек, сначала смотрел на Реакт, но вот увидел Флеттер. Кто-то переходил на эту технологию с Реакта или натива?
Roman Vasiliev
Я с натива с маленьким опытом переходил, вью писать нравится гораздо больше, язык не очень, но сейчас лучше. Натив кодил на котлине (ну и сейчас тоже)
Sergey Salnikov
[
"ты можешь ещё глянуть flutter_hooks\n\nно я закинул идею Remi в issues добавить TickerProvider для AnimationController\n\n",
{
"type": "link",
"text": "https://github.com/rrousselGit/provider/issues/403"
},
""
]
software cringeneer
всем привет
software cringeneer
начал учить флаттер недавно
software cringeneer
держу в курсе
Sergey Salnikov
аквариум пополняется
software cringeneer
кто-нибудь знает какой лучше язык для бэкэнда юзать?
Sergey Salnikov
erlang конечно же, как по-другому то
Kirill Aparin
Как закрывать image picker?
software cringeneer
ща чекну
Nikolay Plotnikov
Я сегодня узнал о его существовании
software cringeneer
а круто 1986
Sergey Salnikov
я чуток офтопнул, и это сарказм
software cringeneer
да я понял шас
software cringeneer
и нормально я знаю только джанго но во всем инете нашел только туторы индуса без субтитров, что слушать очень сложно и больше ничего
software cringeneer
ну может я мало искал хз
software cringeneer
так вот я думаю на чем
Roman Vasiliev
с видосов информация очень долго впитывается
Roman Vasiliev
советую статьи
software cringeneer
это совершенно другое в отличии от сайтов
software cringeneer
ага я сам это понимаю
software cringeneer
но чето не нашёл
Compote
Читал когда-то про flutter_hooks.. Но решил, что это попытка React скопировать и что там костылей каких-то наделали. Если там в сорсах нет стейтфулл виджетов, то почему нет) Спасибо за акцент внимания
software cringeneer
капец erlang топ, ща почитал про него, с первого взгляда понравился
software cringeneer
ладно всем пока я пошел его учить
software cringeneer
отличный язык
Sergey Salnikov
с горячей заменой кода (есть ограничения)
Nikolay Plotnikov
Под флаттер для бекенда что лучше?
Sergey Salnikov
[
{
"type": "pre",
"text": "HookWidget extends StatefulWidget",
"language": ""
},
"\n\nоно есть, но provider это Statefull"
]
Nikolay Plotnikov
Я думал Ларавел на php
software cringeneer
php ужасен
software cringeneer
Как для сайтов так и для приложений
software cringeneer
больше возни будет чем кода
software cringeneer
ну смотрите
Sergey Salnikov
что угодно - зависит же от задач, скорости написания(зависимость от вашего опыта) но в любом случае спроектируйте API в спеках openapi/grpc/graphql/etc
ru_ingener
И это был правильный ход мыслей. Обновил listView и все заработало.
Sergey Salnikov
не печайте по два слова в сообщении это общий чат с множетсвом участников, а не личка upd поясню - куча сообщений друг за другом по два/три слова upd2 пожалуйста )
Askhab
Имеется у кого книга "Dart в действии" в 2016 года?
Askhab
Какой версии там Dart?
software cringeneer
пхп юзается для создания серверной логики, это было актуально в годах так 2008-2012х, сейчас это вообще не используется и нецелесообразно, но это ладно, про такие проблемы говорить не буду. насчёт возни - переменные, по моему мнению основа программирования, так вот, преобразования в нем это сущий ад, лично я, когда работал с php каждый раз по 10 минут обдумывал какой же все таки тип данных дать той или иной переменной - integer или float, так как уже понял, что в последующем придется все использования переменной менять, а это занимает кучу времени в больших проектах. также, работа с вычислениями ужасна, что как раз и нужно мне, например при делении на ноль, он не вызывает ошибку, что было бы в разы легче для понимания, а просто происходит какая-то херня. также, очень важная часть - библиотеки. после php пайтон это просто рай, потому что в php совершенно непонятно устроены библиотеки, некоторые юзают С, что обуславливает "вредные привычки" языка С при использовании php, по типу вывода через out и тд. сейчас же больше библиотек, понятных обычному человеку, позволяющие работать на php с json и тд, в итоге при написании кода получается билиберда из соединения старого синтаксиса с новым, что очень трудно читать. короче я бы побольше написал, но это просто к тому, чтобы мои предъявления к php не были пустыми словами
admin
Не понимаю зачем книга с их охрененной документацией
software cringeneer
согласен
Кирилл Матросов
[
{
"type": "link",
"text": "https://mrale.ph/dartvm/"
},
"\nчтобы такие вещи были закончены и зафиксированы полностью"
]
Roman Vasiliev
Дак это Dart VM, а не Dart
Kirill Aparin
[
"imageInCatalogActive\n ? {",
{
"type": "bold",
"text": "// ругается на фигурные скобки\n"
},
" SizedBox(\n height: 10,\n ),\n FlatButton(\n onPressed: loadAssets,\n child: Padding(\n padding: EdgeInsets.only(left: 20),\n child: Row(\n children: [\n Text(\n 'Load images (' +\n imagesList.length.toString() +\n '",
{
"type": "bot_command",
"text": "/20"
},
" )',\n style: TextStyle(\n color: ",
{
"type": "link",
"text": "Colors.black"
},
",\n fontSize: 15,\n ),\n ),\n Icon(Icons.file_upload)\n ],\n ),\n ),\n ),\n (imagesList.length > 0)\n ? Container(\n height: 200,\n child: buildGridView(),\n )\n : SizedBox(),\n }",
{
"type": "bold",
"text": "// ругается на фигурные скобки\n"
},
" : SizedBox()"
]
Kirill Aparin
Как мне кучу виджитов запихнуть в это условие?
Kirill Aparin
Если у вас есть решение лучше, буду рад его услышать
DVS (Read The F.ng Manual) Studio (NoHello)
[
{
"type": "code",
"text": "if(условие)\n...[\nтут виджеты\n]\nelse\nдругой виджет,"
},
""
]
Kirill Aparin
Всё заработало
DVS (Read The F.ng Manual) Studio (NoHello)
а вообще лучше сделать переменную в билде, забить ее нужным с условиями и юзать где надо, чтоб в простыне return'а не было такой каши
DVS (Read The F.ng Manual) Studio (NoHello)
[
{
"type": "italic",
"text": "(сказал я и продолжил делать лапшу в коде XD)"
},
""
]
Kirill Aparin
Ахаха, показалось
DVS (Read The F.ng Manual) Studio (NoHello)
ну тут уже зависит от того, куда этот массив виджетов вставляется Column / Row / Wrap / Stack ... они же не могут просто быть и всё)
Socrat
сделай отдельный виджет для простыни
Socrat
будет проще разобраться
Kirill Aparin
Так это же не виджет, а массив виджетов
Kirill Aparin
Как я его в один запихну
Kirill Aparin
при чём там ещё пересборка идёт и dart ругается, на то что это не константа
Kirill Aparin
А вставляю я уже в Column, в которой уже есть виджиты
Vadim Lukichev
[
"Если что, доку по VM перенесли в официальную репу, там вроде немного более актуальная инфа \n",
{
"type": "link",
"text": "https://github.com/dart-lang/sdk/blob/master/runtime/docs/index.md"
},
""
]
Socrat
надо структуру дерева увидеть
Socrat
куда ты это все вставляешь?
ru_ingener
я использовал ListView.add(твой виджет)
Kirill Aparin
Ну всё, сам напросился
Kirill Aparin
[
{
"type": "pre",
"text": " Widget build(BuildContext context) {\n\n return ListView(children: [\n Column(crossAxisAlignment: CrossAxisAlignment.stretch, children: [\n SizedBox(\n height: 20,\n ),\n Padding(\n padding: EdgeInsets.only(left: 16),\n child: Row\n (\n children: [\n Text(\n 'Main image',\n style: TextStyle(\n color: Colors.black,\n fontSize: 20,\n ),\n ),\n Icon(mainImageActive\n ? Icons.arrow_drop_up\n : Icons.arrow_drop_down),\n ],\n ),\n ),\n SizedBox(\n height: 10,\n ),\n FlatButton(\n onPressed: () {},\n child: Padding(\n padding: EdgeInsets.only(left: 20),\n child: Row(\n children: [\n Text(\n 'Load image',\n style: TextStyle(\n color: Colors.black,\n fontSize: 15,\n ),\n ),\n Icon(Icons.file_upload)\n ],\n ),\n ),\n ),\n Divider(\n thickness: 1,\n height: 10,\n ),\n CheckboxListTile(\n value: catalog.descriptionBool,\n title: Text(\n 'Description',\n style: TextStyle(\n color: Colors.black,\n fontSize: 20,\n ),\n ),\n onChanged: (bool value) {\n setState(() {\n catalog.descriptionBool = value;\n });\n },\n ),\n catalog.descriptionBool\n ? Padding(\n padding: EdgeInsets.only(left: 20, right: 20),\n child: TextField(\n maxLength: 20,\n controller: _controller1,\n decoration: InputDecoration(\n border: OutlineInputBorder(),\n labelText: 'Description text',\n ),\n ),\n )\n : SizedBox(),\n Divider(\n thickness: 1,\n height: 10,\n ),\n Padding(\n padding: EdgeInsets.only(left: 16),\n child: GestureDetector(\n onTap: () {\n setState(() {\n imageInCatalogActive = !imageInCatalogActive;\n });\n },\n child: Row(\n children: [\n Text(\n 'Images in catalog',\n style: TextStyle(\n color: Colors.black,\n fontSize: 20,\n ),\n ),\n Icon(imageInCatalogActive\n ? Icons.arrow_drop_up\n : Icons.arrow_drop_down),\n ],\n ),\n ),\n ),\n",
"language": ""
},
{
"type": "bold",
"text": "//Отсюда\n"
},
{
"type": "pre",
"text": " imageInCatalogActive\n ? [\n\n SizedBox(\n height: 10,\n ),\n FlatButton(\n onPressed: loadAssets,\n child: Padding(\n padding: EdgeInsets.only(left: 20),\n child: Row(\n children: [\n Text(\n 'Load images (' +\n imagesList.length.toString() +\n '/20 )',\n style: TextStyle(\n color: Colors.black,\n fontSize: 15,\n ),\n ),\n Icon(Icons.file_upload)\n ],\n ),\n ),\n ),\n (imagesList.length > 0)\n ? Container(\n height: 200,\n child: buildGridView(),\n )\n : SizedBox(),\n ]\n",
"language": ""
},
{
"type": "bold",
"text": "//До"
},
" сюда\n",
{
"type": "pre",
"text": " : SizedBox()\n ]),\n ]);\n }",
"language": ""
},
""
]
Kirill Aparin
P.S. все проблемы внизу
Hellomik
Хай кто юзал streams бы ловить данные
Hellomik
у меня есть такой вопрос ведь прошлые данные тоже ведь сохраняются в системе, вес таки это итерации или я что то не правильно понимаю ?
Kirill Aparin
socrat увидел мой код и умер
DVS (Read The F.ng Manual) Studio (NoHello)
[
{
"type": "italic",
"text": "```код```"
},
"\n(3 апострофа)"
]
Hellomik
Кстати не знаешь
Hellomik
ответ на этот вопрос ?
DVS (Read The F.ng Manual) Studio (NoHello)
ничего не хранится. StreamController данные получил, передал в свой Stream в onListen стрима данные получились один раз и всё (в исходной версии без rx'ов всяких итп)
|
|
|