Программирование : Dart & Flutter по-русски
Aleksandr
Подскажите, в андроид студии эмулятор крашит Винду на синий экран, ошибка типа nvdmms.sys
Aleksandr
Драйвера переставлял на чистую
Aleksandr
Есть ещё варианты?
Яўген
Добавил файл для локализации, логично, что все переменные в обоих файлах имеют одинаковое название, но при сборке мне пишет "Duplicate resources" и указывает мне название ресурса - "app_name". Подскажите, что не так
Raimo
Доброго всем вечера. Такое дело, я в одном из подкастов по Flutter услышал мысль, что теперь с какого-то там обновления можно вызывать SnackBar без Scafold. Уж сколько раз я не пытался и сколько не гуглил ответа не нашёл. Может кто знает?
Andrey Unger
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/ScaffoldState/showSnackBar.html"
}
]
Андрей Рудин
спасибо, но это обычные сектанты. ушли в одну крайность, и ху——сят все остальные "религии".
Пашка
так они заигрываются
Пашка
из крайности в крайность
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=lDlk9aR8L9E"
}
]
Андрей Рудин
да, согласен.
кто нибудь уже использовал это на деле ?
Cruiser
Добрый вечер всем. Как я могу сделать так, что когда юзеру был телефон либо он звонил кому нибудь, когда начался звонок начать записывать все его речи в аудио файл и когда он закончил и запись закончился и через апп мог получит этот аудио файл?
Пашка
у iOS наврятли выйдет
Alikhan Khatuev
Видели новый курс на скилбоксе Flutter Стоит ли брать ради сертификата?
Valeriu Vodnicear
Можешь ссылку скинуть?
Alikhan Khatuev
[
{
"type": "link",
"text": "https://skillbox.ru/course/flutter/"
}
]
Valeriu Vodnicear
Спасибо
Пашка
интересно что они там расскажут
Alikhan Khatuev
Поздравляю, мужик ???? Успехов тебе в твоей дальнейшей карьере.
Святослав Мукорез
Спасибо)
Alikhan Khatuev
Ничего особенного ListView затрагивается на 2 месяце обучения
Alikhan Khatuev
Кстати, есть те кто сегодня участвовал в DurtUp Насчёт сертификата ничего не знаете? Когда я регался на TimePad видел , можно было приобрести корочку что участвовал в конференции Сейчас потерялась та ссылка
tdesc
зачем сертификат по флаттер вообще не понял )
Андрей Рудин
без бумажки ты какашка, мне так в детстве говорили
Пашка
а с бумажкой ты грамотная какашка)
tdesc
лучше хакатончик затащить
tdesc
тогда шансы выше по палате работу хорошую найти
Пашка
на Паскале нейронка
Пашка
на 1-2 курсе шараги
Пашка
поиск парковочных мест с видеокамер
Пашка
электронная библиотека
tdesc
в сан франциско прям беда помню была с парковками
tdesc
в разработке флаттер хз
tdesc
электронная библиотека не звучит впечатляюще
Пашка
ну работать работаю)
tdesc
да я про сертификат
tdesc
что он не особо нужен
Пашка
действительно не то что впечатляющее но то что я написал 3 платформы, позволило оказаться лучшим
tdesc
такой опыт хорош для стартапов кстати
Пашка
само участие в таких мероприятиях уже плюс
tdesc
да, мышление определенное
Пашка
ещё найти единомышленников
Пашка
с какими то людьми познакомится
Пашка
но в моем случае все это участие было в первую очередь проверка своего скила
Пашка
на реальных задачах
tdesc
проводили хакатон на прошлой неделе
tdesc
довольно интересный опыт, не совпал с моими ожиданиями ))
Пашка
времени вот не было к сожалению
tdesc
по людям кто пришел и по результату
tdesc
[
{
"type": "link",
"text": "https://codenrock.com/contests/359#/"
}
]
tdesc
сделали оффер разработчику со 2 места )
mark
у меня одного чуство что flutter cli лучше работает в стандартном cmd чем в последнем повершелле?)
tdesc
тогда скорее всего у одного
Пашка
а собственно в чем трабл с сокетами?
Пашка
звучит вроде просто
tdesc
там слово сокет гдето? )
Пашка
или можно ещё как то без сокетов
tdesc
да это не принципиально, есть апи со статистикой спорт радаровское
tdesc
вот надо было виджет сваять
Пашка
тут уже дело дизайнера
tdesc
ну как дизайнера, систему виджетов тоже надо
tdesc
вообще победила команда где и разработка и дизайн слажено сработали и еще подумать про продукт тоже успели
Пашка
или теперь это интеллектуальная собственность чья-то?
tdesc
код в продакшн конечно нельзя )
tdesc
потому что мы по другому пишем
tdesc
но как продуктовая идея норм
tdesc
даже очень постарались
Пашка
действительно хорошо
Пашка
но мне как человеку не следящим за таким направлением
Пашка
тяжело было бы сверстать что то уникальное
Gorohov Valeriy
Как можно сделать такую верстку? Возможно решение очевидно и я его просто не вижу. Основная сложность: 1) Нужно сжимать красный блок, так, что бы желтый, зеленый и синий бок всегда показывали весь контент, 2) Но если высоты экрана хватает, то красный блок растягиваем до максимальной высоты (в примере она равна его ширине), а оставшееся место заполняет зеленый блок. P/S/ надеюсь понятно объяснил)
Gorohov Valeriy
Уточнение, виджет занимает всю высоту экрана. Ни больше, ни меньше.
Serg Bell
[
{
"type": "link",
"text": "https://youtu.be/CI7x0mAZiY0"
}
]
Serg Bell
[
"+ это ",
{
"type": "link",
"text": "https://youtu.be/o2KveVr7adg"
},
""
]
Gorohov Valeriy
Я перепробовал разные варианты Flexible (всё что смог придумать). Но уткнулся в то, что они все пропорциональны. И это мешает назначить два блока (красный и зеленый) как Flexible, т.к. в таком случае они начинают зависеть друг от друга, и даже если контент зеленого блока маленький, он не даст красному блоку расшириться более чем на половину свободного места в Column
Serg Bell
не, все равно не понял - код бы увидеть, там 10050 вариантов
Serg Bell
к вечеру тяжело думается))
Serg Bell
есть expanded, aspectratio, fractionedbox и пр.
Gorohov Valeriy
Сейчас в дартпад накидаю)
Gorohov Valeriy
Эффект, на втором скрине красный блок должен уменьшаться, но вместо этого уменьшается зеленый, хотя он своей минимальной высоты достиг.
Gorohov Valeriy
[
"Для дартпада:\n",
{
"type": "pre",
"text": "import 'package:flutter/material.dart';\n\nvoid main() {\n runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n debugShowCheckedModeBanner: false,\n home: Builder(\n builder: (context) => Scaffold(\n body: Column(\n crossAxisAlignment: CrossAxisAlignment.stretch,\n children: [\n ConstrainedBox(\n constraints: BoxConstraints(\n maxHeight: MediaQuery.of(context).size.width,\n minHeight: MediaQuery.of(context).size.width / 2,\n ),\n child: Container(color: Colors.red.shade400),\n ),\n Container(color: Colors.yellow.shade400, height: 100),\n Expanded(\n child: Center(\n child: Container(color: Colors.green.shade400, height: 100),\n ),\n ),\n Container(color: Colors.blue.shade400, height: 100),\n ],\n ),\n ),\n ),\n );\n }\n}",
"language": ""
},
""
]
Andrey Unger
>>Но если высоты экрана хватает, то красный блок растягиваем до максимальной высоты (в примере она равна его ширине), а оставшееся место заполняет зеленый блок. вот это не очень понял. Если экран большой ввысоту какая максимальная высота красного? в какой момент зеленый должен начать увеличиваться?
Serg Bell
это просто эксперименты?. т.к. в тз (на картинке) указано у зелёного и синего contentHeight, а контента-то и нет никакого, самому выдумывать?.
Gorohov Valeriy
в примере максимальная высота красного блока равна его ширине.
Serg Bell
это условие из ТЗ или само так придумалось?.
Gorohov Valeriy
В коде для дартпад я высоту контента задал через height у container. Реальный код из проекта я естественно не приложу, т.к. там не только лайаут, но и дизайн с данными.
Serg Bell
ничего не понятно - я пас
Gorohov Valeriy
Можно считать mock данными, они отличаются от реальных данных, но на основной верстке и постановке задачи это не сказывается.
Serg Bell
где-то (на хабре) есть перевод этой статьи на русский даже, почитай про контейнеры - поймешь почему я пас
Gorohov Valeriy
Не вопрос, заменю на SizedBox, это что-то изменит?
Gorohov Valeriy
Или ConstrainedBox, или текстом/
Serg Bell
[
"вот на русском ",
{
"type": "link",
"text": "https://habr.com/ru/post/500210/"
},
""
]
Serg Bell
[
"т.к. у тебя Column - это тоже поможет:\n",
{
"type": "link",
"text": "https://medium.com/flutter-community/flutter-layout-cheat-sheet-5363348d037e"
},
""
]
Andrey Unger
все по тз - красный растянулся до своей ширины, а зеленый на все оставшееся)
Andrey Unger
вот когда красный еще не достиг своей ширины
Andrey Unger
[
{
"type": "code",
"text": "Column(\n children: [\n ConstrainedBox(\n constraints: BoxConstraints(\n maxHeight: MediaQuery."
},
{
"type": "italic",
"text": "of"
},
{
"type": "code",
"text": "(context).size.width,\n ),\n child: Expanded(child: Container(color: Colors."
},
{
"type": "italic",
"text": "red"
},
{
"type": "code",
"text": ".shade400)),\n ),\n Container(color: Colors."
},
{
"type": "italic",
"text": "yellow"
},
{
"type": "code",
"text": ".shade400, height: 100),\n Flexible(\n child: Container(color: Colors."
},
{
"type": "italic",
"text": "green"
},
{
"type": "code",
"text": ".shade400),\n ),\n Container(color: Colors."
},
{
"type": "italic",
"text": "blue"
},
{
"type": "code",
"text": ".shade400, height: 100),\n ],\n),"
}
]
Andrey Unger
поиграйтесь с этим. Там наверное для зеленого еще минимальную высоту надо вставить
Andrey Unger
[
{
"type": "link",
"text": "https://pastebin.com/4tHANvJZ"
}
]
Smony
Всем привет, ребят подскажите плз в чем может быть проблема на реальном устройстве список StaggeredGridView работает только на ios а на android не выводит вообще, хотя на виртуалке все ок
Smony
[
"юзаю этот пакет ",
{
"type": "link",
"text": "https://pub.dev/packages/flutter_staggered_grid_view"
},
""
]
Gorohov Valeriy
Именно этот код и кидает ошибки
Andrey Unger
у меня все работает. Может у вас какой-то не тот флаттер?)
Gorohov Valeriy
Дартпад тоже не дает, да и разве ConstrainedBox может быть родителем Flexible?
Andrey Unger
[
{
"type": "link",
"text": "https://pastebin.com/hyfx9MLv"
},
" вот еще вариант"
]
Gorohov Valeriy
Вот именно в таком виде я и получил код с багом??, здесь как раз ConstrainedBox не имеет ограничения, поэтому всегда максимальной высоты.
Gorohov Valeriy
Изначально у меня тоже была вложенность Column в Column, это не влияет на общую верстку, но усложняет её чтение.
Andrey Unger
а чем вас такой вариант ен устраивает?
Andrey Unger
[
{
"type": "code",
"text": "Column(\n children: [\n Flexible(\n child: Container(\n color: Colors."
},
{
"type": "italic",
"text": "red"
},
{
"type": "code",
"text": ".shade400,\n constraints: BoxConstraints(\n minHeight: MediaQuery."
},
{
"type": "italic",
"text": "of"
},
{
"type": "code",
"text": "(context).size.width / 2,\n maxHeight: MediaQuery."
},
{
"type": "italic",
"text": "of"
},
{
"type": "code",
"text": "(context).size.width,\n ),\n ),\n ),\n Container(color: Colors."
},
{
"type": "italic",
"text": "yellow"
},
{
"type": "code",
"text": ".shade400, height: 100),\n Flexible(\n child: Container(color: Colors."
},
{
"type": "italic",
"text": "green"
},
{
"type": "code",
"text": ".shade400),\n ),\n Container(color: Colors."
},
{
"type": "italic",
"text": "blue"
},
{
"type": "code",
"text": ".shade400, height: 100),\n ],\n),"
}
]
Gorohov Valeriy
Вот этим (Center добавил для наглядности, на верстку не влияет):
Gorohov Valeriy
Как видно, место достаточно, но красный блок и не думает расширятся
Andrey Unger
а схренали ему расширятся? у вас контейнер вокруг зеленого блока занимает все
Andrey Unger
центр еще как на верстку влияет
Gorohov Valeriy
Центр для наглядности. уберу его и будет зеленый точно таких же размеров.
Andrey Unger
зеленый займет все что в Flexeble - все верно
Andrey Unger
так и должно быть
Andrey Unger
белое - это занятое место
Andrey Unger
оно занято Flexible
Andrey Unger
nfv ytrelf rhfcyjve hfcibhzncz
Gorohov Valeriy
А мне то так не нужно, мне нужно что бы сначала красный занял доступное пространство
Andrey Unger
там некуда красному расширятся
Andrey Unger
там нет доступного пространства
Gorohov Valeriy
У зеленого-то минимальная высота 100
Andrey Unger
откройте fлаттер инспектор
Gorohov Valeriy
Он не должен быть меньше 100, и занимать всё, что не занял красный
Andrey Unger
ну так и есть
Gorohov Valeriy
Еще раз, проблема в том, что у column должны быть фактически два Flexible элемента, но, не связанных с собой пропорционально, а скорее работать с приоритетами. Flexible верстку я знаю достаточно хорошо (хотя допускаю что я жестко протупил и решение на поверхности), и здесь банальные решения описанные в статьях не подходят. Поверьте, я пробовал всякие комбинации Flexible, и их основная проблема в том, что они ограничены пропорциями.
Andrey Unger
вы просто сами не понимаете что хотите. красный занял максимальную для него высоту. Зеленый занял все оставшееся. в чем проблема?
Gorohov Valeriy
Ну как? Если у красного сказано "займи доступное пространство, но не больше своей ширины", а при такой верстке ему еще вешают "но не больше чем половина доступного свободного пространства, т.к вторая половина принадлежит зеленому"
Gorohov Valeriy
Максимальная высота для него равна ширине.
Gorohov Valeriy
И я не вижу что бы он ее занял.
Andrey Unger
на скриншоте выше можете с линейкой померить. ширина равна высоте у красного
Gorohov Valeriy
Это кейс, когда ширина красного меньше чем половина свободного пространства, подвигайте ползунок viewport в дартпаде, и поймёте в чем моя проблема. Как только ширина экрана становится больше чем половина высоты экрана
Gorohov Valeriy
На идеальный кейсах и у меня всё работает, и заказчики принимали, пока я не запустил приложение на экране с пропорциями отличных от стандартных.
Gorohov Valeriy
И кстати, вы упустили еще один момент, зеленый не занимает всё свободное пространство, он тоже становится ограниченным половиной свободного пространства, а т.к. красный не занимает всю свою часть, снизу экрана появляется фон - та часть пространства, которую не занял красный.
Andrey Unger
[
{
"type": "code",
"text": "Column(\n mainAxisAlignment: MainAxisAlignment.spaceBetween,\n crossAxisAlignment: CrossAxisAlignment.stretch,\n children: [\n Flexible(\n flex: 0,\n child: Container(\n color: Colors."
},
{
"type": "italic",
"text": "red"
},
{
"type": "code",
"text": ".shade400,\n constraints: BoxConstraints(\n minHeight: MediaQuery."
},
{
"type": "italic",
"text": "of"
},
{
"type": "code",
"text": "(context).size.width / 2,\n maxHeight: MediaQuery."
},
{
"type": "italic",
"text": "of"
},
{
"type": "code",
"text": "(context).size.width,\n ),\n ),\n ),\n Container(color: Colors."
},
{
"type": "italic",
"text": "yellow"
},
{
"type": "code",
"text": ".shade400, height: 100),\n Expanded(\n flex: 1,\n child: Container(color: Colors."
},
{
"type": "italic",
"text": "green"
},
{
"type": "code",
"text": ".shade400),\n ),\n Container(color: Colors."
},
{
"type": "italic",
"text": "blue"
},
{
"type": "code",
"text": ".shade400, height: 100),\n ],\n),"
}
]
Andrey Unger
вот так ничего внизу не остается
Gorohov Valeriy
Установив flex в 0 вы фактически его убрали, и пришли к первоначальному варианту. > If null or zero, the child is inflexible and determines its own size.
Gorohov Valeriy
Сборка релиз или дебаг?
Gorohov Valeriy
[
"У вас картинки с интернета, на Андроиде в релизе нужно прописывать в манифесте доступ к интернету.\n",
{
"type": "link",
"text": "https://flutter.dev/docs/development/data-and-backend/networking"
},
"\n\nЭто если банальные возможные проблемы смотреть. Если с этим всё ок, то нужна доп информация. Например, есть ли что в логах и что в дереве виджетов находится. первое позволить выявить исключения, второе покажет что и как строится (правда дерево в релизе недоступно, несколько я помню)"
]
Миша
Мб кто сталкивался с такой проблемой?
Миша
Говорит, что нет такой таблицы в бд, но она естт
Max Payne
Заново перечитал в память?
Max Payne
Я про весь процесс. Рестарт аппы был или хот релоад?
Миша
рестарт отказывался работать
Миша
я нашимал остановить
Миша
и заново отладку запускал
Max Payne
Может старое подтянулось. Я вот к чему
Max Payne
А вычитать список таблиц которые доступны пробовал?
Миша
а как это сделать? print(db.rawQuery('.tables');?
Noob Noobskiy
Утро доброе ?????>? Может есть какой-нибудь сайт по типу CodeWars, но для Flutter? Может какой то сайт с сломанным кодом приложения который надо чинить? (Желательно со сложностью для новичков :D)
Noob Noobskiy
Когда то кидали что-то вроде FlutterSamples. Но там далеко не мой уровень :D
Павел Середа
[
"чем CodeWars плох? по дарту есть например ",
{
"type": "link",
"text": "exercism.io"
},
"\nещё вот что могу порекомендовать: ",
{
"type": "link",
"text": "https://levelup.gitconnected.com/28-coding-exercises-for-dart-69eb104ae291"
},
""
]
Vyacheslav
[
"Всем доброго субботнего утра! \nЕсть форма создания продукта, с кучей полей и кнопок, теперь мне нужно сделать edit функционал. Копировать ее целиком и добавлять нужные стартовые значения, как то не очень... \nЯ думаю сделать так, чтобы во все поля подставить стартовые значения при условии, если в параметрах виджета есть продукт. \nНапример, когда я создаю продукт, я перехожу на страницу ",
{
"type": "code",
"text": "AddProductPage() "
},
"\nА если редактирую, то переход на страницу ",
{
"type": "code",
"text": "AddProductPage(productModel: product)"
},
"\nИ далее по тексту ",
{
"type": "code",
"text": "value: product!=null ? productName : ''"
},
"\nКак лучше реализовать?"
]
?????????? | (• ?•)| (????)
Можно ещё так value: product?.name ?? ''
Vyacheslav
да, так красивее синтаксис, но сам подход у меня нормальный?
admin
привет ребята мне нужна grid view to do app tutorial
Kathy Ti
В колонке 2 текста и кнопка. Как сделать чтобы второй текст стал многострочным?
Denis Bystruev
[
"Установить его свойство maxLines:\n\n",
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/Text/maxLines.html"
},
""
]
Makhmud Ushamiev
Должно быть что-то вроде maxlines или multiline
Evgeny Cherkasov
Можно попробовать CustomMultiChildLayout
Damir
Всем привет, могли бы скинуть репозитории гитхаба для изучения флаттера, чтобы можно было изучить проект и понять как стоит делать, а как нет. Плюс для изучения чистой архитектуры во флаттере
Ivan B
Всем привет! Как вы работаете с куки в web версии flutter? В частности интересует авторизация по кукам. С сервера приходят заголовки set-cookie, но они автоматически не сохраняются в браузере и не совсем ясно как их извлечь и хранить. На проекте используется http, запрос на куки примерно следующий: final response = await http.get('sanctum/csrf', ... response.cookie даёт ошибку, в response.headers нет заголовков set-cookie, И куда тут копать не ясно (
Makhmud Ushamiev
Выбери стейт менеджмент для начала)
Damir
Просто для кругозора, чтобы увидеть как выглядит готовое, грамотное приложение)
Makhmud Ushamiev
Ну и я про это) выбери стейт менеджмент, и в гите уже искать легче станет
Ilizium Lion
[
"Всем привет. \nПодскажите, кто сталкивался с проблемой \n[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: 'package:hasura/src/services/local_storage_hive.dart': Failed assertion: line 16 pos 7: 'LocalStorage.databaseDirectory != null': please set the LocalStorage.databasePath before using hasura\n",
{
"type": "link",
"text": "https://i.imgur.com/p6RQDmy.png"
},
"\nСтоят пакеты \n- hasura\n- SharedPreferences\nSharedPreferences (локальное хранилище) подключено раньше инициализации hasura ",
{
"type": "link",
"text": "https://i.imgur.com/wSXEklf.png"
},
", но ошибка все еще сохраняется. \nПодскажите как избавиться от этой проблемы или что почитать. Google не ответил мне на вопрос."
]
Mikl Night
[
"всем салют))\nУ меня тут вопросик...\nДостучаться до BloC'ка не будучи его предком, можно?\n\nсейчас мой провайдер реализован через ",
{
"type": "code",
"text": "InheritedWidget"
},
"\nпонятно что находясь в другой вектке дерева наследования, его не дёрнуть...\nоборачивать всё ещё каким то виджетом не хотелось бы...\nЧерез что правильно реализовать провайдер одного из \"фрагментов\" приложения \"Глобально\"?"
]
Di
А что со стримом дартапа? Там сейчас coming soon.
Di
Куда должны прислать новую ссылку?
vasilich
Через рутовый виджет
Никита
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=M1_R0AcgZNY&feature=youtu.be"
}
]
NewBalanceM5
[
"Начался заключительный день ",
{
"type": "bold",
"text": "DartUP"
},
". Очень крутая программа, спикеры и интересные доклады, присоединяйтесь! А так же не забываем ",
{
"type": "text_link",
"text": "регистрироваться",
"href": "http://dartup.ru/"
},
".\n\n[RU] ",
{
"type": "link",
"text": "https://youtu.be/M1_R0AcgZNY"
},
"\n[EN] ",
{
"type": "link",
"text": "https://youtu.be/AcZIiEBIYQ8"
},
""
]
Павел
Есть интересная задача. Написал кастомный AppBar и внизу у него TabBar при нажатии на который текст должен анимированно переехать в Title апбара. То есть получается из одного парента в другой. Даже если TabBar сделаю в виде ListView. Куда копать? Это ключами делать. Надо вырывать из дерева и переносить к другому паренту?
Пашка
гляньте купертино апп Бар
|