Программирование : Dart & Flutter по-русски
Миша
Ну, просто, может это по-колхозному как-то, поэтому и решил спросить про альтернативу:)
Sergey Hottabych
А зачем его выковыривать? На данный момент самое крутое решение.
Юджин Баладжахе
Флаттер круче чем GetX, я так думаю))
?? ??????????????????????????
Это самое корректное решение)
Sergey Hottabych
Он не переопределяет ничего, только расширяет и добавляет свой функционал
Alexandr Borisovich
Js круче Vue :-)))
Sergey Hottabych
Не нужен. Сделай типа такого:
Sergey Hottabych
Статика — зло. Потом охренеешь, когда понадобится тесты писать или заменить Rest на GraphQL, к примеру.
Eugene Alitz
А машинный код круче даже чем JS??
Sergey Hottabych
У меня такая структура. Плюс-минус нейминг может отличаться (stores могут называться controllers, вместо api — repository и т.д.)
Sergey Hottabych
У меня еще подпроект на Unity (встраиваемый виджет), вот его сделал отдельной репой, и подключил как сабмодуль.
Newbie Developer
Ага, понял. Значит пакеты это оверхед. А про Ди ответ - это не сарказм?
Silent Bezmolvny
Здрасьте. Какими виджетами можно такой механизм подачи теории реализовать?
Sergey Hottabych
Не, DI во Флаттере — это дроч, т.к. он не под это заточен.
Михаил Морозов
Привет, подскажите насколько критично необходимо знать swift java kotlin для разработчика flutter, я правильно понимаю что тавие знания нужны для больших и сложных проектов, а на мелко средних не нужно, или с самого начала без знаний нативое во флаттер лучше не соваться?
Sergey Hottabych
[
"Пока обходился как-то.\nПочти все уже на ",
{
"type": "link",
"text": "pub.dev"
},
" есть."
]
Sergey Hottabych
А если критически нужен натив, проще фрилансера на разовую таску найти.
Eugene Alitz
[
{
"type": "mention",
"text": "@Hottabych"
},
", скажи, а вы у себя контроллеры под каждый виджеты создаёте, или они что-то вроде глобальных сторов в мобх?"
]
Sergey Hottabych
Ну то что на картинке — это как раз глобальные сторы MobX.
Eugene Alitz
Если не будешь взаимодействовать с нативным апи, то и без них проживеш.
Eugene Alitz
То есть вы вместе с гетх и мобх используете?
Sergey Hottabych
Не, это старый проект, он на MobX был полностью.
Михаил Морозов
А доступ к камере, фонарику, и ко всем потрохам айфона это нативное апи?
Eugene Alitz
Да, но для этого есть пакеты специальные. И если не заморачиваться с каким нибудь кастомным поведением, то в большинстве случаев в наивный код не придётся лезть
Sergey Hottabych
Да а какая разница. Ты можешь что в MobX в провайдер обернуть локальный экран в приложении. Что в Get прописать биндинги под отдельный Page
Sergey Hottabych
если об этом вопрос
Eugene Alitz
Вопрос больше в том, как вы используете контроллеры. Для каждого виджета свой независимый контроллер ( что-то вроде ViewController). Или всетаки как глобальные сторы для определённого функционала. И их прокидываешь по надобности
Newbie Developer
Благодарю, теперь понятнее стало. Значит можно одним BLoC обойтись
Sergey Hottabych
Глобальные сторы/контроллеры для глобальных вещей (допустим, инфа о профиле). Локальные для валидации форм, или допустим, страничка логина — там можно локальный стор, который потом удаляется из памяти.
Eugene Alitz
Ок, а глобальные сторы у вас могут взаимодействовать друг с другом?
Sergey Hottabych
А в новом все печально, его писал не очень опытный чувак на чистом провайдере, с кучей двухсторонних зависимостей и статики. Вот сам ломаю голову, как бы за ним переделать.
Sergey Hottabych
Односторонняя только связь. Следующие опираются на предыдущие.
Eugene Alitz
А если есть 2 глобальных, которые параллельно работают. Но есть кейс когда, один должен вызвать метод другого. Это нормально делать напрямую?или нужно извращаться?
Alexandr Borisovich
как правило самые частные нативные функции поддерживаются пакетами от разработчика
Eugene Alitz
А что ты имеешь ввиду под двусторонними зависимостями?
Sergey Hottabych
Напрямую плохо, эти классы будут друг от друга зависеть, ты потом не покроешь тестами. Лучше событийную модель юзать. Второй должен создать reaction (если MobX) или worker (если GetX), и срабатывать при изменениях в первом. Я бы так сделал.
Sergey Hottabych
[
{
"type": "link",
"text": "https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)"
}
]
Eugene Alitz
Но воркер он же следит за своими пнременными? То есть все равно прийдется ему покинуть 2 контррллер
Sergey Hottabych
[
"Вот пример:\n\nProvider (),\nProvider(auth: ",
{
"type": "link",
"text": "ctx.read"
},
"());\n\nв конструкторе класса Profile делаешь\nreaction ( () => auth.isAuth, () => onLogin())\nИ все, и тебе не надо будет из auth напрямую вызывать onLogin. Когда поменяется isAuth, он сам сработает."
]
Eugene Alitz
То есть первый контроллер прокидываешь как зависимость при инициализации второму?
Sergey Hottabych
Проверил на всякий случай, можно ли так в Get — да, все работает. То же самое — создаешь один класс и прокидываешь в следующий.
Dima Kotlyarov
[
{
"type": "mention",
"text": "@bunopus"
},
" монолог Филипа не понравился . Не понятно к чему он ведёт ))"
]
Sergey Hottabych
А в следующем заводишь worker.
Evgeny Kot
Ну вот так) Можно ему в твиттере написать
Sergey Hottabych
А что он сказал?
Evgeny Kot
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=ihI2723hiSw&ab_channel=GDGRussia"
}
]
Dima Kotlyarov
Долго долго к чему то вел , и за секунду окончил фразой - если что то есть написанное на html css то переписать это на флаттер веб - хороший челлендж , но плохая бизнес идея
Sergey Hottabych
чаво?...
Noob Noobskiy
Если я уберу отсюда эти импорты, все работает вроде. Они импортированы отдельно. Если я сотру их с этой страницы, то мне это позже не аукнется?
Timur
Ребят помогите пожалуйста. У меня есть BlocBuilder внутри которого я отображаю список объектов и при нажатии на кнопку хочу удалить один элемент и перерисовать, как подписаться на обновление списка state.list и перерисовывать виджет?
?????? ????
Ну я вот сам приступил изучению флаттера Нужно понимать базу других языков Функции, ооп как минимум
Юджин Баладжахе
BlockBuilder это и есть подписка, каждый вызов это новый state, все обновится само.
Makhmud Ushamiev
Билдер сам перерисовывает виджет, основываясь на данных в стейте. Следовательно, тебе по нажатию на кнопку надо удалить элемент в блоке и yieldнуть новый список без этого элемента, бмлдер сам отрисует новый список
Eugene Alitz
Я думаю, для лучшей изоляции туда не весь контроллер передавать а только ссылку на Observable из него
Sergey Hottabych
Ну, никто не запрещает.
Sergey Hottabych
Можно и так.
Sergey Hottabych
Можно из глобального в локальный контроллер прокинуть зависимость.
Eugene Alitz
Просто иначе будет возникать соблазн работать напрямую с методами
Sergey Hottabych
А ты делай методы приватными.
Sergey Hottabych
И не будет соблазна.
Eugene Alitz
Просто эти методы могут использоваться в аппликации
Sergey Hottabych
Ну вообще конечно, хорошо бы какую-то защиту от дурака сделать... Особенно, когда ты не один на проекте
Sergey Hottabych
типа что из виджета можно дернуть метод, а из другого контроллера нет
Eugene Alitz
Это к вопросу о том, что гетх "нарушает" все принципы чистого программирования ??
Sergey Hottabych
ну видимо да, прокидывать не весь контроллер, а нужный .obs можно еще его в геттер обернуть, чтобы его не поменять извне
Eugene Alitz
Нарушает не гетх а программист
Sergey Hottabych
Нарушают криворукие прогеры.
Sergey Hottabych
гетх — это инструмент, он ничего нарушать не может
Eugene Alitz
Я все Observable оборачиваю в геттеры. Только использую GetX вместо Obs. Он более точечный
Sergey Hottabych
Всм, вместо Obx() ?
Andy Andy
Добрый день. У меня несколько проектов с разными версиями флаттер сдк. Как сделать так, чтобы для каждого проекта отдельный сдк был? Погуглил, предлагают делают несколько инстансов флаттера. Есть что-то элегантнее?
Sergey Hottabych
Я с первого раза не смог правильно прочитать "yieldнуть" ????
Eugene Alitz
Хотя, сейчас перечитал мануал и понял, что ошибся. Obx позволяет внутри отслеживать изменения нескольких контроллеров. А GetX только одного
Миша
А как получить IP для Андроид эмулятора во flutter? (только проверенные способы), а то пытался через get_ip, лажа вышла:(
Eugene Alitz
Очень удобная штука
Sergey Hottabych
Obx к типу контроллера не привязан. Можно вообще не в контроллере завести observable, и он его все равно отследит.
Урусай
Ага, под виндой правда криво работает (
Eugene Alitz
Точно, невнимательно читал
Juko
какой виджет отвичает за вход хочу анимку во вход установить?
Temurxon
всем привет,кто работал с google_mobile_ads вроде все настроил,с тестовым testAdUnitId работает норм,вставляю свой реламный id выводит ошибку
Temurxon
я до релиза вставил свой ид и собрал для playstore
Ilya Goguadze
подскажите какой виджет использовать чт бы создать счетчик ?
Артур
Имеется два ListView, один горизонтальный, другой вертикальный, обернул оба в еще один ListView и вертикальный не работает, а горизонтальный норм, в чем может быть проблема?
Andy Andy
Используй singlechildscollview. Слишком много листвью
Валерий
row(Container(Text(-)), Text(1) , Container(Text(+)))
Ilya Goguadze
не я имею ввиду что бы счетчик работал
Ilya Goguadze
отображал количество нажатий
Валерий
на контейнеры вешаешь inkWell и по ним добавляешь или убавляешь нажатия
Миша
так создай Row, помести туда текст и 2 IconButton, по нажатию выполняй num++, в чем проблема?
Миша
как создаешь проект флаттер, там автоматом кликер создается
Миша
сделай аналогично, добавив -
Ilya Goguadze
Понял щас попробую спасибо
Быков
Добрый день, подскажите, что за ошибка? Я подумал, что может стиль текста не поддерживается, скачал с гугла, но все равно
Быков
где-то написано, что можно скачать расширение, но, а надо ли или есть другой способ решения?
Yo Yo
Всем привет, нужен флаттер супер разработчик) одну задачу не можем решить, минут 10-20 уделите. оплачу. спасибо. подробнее в личку
netspike
Instance of 'UnknownException'
netspike
че это за ошибка? кто скажет
Константин Бобров
Можно просто узнать что за проблема?
Валерий
не передал параметры в конструктор)
Константин Бобров
Бывает. Один раз часа два потратил пока не понял, что функцию не вызвал
Валерий
я вчера 6 раз сервер обновлял не мог понять почему не работают изменения, пока не понял что в другой ветке их делаю
Константин Бобров
Кто использует связку loopback, mongo?
Валерий
такое тоже бывало)
Константин Бобров
Сервера не те прописал и в итоге пользователи пароль не могли восстановить
Константин Бобров
Одногруппник рассказывал как у них чел по мд5 решил дубликаты файлов удалять в пенсионном фонде
Noob Noobskiy
Это лучше чем добавлять 2 IconButton? И почему InkWell а не GestureDetector?
Вадим
InkWell даст ripple эффект при нажатии, а GestureDetector просто его обработает
Noob Noobskiy
Только визуальные отличия?
Валерий
???>? контейнер проще кастануть через boxDecoration, а по инкВел и Жестер детектор ответ выше
Noob Noobskiy
Понял, спасибо
Григорий
Здравствуйте, как добавить такую плашку сразу на все экраны?
Григорий
Или только в каждом экране его через stack создавать?
Dima Kotlyarov
Нет . Почитай по снекбар
Temurxon
[
{
"type": "link",
"text": "https://pub.dev/packages/fluttertoast"
}
]
Григорий
Спасибо большое!
Dima Kotlyarov
Или тост )
Dima Kotlyarov
Вот минус флаттера ещё в том , что в не столько виджетов из под коробки , что нужно реально много времени что бы с ними познакомиться
tdesc
или свой виджет написать
tdesc
вот уж минус так минус
tdesc
еще учить чето там нада
Dima Kotlyarov
Не язви , если ты не знаешь о чем я говорю , значит ты не понимаешь разработку. Надо их не только учить , а в правильный момент вспомнить что где куда и как
tdesc
примерно как с буквами, когда слово составляешь
Evgeny Cherkasov
[
"Ну \"родные\" виджеты запомнить не сложно. Наиболее часто используемых не так уж много, а если что то забыл - недолго в доках посмотреть.\nА вот если нужно что-то специфическое - то уже действительно проблема. Вроде бы в ",
{
"type": "link",
"text": "pub.dev"
},
" и много всего уже есть. Но найти нужное и понять подходит или нет уже гораздо сложнее. Зачастую быстрее свое написать."
]
Dima Kotlyarov
В общем то это я и имел ввиду . Но и "родных" не так мало , одно время я ими плотно интересовался . И скажу - из очень много .
tdesc
за это нам и платят по 300к/секунду
Константин Бобров
может кто кинуть полноценный гайд по экрану загрузки с примерами
Serge Kozlov
Всем привет. Подскажите, пожалуйста, статью или видео, где можно посмотреть как сделать поиск в приложении по файлам json ( в виде списка). У меня есть нижняя навигация и там страница поиска. Хочу чтобы можно было вводить по названию в строке поиска и выводился бы результат поиска ввиде списка
Александр Котков
Ребят, подскажите плз, скачал с гитхаба local_auth плагин открыл example сбилдил релиз апк(Примера) и приложение падает если вызвать авторизацию по пальцу.
Sergey Hottabych
Готового нет. Это 2 кнопки и текст
Темирлан
А что выдаёт когда падает?
Константин Бобров
и на чем тестил?
Александр Котков
падает без ошибки) даже в adb дичь, но щас скину
Александр Котков
[
{
"type": "link",
"text": "https://codeshare.io/G7nMn1"
}
]
Темирлан
FileNotFound пишет
Александр Котков
И что мне это дает?
Александр Котков
я пример не трогал, закачал example и запустил его
Александр Котков
[
"нашёл в логах нормальную ошибку \nInterface androidx.lifecycle.b implemented by class io.flutter.plugins.localauth.AuthenticationHelper is inaccessible (declaration of 'io.flutter.plugins.localauth.AuthenticationHelper' appears in /data/app/io.flutter.plugins.localauthexample-JTkzneVFeYTbOvHZxWz3jA==",
{
"type": "bot_command",
"text": "/base"
},
".apk)\n пойду копать, спс"
]
Vyacheslav
[
"1) написать модель данных для каждого элемента списка json и создать список экземпляров этих моделей из указанного файла (чтение файла легко гуглится read json from file flutter)\n2) посмотреть и повторить реализацию списка с возможностью фильтрации, например, отсюда ",
{
"type": "link",
"text": "https://stackoverflow.com/questions/50567295/listview-filter-search-in-flutter"
},
""
]
Yevhen Ivanov
[
"Привет, всем! У кого-нибудь есть пример реализации диалогового окна на ",
{
"type": "code",
"text": "flutter_bloc"
},
"?"
]
Noob Noobskiy
А можно в BoxFit.cover сделать так, чтобы картинка центрировалась не по центру, а по верхней/нижней части?
Noob Noobskiy
пробовал .fill но она растягивает всю картинку)
Vyacheslav
диалоги - это виджеты, а bloc - это бизнес-логика.... Но вы можете в своих виджетах прослушивать изменение состояния конкретного bloc и вызывать диалоги в нужном случае
?? ??????????????????????????
А что именно хочется? Все просто, блок решает когда показывать диалог, ui показывает
?? ??????????????????????????
Здесь скорее есть бизнес цель контролировать диалоги
Yevhen Ivanov
хочется диалоговое окно показывать и закрывать с помощью пакета flutter_bloc
?? ??????????????????????????
В этом случае такую логику лучше держать в блоке
Назар Кохан
[
"Ребят, привет. Кто в курсе. Как можно вытянуть размер image по ключу НО с учетом fit. Я вот вытягиваю, но у меня картинка фитится и в итоге высота ее меньше чем размер который я получаю по ключу\n\n",
{
"type": "code",
"text": "Image.file"
},
{
"type": "italic",
"text": "(\n "
},
{
"type": "code",
"text": "_image,\n key: _imageKey,\n fit: BoxFit.contain,"
},
"\n)\n\n",
{
"type": "code",
"text": "_imageKey.currentState.context.size"
},
";"
]
Eugene Alitz
У тебя есть fillHeight, fillWidth
?? ??????????????????????????
Например у тебя есть отдельный виджет с провайдером, консумером, он уведомляет блок о закрытых окнах и по стейту блока показывает диалоговые окна
Vyacheslav
если помните, в Камеди была сценка, когда Сталин говорил Берии - "хочу мышью открывать окна" ...
Eugene Alitz
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/painting/BoxFit-class.html"
}
]
Назар Кохан
Цели менять фит картинке нет
Назар Кохан
мне именно надо ее размеры достать.
Yevhen Ivanov
есть пример такой реализации?
?? ??????????????????????????
Нет, там же все просто, зачем пример?
Vyacheslav
[
{
"type": "link",
"text": "https://stackoverflow.com/a/63127054/9631242"
}
]
Eugene Alitz
А, как ты хочешь, чтобы она заняла все отведённое место, и при этом не поменяла размер?
Назар Кохан
Фит уже стоит такой как я хочу. Мне надо поверх картинки виджет поставить акурат в размер картинки.
Yevhen Ivanov
спасибо, попробую
Назар Кохан
Может есть другой способ второй виджет поверх первого повесить точно с размерами первого, но я пока что ничего не придумал, кроме вытягивания размера по ключу.
?? ??????????????????????????
Использовать fill + alignment?
Назар Кохан
Мне не надо менять fit. Тут я походу немного напутал, и походу оно и так норм работает) Я просто чуть не на то подумал) Спасибо
?? ??????????????????????????
Окей)
Vyacheslav
А почему не можешь в контейнер с нужными размерами поместить Stack с картинкой и другим виджетом?
Назар Кохан
Та потому что картинки разные есть по соотношению + я их вращаю, и если картинка в портретной ориентации то при перевороте на 90* она станет намного меньше что бы влезть. Короч я разобрался уже, я просто чуть тупнул. И да, размер вынимался с учетом fit, я тютю)
EcsFlash-
Всем привет, вопрос немного не по теме, но думаю что кто то сталкивался с этим. Так вот, после того как переключаюсь с линукса на Винду, на последней отваливается интернет. Никто не знает в чем прикол?
Sergey Hottabych
Там же вроде BlocListener есть как раз для таких вещей
Урусай
Народ, а ведь приватные члены (с префиксом _) должны быть видны внутри одной библиотеки?
Mykola Shevchenko
В пределах одной либы, но на сколько я помню каждый файл это отдельная либа, и чтобы сделать несколько файлов одной либой используется part, part of. Но могу ошибатся
Урусай
А без part можно обойтись?
Урусай
И нафига тогда library директива нужна?
Mykola Shevchenko
Это вроде для создание своих пакетов, там множно название задать
Artur
Ребята, как правильно работать с темами? Стандартный подход это какая то жопа
Artur
Есть какие то материалы по теме тем?)
Rasul
[
{
"type": "link",
"text": "https://medium.com/flutter-community/themes-in-flutter-part-1-75f52f2334ea"
}
]
Rasul
[
{
"type": "link",
"text": "https://medium.com/@mx_tino/flutter-themes-9cebc0fecd1d"
}
]
Artur
Спасибо, но это описание стандартного подхода
Artur
меня инетерсует что-то более реалистичное, как люди применяют на практике
Rasul
меня в принципе устраивает, только для цветов отдельный файлик, не знаю насколько правильно так
Artur
А как быть с адаптивным размером текста?
Artur
Как быть если встроенных стилей недостаточно?
Artur
Что если нам нужны кнопки разных стилей?
Kirill Bubochkin
Так сделайте свой класс темы и прикидывайте его, как и любые другие данные, через inherited widget, provider etc
Rasul
class SecondTheme { ThemeData secondTheme = ThemeData.light() .copyWith(elevatedButtonTheme: ElevatedButtonThemeData()); }
Artur
Я так и делаю, но наверное должен быть правильный способ
|