Программирование : Dart & Flutter по-русски
Константин Бобров
Ну тут у меня провайдер
Константин Бобров
И стримы
Viktor Subbotin
Доброго дня, всем.Не нашел в правилах можно ли публиковать информацию о работе. Мне нужно в моем приложении на flutter логику работы в двух экранах. За деталями пишите в личку.
Sergey Hottabych
А чистый провайдер хорош, пока не упрешься в следующие ситуации: — несколько последовательных экранов (регистрация), проваливаешься все глубже, и потом нужно на первом экране перезапустить FutureBuilder (подменить в нем фьючу и ребилднуть) — в ответ на изменения в контроллере должен произойти side-effect в UI (показать диалог, перейти по навигатору). Хотя это можно решить стримом. Но это надо создавать стрим в контроллере, закидывать в него событие, подписываться на него в виджете, в общем, опять костыли.
Sergey Hottabych
И я уже 100 раз писал. Простой тестик. Создай модель — City, в ней вложенный List , в ней Map (номер дома / модель), в ней Set. Добавить один Room. И попробуй Selector'ом провайдера отследить изменение коллекции.
Sergey Hottabych
Он тебе не перебилдит.
Sergey Hottabych
"Не увидит" изменение.
Sergey Hottabych
А Consumer'ами быстро производительность посадишь.
Sergey Hottabych
Блоком это не решить. В нем нет средств для решения этой проблемы. А в MobX есть — Observable и ObservableList/Map/Set И в GetX есть — Rx-типы, соответственно.
#elvin
Добрый день Как можно обратится к свойству в firebase Db.collection('test').doc('id').title такова типа запись как будет рравильной
Mitai
[
{
"type": "link",
"text": "https://t.me/dartlang_jobs"
}
]
Andrey
Подскажите пожалуйста, как я могу перенести фото, которое хранится в директории приложения в галерею ? пробовал GalerySaver, но он работает только с фотографиями в интернете. UPD работает и с локальными файлами но реакции никакой
Andrew Shalaev
пермишн прописали в манифесте же?
Andrey
Это было глупо с моей стороны, спасибо за помощь
Daniil Kostin
Кто-нибудь знает возможно ли отображать html в куске виджета(на чсасть экрана), при этом чтобы можно было весь контент выделять и копировать в буфер на Android/iOS?
Eugen2k
Подскажите, пожалуйста, есть ли удобный инструмент для дизайна приложения? Что-то на подобии wysiwyg редактора? В Android studio во flutter, к сожалению ничего не нашел
Anton Kowalski
Где можно посмотреть описание версий flutter? Что нового, что обновили?
Урусай
У флаттер тимы с этим тяжко
Урусай
[
{
"type": "link",
"text": "https://groups.google.com/g/flutter-announce?pli=1"
},
"\nМожешь тут попробовать посмотреть"
]
Anton Kowalski
Че вообще ничего не пишут?
Урусай
[
{
"type": "link",
"text": "https://flutter.dev/docs/development/tools/sdk/release-notes"
}
]
Anton Kowalski
то есть детальных обзоров нету на мелкие обновления?
Урусай
[
{
"type": "link",
"text": "https://medium.com/flutter/announcing-flutter-1-22-44f146009e5f"
}
]
Vyacheslav
Всем привет! Подскажите, как по дефолту сделать относительные импорты в VS Code?
Темирлан
[
"Я создаю AlertDialog\n",
{
"type": "code",
"text": "Navigator."
},
{
"type": "italic",
"text": "push"
},
{
"type": "code",
"text": "(context, PageTransition(\n child: NewFolderPopUp(),\n type: PageTransitionType.fade,\n duration: Duration(milliseconds: 300))\n);"
},
"\n\n\n",
{
"type": "code",
"text": "return AlertDialog(\n title: Text(\"Enter folder name\"),\n content: Center(\n child: TextField(\n controller: controller,\n style: TextStyle(\n fontSize: 22,\n color: Colors."
},
{
"type": "italic",
"text": "black"
},
{
"type": "code",
"text": "),\n decoration:\n SegerItems."
},
{
"type": "italic",
"text": "textFieldDecoration"
},
{
"type": "code",
"text": ",\n ),\n ),\n actions: [\n TextButton(\n onPressed: (){\n Navigator."
},
{
"type": "italic",
"text": "pop"
},
{
"type": "code",
"text": "(context);\n },\n child: Text(\"Add Folder\")\n )\n ],\n);"
},
""
]
Темирлан
Выходит так, фон черный, хотя думал что будет прозрачным.
Темирлан
И размер во весь экран по width
Темирлан
Что ч делаю не так
Темирлан
В туториале выходит такой
Темирлан
Да размер надо было поменять у контейнера и opaque:false сделать
Темирлан
Люди а вот такой вопрос? как можно сделать Navigator.pop() тогда, когда AlertDialog показан, при нажатии на фоновый экран
Урусай
barrierDismissable
Ali Isyanov
Всем привет, подскажите почему override таким образом больше нельзя сделать??
Урусай
А стейт то сам есть?
Sergey Hottabych
[
"Мы вот эту штуку юзали.\n",
{
"type": "link",
"text": "https://pub.dev/packages/flutter_widget_from_html"
},
"\nПарсит html в виджеты"
]
Sergey Hottabych
Даже ссылочки рабочие, нажимаются.
Daniil Kostin
Но выделение не работает
Темирлан
Для такого свайпа что нужно использовать?
Алексей Корпатенков
[
{
"type": "link",
"text": "https://pub.dev/packages/flutter_slidable"
},
" или свою реализацию на основе этой"
]
Sergey Hottabych
Он конвертит в флаттеровский Text
Sergey Hottabych
Он не выделяется Тебе нужен SelectableText
Sergey Hottabych
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/SelectableText-class.html"
}
]
Sergey Hottabych
Надо что-то придумать, чтобы в него конвертил по умолчанию
Vyacheslav
Можно форкнуть плагин и там немного поправить, я так делал именно с этим плагином, но по другой теме (вырезал лишние фичи, из-за которых были проблемы)
Sergey Hottabych
ну вот я смотрю в настройках, там какие-то CustomWidgetBuilder, WidgetFactory — возможно, можно как-то твикнуть стандартную конвертацию
Sergey Hottabych
без форканья
Vyacheslav
и потом так добавлять
Ali Isyanov
Старечки, дайте ответ, полюбому знаете что изменилось. Пример из книги Dart apprentice, но он не робит,спасибо
Daniil Kostin
Ок, попробую. Там PR есть на это, но он не рабочий
Daniil Kostin
Pull Request
Vyacheslav
а, не понял)) думал public relationship ??
Daniil Kolyasnikov
Пример неправильно написан, должнл быть 2 класса виджет и стейт
Serge Kozlov
Всем привет. У меня есть коллекция products с полями title, description и тд в Firestore, подскажите как мне вывести эти поля из firestore в grouped_list ? Я подключил firestore и сделал инициализацию. Не могу понять как это все вынести в GroupedListView ( elements: _elements, groupBy: (element) => element['group'], groupSeparatorBuilder: (String groupByValue) => Text(groupByValue), itemBuilder: (context, dynamic element) => Text(element['name']), itemComparator: (item1, item2) => item1['name'].compareTo(item2['name']), // optional useStickyGroupSeparators: true, // optional floatingHeader: true, // optional order: GroupedListOrder.ASC, // optional ),
Sergey Hottabych
[
"Никто это руками не пишет, есть готовые сниппеты ",
{
"type": "code",
"text": "stless"
},
" и ",
{
"type": "code",
"text": "stful"
},
""
]
Ali Isyanov
Спасибо, оказалось описание стейткласса ниже в книге, а я получается ссылался на несуществующий стейт
EcsFlash-
Там курс появился бесплатный, у Bizzotto
Saruar Shamshiyev
Приветствую, а можно подробнее? На Udemy три курса у него, все платные. В раздачах на rutracker тоже ничего нового нету)
Mitai
[
"Успейте получить бесплатный доступ к курсу ",
{
"type": "bold",
"text": "Andrea Bizzotto"
},
" под названием ",
{
"type": "bold",
"text": "\"Flutter & Firebase: Build a Complete App for iOS & Android\""
},
". В нем вы создадите ",
{
"type": "bold",
"text": "Flutter"
},
" приложение для Android и iOS, используя Firebase.\n",
{
"type": "link",
"text": "https://courses.codewithandrea.com/p/flutter-firebase-time-tracker-app"
},
""
]
EcsFlash-
[
"Успейте получить бесплатный доступ к курсу ",
{
"type": "bold",
"text": "Andrea Bizzotto"
},
" под названием ",
{
"type": "bold",
"text": "\"Flutter & Firebase: Build a Complete App for iOS & Android\""
},
". В нем вы создадите ",
{
"type": "bold",
"text": "Flutter"
},
" приложение для Android и iOS, используя Firebase.\n",
{
"type": "link",
"text": "https://courses.codewithandrea.com/p/flutter-firebase-time-tracker-app"
},
""
]
Saruar Shamshiyev
Благодарю ???
Robert Smith
а в чем проблемы с GetX конкретно?
Robert Smith
с виду очень привлекательно
Daniil Kolyasnikov
В чем проблема с вордпресс ?
Robert Smith
а ты еврей?)
Daniil Kolyasnikov
Наполовину. А у тебя проблемы с евреями?
Eugen2k
Господа, подскажите, пожалуйста, в чем вы приложения рисуете?
Daniil Kolyasnikov
Вопрос наводящий просто
Robert Smith
лично у меня нет, я имею в виду что отвечать вопросом на вопрос не очень продуктивно
Robert Smith
вопросов всегда больше чем ответов
Robert Smith
в среде разработки с использованием спец синтаксиса
Eugen2k
То есть, визуальных редакторов нет?
Daniil Kolyasnikov
Окей. Getx для быстро накидать хорош, но чистую архитектуру на нем реализовать сложнее, чем с использованием другой либы. Легче говнокодить, сложнее писать хорошо
Robert Smith
чистую в плане?
Daniil Kolyasnikov
Нет, дл флаттера их нет, есть прототипы, но они пока не готовы
Dmitry Bubnenkov
Другую - какую?
Eugen2k
Ого, спасибо за ответ
Daniil Kolyasnikov
Bloc, provider, riverpod
Dmitry Bubnenkov
В чем чистота?
Daniil Kolyasnikov
Это название подхода чистая архитектура
Daniil Kolyasnikov
Нарицательное словосочетание
Dmitry Bubnenkov
А минусы не чистой? Это же вкусовщина, не?
Andrew Shalaev
Дядюшка Боб перевернулся во сне наверное
Dmitry Bubnenkov
Кто это?
Robert Smith
просто getx позиционируется как быстрое решение, уменьшающее количество кода и ускоряющее разработку
Daniil Kolyasnikov
Быстрее- качественее- дешевле
Daniil Kolyasnikov
Выбери одно
Daniil Kolyasnikov
Getx - минус масштабируемость и понимание проектв
Daniil Kolyasnikov
Но скорость выше
Dmitry Bubnenkov
Просто иногда может быть равно хорошо и качественно
Daniil Kolyasnikov
Быстро закидать пойдет
Robert Smith
а масштаб приложения не учитывается?
Dmitry Bubnenkov
В какие моменты будут проблемы и узкие места?
Daniil Kolyasnikov
Ты просто перестанешь понимать, что происходит через неделю
Robert Smith
приложение имеет роль вьюхи в основном, логика на бэке вся
Dmitry Bubnenkov
Так обычно проще перестать понимать когда много кода
Эмиль
Ребята, подскажите, пожалуйста. Есть хом скрин с лист билдером, который загружает карточки людей. Так же по индексу есть профиль каждого человека, в профиле повторно выводится список "Другие люди", но там дублируются и карточка человека на чьей странице я нахожусь, подскажите, пжлст, как ее отсортировать, чтобы выводились все люди, кроме того, на чей странице я нахожусь
Dmitry Bubnenkov
GetX вроде бы снижает количество кода
Robert Smith
почему? вот это не понятно,есть же причина
Ivan Nagornyi
Кто то сталкивался вот с какой проблемой? Есть ListView загружаемых с облака фоток, когда скролю вниз все ок, когда начинаю скролить вверх, ListView ведет себя странно, а имнно автоматом выбрасывает почти в самое начало списка. Кто сталкивался, кто как решал?
Daniil Kolyasnikov
You won't need to create StreamControllers. You won't need to create a StreamBuilder for each variable You will not need to create a class for each state. You will not need to create a get for an initial value. You will not need to use code generators
Robert Smith
ну да все в одном контроллере
Robert Smith
и его передаешь в DI, а потом коллишь где угодно
Daniil Kolyasnikov
Тебе обещают уменьшение кода - ты теряешь контроль, ты не знаешь как все работает под капотом = не понятное поведение
Daniil Kolyasnikov
Но это правда натянутая критика
Dmitry Bubnenkov
Очень натянутая. Флаттр и так как черный ящик выглядит
Daniil Kolyasnikov
Кому как.
Robert Smith
я еще не пробовал, посмотрим
#elvin
Hello how can help me with firebase cloud
Daniil Kolyasnikov
Мой главный аргумент - getx расслабляет и позволяет говнокодить, просто запихать в di без инверсии зависимостей. Более того они на одном фреймворке ревлизуют другой фреймворк. Зачем ? Зачем второй императивный навигатор ? Зачем снэкбары в одной упаковке с state manager. Выглядит как jquery
Dmitry Bubnenkov
Против чистого js?
Daniil Kolyasnikov
Против чистого js 2021 года
Урусай
Почему против чистого js то? Флаттер из коробки уровня реакта
Daniil Kolyasnikov
Видел по работе 2 средних проекта написанных на getx, оба недописаны и брошены, потому что их разработчики просто не хотят видеть свой говнокод
Dmitry Bubnenkov
Не факт что на провайдере было бы лучше...
Daniil Kolyasnikov
Я конечно могу ошибаться, но на провайдере + changeNotifier с попыткой в mvvm, есть шанс написать хороший код. В getx нужно говнокодить
Dmitry Bubnenkov
Ну хз. Меня тут от провадйера отвратить успели за пару часов)
Dmitry Bubnenkov
GetX показался логичным
Daniil Kolyasnikov
Пробуй. На самом деле слушай критику, но думай своей головой. Может тебе зайдет и ты нас потом переубедишь
Daniil Kolyasnikov
Я бы посоветовал потыкать mobx.
Robert Smith
рофл, что за драма ахах, ужас
Dmitry Bubnenkov
Кодогенерация блин зло... это полная потеря контроля...
Семён undefined
ты бы лучше свои слова обосновывал, а не обсирал, а потом "ой ну ти сам ришай"
Daniil Kolyasnikov
Заказчик выкинул лям, а разрабы сказали мы больше не хотим дорабатывать и бегал искал кто продолжит доработку. Как по мне это пиздос, а не драма
Robert Smith
я его понимаю вполне очень полезная инфа
Семён undefined
ну тогда ты обоснуй вместо него
Robert Smith
че тебе обосновать?
Daniil Kolyasnikov
Ну не совсем. Сгенереный код можно глянуть, рефлексию никак не глянуть
Семён undefined
>Видел по работе 2 средних проекта написанных на getx, оба недописаны и брошены, потому что их разработчики просто не хотят видеть свой говнокод >В getx нужно говнокодить у меня вопросы к этим словам
Dmitry Bubnenkov
Но если надо ты его уже не поправишь...
Anton Kowalski
Как узнать тему приложение темная или светлая?
Вадим
Theme.of(context).brightness
Robert Smith
как я понял, getx дает большую свободу в плане смены вектора в пользу декларативного программирования, давая бОльшую свободу, в результате чего можно через некоторый промежуток времени понять что твой код дерьмо
Daniil Kolyasnikov
2) самое банальное - навигатор вне контекста и дерева виджетов. Декларативность мертва
Семён undefined
ну, это проблемы разработчиков, раз они не умеют в архитектуру
Anton Kowalski
И что оно вернет?
Вадим
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/ThemeData/brightness.html"
}
]
Семён undefined
упрощение кода
Daniil Kolyasnikov
2) var name = 'Jonatas Borges'.obs; Это вообще как
Вадим
== Brightness.dark true - темная false - светла
Семён undefined
это называется сахар
Robert Smith
это реактивная парадигма
Daniil Kolyasnikov
Это называется неочеидность
Anton Kowalski
Понял спасибо
Robert Smith
[
"да, типы меняются, но ты же можешь к типу обратиться ",
{
"type": "code",
"text": "name.value"
},
""
]
Семён undefined
ну человек один раз посмотрит доки и будет ему очевидно
admin
Привет, не могу понять в чём проблема
Daniil Kolyasnikov
Ты объявил стрингу, она стала observable, как здесь сохранить статическую типизацию ?
Daniil Kolyasnikov
Ты даже тип прописать не можешь для ide и подсветки
Daniil Kolyasnikov
Я могу ошибаться, но в моем мире это лютейший говнокод
Семён undefined
Rx ('text')
Daniil Kolyasnikov
var name = 'Jonatas Borges'.obs; Данные у тебя стринга, но переменная ссылается на observable объект
Daniil Kolyasnikov
Rx это что ?
Семён undefined
ну и? в чём проблемы? name.value
Daniil Kolyasnikov
Это в getx ?
Семён undefined
если неудобно, то делаешь сеттер
Daniil Kolyasnikov
Не вижу в доке класса rx(
Андрей Кузьмин
Ребят, а есть какие нибудь задачи по разработке, от самых простых к сложным?
Daniil Kolyasnikov
В доке этого нет
Семён undefined
есть только задачи с яблоками
Robert Smith
[
"в ",
{
"type": "link",
"text": "readme.md"
},
" на главной getX"
]
Anton Kowalski
написал themeMode: ThemeMode.dark, а Theme.of(context).brightness возвращает light, почему?
Robert Smith
там оглавление есть
Семён undefined
darkTheme задан?
Семён undefined
в MaterialApp
Вадим
[
"У ",
{
"type": "link",
"text": "https://api.flutter.dev/flutter/material/ThemeData-class.html"
},
" есть brightness поле, там указать"
]
Вадим
или можно использовать ThemeData.dark()
Robert Smith
хз самая норм задача это какой то проект
Anton Kowalski
theme: ThemeData.dark(), написал так сработало
RV
спасибо взял на заметку
Andrey
Какая-то биполярочка, что не так?
Урусай
Странности. Может анализатор заглючил?
Урусай
А frame.image не nullable?
Andrey
Че за приколы от флаттера
Sergey Hottabych
Ну они говнокодеры. GetX-то тут при чем?
Sergey Hottabych
[
"Плохо ищешь.\n",
{
"type": "link",
"text": "https://pub.dev/documentation/get/latest/rx_types/rx_types-library.html"
},
""
]
Sergey Hottabych
там в каком-то из апдейтов они сделали геттеры для примитивных типов, теперь даже value писать не нужно его пишут только для своих классов
Sergey Hottabych
Прояви смекалку, наведи курсор мышки на var, и IDE тебе подскажет тип :)
Sergey Hottabych
[
"В GetX мануал немножко разрозненный.\nВот тут есть еще доки ",
{
"type": "link",
"text": "https://github.com/jonataslaw/getx/tree/master/documentation/en_US"
},
"\nИ дофига инфы в Changelog, которую они не занесли в доки."
]
Sergey Hottabych
Вот, нашел. 3.7.0
Sergey Hottabych
Ещё вот. 3.2.0 Сделали шорткат и для model классов Про это я и сам не знал ))
Dmitry Doroshin
У тебя асинхронный метод, а ты возвращаешь future
Dmitry Doroshin
Ты должен вернуть Image
Семён undefined
нет это флаттер говно вы не понимаете
Sergey Hottabych
GetX говно
|