Программирование : Dart & Flutter по-русски
Mike
Где?) какой сегмент приложений?)
Аурел
Ну в скраме работают по спринтам 2-х недельные промежутки обычно
Аурел
Сегмент приложений как понять?
Mike
Я знаю что такое спринты) вопрос был про компанию или хотя б категория приложения, чтоб понятно было, какие сложные участки задач
Mike
Ну попробуй графики сложные порисовать
Mike
Ну вот в таких приложениях чаще всего геморройнее — графики/диаграммы
Mike
Посмотри статистику в любом банковском приложении или графики в брокерских приложениях
Mike
Навигатор2 попробуй, если вдруг не пробовал
Mike
Еще мультистеп формы, например, как у тинькофф при выпуске карты
Аурел
Я не из России поэтому не знаю как они выглядят в тинькоффе )))
Аурел
Попробую сделать,что ты сказал:))
Аурел
А сложно сделать апдейт с 1 на 2 навигацию?
Mike
А точно нужно? Как мне кажется, в простых приложениях можно и старым пользоваться.
Mike
Раньше из всей формы оставляли на весь экран выделенное поле, можно было вернуться ко списку всех полей, но в визуально оно выглядело очень целостно
Rizz
Подскажите. Сделал смену темы используя cubit. Как при перезапуске приложения сделать так чтоб запускалось с темой которую выбрал перед перезапуском?
Амантур
Здравствуйте добрые люди) Кто знает как это исправить? Ничего не могу написать просто выводить эту надпись (??). (Простите что пишу сюда не по теме группы, но я не знаю куда ещё писать). Буду рад любой помощи.
Ibragim
Используй SharedPreference
Rizz
Использую. Незнаю куда его воткнуть. В самом кубите проверять что там лежит в shared или где?
?? ??????????????????????????
Там ричтекст, прозрачный элемент + стек
Пашка
сделал с widget span
?? ??????????????????????????
Покажешь?
Пашка
ну только позже, в личку пикни
?? ??????????????????????????
Тогда ладно, просто интересно может что-то новое придумал ??
Пашка
ну там тоже рич текст просто вместо текст спанов виджет спан
?? ??????????????????????????
Если оригинальный текст занимает всю нижнюю строку то все равно только прозрачным элементом + стеком решается
?? ??????????????????????????
Понял что такое виджетспан)
?? ??????????????????????????
Тогда я знаю решение, Окей)
admin
Здравствуйте, есть у кого книга Flutter на практике, Фрэнк Заметти?
Vyacheslav
Да, при смене темы записывай туда, что выбрано, а при старте приложения проверяй, какую нужно показать
Rizz
С записью проблем нету. Проверить немогу, пишет типо getBool null
Rizz
Но он не null, потому что на экран его вывести я могу
Rizz
Мне кажется я пытаюсь позвонить туда раньше чем прошла инициализация
Щерба Константин
Всем привет! Существует библиотека для iOS которая зашита под uiviewcontroller, есть ли возможность открыть ее через channels во flutter, на android удалось так как в плагине есть возможность получить activity
Mikl Night
[
"Всем салют, хочу менять тему приложения на лету, и стараюсь писать хорошо..\n\nнашёл пример на гите, 3х летней давности, боюсь что по меркам flutter'а это раритет... норм так делать, или стоит юзать flutter_bloc, или cubit\n\n\n",
{
"type": "link",
"text": "https://github.com/jorgecoca/theme_switcher/blob/theme-switcher-tutorial-1/lib/main.dart"
},
""
]
Temurxon
[
{
"type": "link",
"text": "https://pub.dev/packages/adaptive_theme"
}
]
Temurxon
можете и через Provider менять
Temurxon
он сейчас популярен
?? ??????????????????????????
У меня есть блок, который отвечает за темы/языки и иные сеттинги
?? ??????????????????????????
Все работает на лету, холодным стартом берет последние значения, по действиям в ui меняет и перерисовывает
Mikl Night
О, то что надо, наверное с провайдером разберусь, а то я накидал всяких builder'оф, получилось не очень) Но если есть референс на гите буду очень рад)) А то авторизация и слешскрин у меня тоже пока через.. говнокод)
Andrei Pavlov
В правом нижнем углу окна проверь иконку замочка, должен быть открыт
Ivan Nazarov
MaterialApp(darkTheme: ThemeData(...), lightTheme: ThemeData(...), theme brightness:, ThemeMode: themebrightness.system); или что-то типа не подходит?
Миша
Ребят, а почему при http запросе post нет функции у response .then(){}?
Миша
или мб обходные пути есть какие?
Миша
[
"а разве дальнейшие операции при await будут ждать завершения функции ",
{
"type": "link",
"text": "http.post"
},
"?"
]
admin
Почитал про Flutter, так понравилось всё это дело. До этого учил Python, что посоветуете со старта? Учить Dart, или сразу лесть в Flutter?
Миша
да можешь сразу лезть
admin
Мнение разделилось.
Миша
только по началу будут запары при таком случае с асинхронным
ManBearPig
язык . на него не много времени уйдет ну а дальше архитектуры
admin
В Dart углубляться, или пройти книжку поняв синтаксис и начинать бахать мой Флаттер?
Миша
ну, я в самом Дарте изучал все по мере необходимости, т е сначала поиграл с дизайном, всякое такое. Затем, когда наступила пора работать с бд, начал асинхронное изучать
Maksim
Познать базу дарта, а потом сам флатер
admin
Можно в личные отпишу интузиасту который сделает роадмап для новичка?
Maksim
В интернете уже есть есть
Миша
ибо смысл... Ну прочтешь ты книжку, начнешь флаттер изучать, и все, что уже читал, забудешь
admin
Мне больше на практике нравится разбираться
admin
И по моменту разбираться
admin
Но я говорю о Дарте
admin
Есть что-нибудь подобное у Вас?
Миша
так там естт глава целая дару посвящённая
admin
Не заметил, большое спасибо!
admin
А ещё у них есть крутой облачный сервис
admin
Адаптивный под телефон
admin
Так что можно не отрываться
admin
Там даже через эмулятор можно запустить
ManBearPig
[
"Дорожную карту Вам скину ",
{
"type": "link",
"text": "https://github.com/olexale/flutter_roadmap.git"
},
""
]
Миша
Мой совет: если хочешь изучить прям нормально все-все-все, то сам себе задачи делай и выполняй их
Александр
Кто подскажет, есть Column с элементами 1,2,3. а как сделать что бы список был 3,2,1?
Александр
column генерируется через .map
Vadim Popov
ревертни сам список
Serge Kozlov
Привет! Ребят, совсем не могу понять как мне сделать поиск по моим спискам. У меня есть файлы расширением dart, в них хранятся List с характеристиками товаров. В приложении есть нижняя навигация со страницей поиска. Можете подсказать статью или видос как сделать поиск по всем этим файлам, чтобы пользователь ввел текст и ему отобразились карточки товара содержащие вводимое название. Все что я нашел это поиск по файлу json, только у меня все хранится в обычных списках. Совсем запутался
Дмитрий Щербаков
смотря какой тебе поиск нужен (полнотекстовый или тупо по началу/концу строки, вхождению слова)
Дмитрий Щербаков
посмотри woozy в пабе
Konstantin Zhogolev
Ни Джейсон а джейсон
DeniskaAb
[
{
"type": "link",
"text": "https://dart.dev/codelabs/iterables"
}
]
Serge Kozlov
мне поиск буквально по 1му слову нужен,
Дмитрий Щербаков
ну тебе нужен метод который будет возвращать новый список, в котором элементы содержащие это слово
Дмитрий Щербаков
на onChange в поле ввода дергаешь этот метод
DeniskaAb
[
{
"type": "link",
"text": "https://www.google.com/search?q=dart+List+search"
}
]
Konstantin Zhogolev
Тогда тебе в другой чат, тут flutter по -русски
admin
Спасибо за совет, учту!
DeniskaAb
Советуйте нормально, ему нужно итерировать по листу, брать элемент, проверять поле элемента на необходимое значение, и возвращать то, что ему нужно, а не неведомое "слово"
Anastasi
всем привет! кто-то сталкивался с такой проблемой, как ее решить?
Anastasi
код моего HomeScreen
Anastasi
[
"void initState() {\n final applicationBloc =\n Provider.of (context, listen: false);\n\n //Listen for selected Location\n locationSubscription =\n applicationBloc.selectedLocation.stream.listen((place) {\n if (place != null) {\n _locationController.text = ",
{
"type": "link",
"text": "place.name"
},
";\n _goToPlace(place);\n } else\n _locationController.text = \"\";\n });\n\n applicationBloc.bounds.stream.listen((bounds) async {\n final GoogleMapController controller = await _mapController.future;\n controller.animateCamera(CameraUpdate.newLatLngBounds(bounds, 50));\n });\n super.initState();\n }\n\n ",
{
"type": "mention",
"text": "@override"
},
"\n void dispose() {\n final applicationBloc =\n Provider.of(context, listen: false);\n applicationBloc.dispose();\n _locationController.dispose();\n locationSubscription.cancel();\n boundsSubscription.cancel();\n super.dispose();\n }\n\n ",
{
"type": "mention",
"text": "@override"
},
"\n Widget build(BuildContext context) {\n final applicationBloc = Provider.of(context);\n\n return Scaffold(\n body: (applicationBloc.currentLocation == null)\n ? Center(\n child: CircularProgressIndicator(),\n )\n : ListView(\n children: ["
]
Anastasi
вот еще сам класс ApplicationBloc
Anastasi
class ApplicationBloc with ChangeNotifier { final geoLocatorService = GeolocatorService(); final placesService = PlacesService(); final markerService = MarkerService(); //Variables Position currentLocation; List searchResults; StreamController selectedLocation = StreamController(); StreamController bounds = StreamController(); Place selectedLocationStatic; String placeType; List placeResults; List markers = List();
ApplicationBloc() { setCurrentLocation(); }
setCurrentLocation() async { currentLocation = await geoLocatorService.getCurrentLocation(); selectedLocationStatic = Place( name: null, geometry: Geometry( location: Location( lat: currentLocation.latitude, lng: currentLocation.longitude), ), ); notifyListeners(); }
searchPlaces(String searchTerm) async { searchResults = await placesService.getAutocomplete(searchTerm); notifyListeners(); }
setSelectedLocation(String placeId) async { var sLocation = await placesService.getPlace(placeId); selectedLocation.add(sLocation); selectedLocationStatic = sLocation; searchResults = null; notifyListeners(); }
admin
зачем сюда код кидать
admin
ещё бы с телефона сфотографировал
Anastasi
я думала, что без него не ответят на вопрос
admin
нет, есть онлайн-сервисы, в которых всё выглядит прилично
Anastasi
точно( оформим в следующий раз
Миша
хорошая практика, всегда так делаю
Александр
Господа, а можно ли воткнуть в карусель виджета flutter_swiper автогенерируемые страницы, используя api? Кто-нибудь пробовал сделать такое?
Anton
стрим бюлдер тебе в помощь
Александр
Спасибо, ознакомлюсь
Михаил Морозов
Добрый день, кто то читал данную книжку Flutter на практике Фрэнк Заметти ?
Andrey Unger
книги устаревают еще до момента выхода, но основы оттуда подчерпнуть можно всегда
Anton
[
"ну основы можно и с ",
{
"type": "link",
"text": "flutter.dev"
},
" подчерпнуть"
]
Anton
и с пары тисяч видео на ютубе
Михаил Морозов
а из этой пары тысяч видео много нормальных и не устаревших? конкретные каналы на примете есть?
Anton
смотри заходишь в ютуб и смотришь дату видео
Andrey Unger
[
"Господа, никто не знает чего-то более универсального чем ",
{
"type": "link",
"text": "https://pub.dev/packages/honeywell_scanner"
},
" ? подходящего под все приборы а не только под эту фирму. Вообщем нужен сканер баркодов но не через камеру а через отдельный датчик. Никто не сталкивался?"
]
Anastasi
[
"продублирую свой вопрос, как исправить ошибку с провайдером? кто-то сталкивался с таким?) ссылка на соответствующие файлы ",
{
"type": "link",
"text": "https://github.com/lem-anari/flutter-pharma"
},
""
]
Anton
у тебя в ошибке написано
Anton
ты использовала контекст без провайдера
Anastasi
я понимаю, что он в дебаге пишет, но на практике исправить не могу(
Сергей Переходов
пересобери приложение
Anastasi
делала уже несколько раз
Сергей Переходов
ты используешь hot reload он не компилирует а просто интерпрепирует измениния
Сергей Переходов
об этом речь на скрине телефона
Anastasi
это одна из возможных ошибок, как говорит дебаг, по этому, я пересобирала проект заново, а не просто хот релоадом
Anastasi
в чем-то другом там проблема
Сергей Переходов
я не работал с провайдером но судя по ошибке и логике работы провайдера в блоке у тебя провайдер не знаходится в контексте который ты вызываешь этот экран, используй билдер для этого
Сергей Переходов
[
{
"type": "link",
"text": "https://prnt.sc/10rjjwl"
}
]
Anastasi
хорошо, попробую еще
Radomir Epur
А что выше HomeScreen по дереву? Ты там где-то создаешь экземпляр класса ApplicationBloc? Чет мне кажется что нет.
Roman Kulshin
Работяги, как узнать активен ли в данный момент textformfield?
Roman Kulshin
А как именно?
Radomir Epur
В интернетах все есть. Мог бы и погуглить. Создаешь экземпляр класса FoucusNode, передаешь его в TextFormField в параметр focusNode. Когда надо проверить просто обращаешься к геттеру focusNode.hasFocus.
Anastasi
действительно, выше по дереву только навигация к этой странице и не создаю экземпляр АpplicationBloc ????
?iriu?
Здравствуйте все! Подскажите пожалуйста, как можно отобразить изображение из List
Radomir Epur
Поняла что делать надо?
Anastasi
если я его создам в этом же классе homeScreen, как мне переписать провайдер
Anastasi
если честно нет(
Radomir Epur
[
"Два варианта: Если тебе нужен экземпляр класса ApplicationBloc ниже по дереву(в дочерних виджетах HomeScreen), то создаешь привычным образом экземпляр класса ",
{
"type": "code",
"text": "final applicationBloc = ApplicationBloc();"
},
" \nпотом оборачиваешь свой HomeScreen в ",
{
"type": "code",
"text": "Provider.value()"
},
" и передаешь ему экземпляр класса, который ты создала(applicationBloc). Таким образом можешь обращаться из дочерних виджетов ",
{
"type": "code",
"text": "Provider.of (context)"
},
". Если же тебе ниже по дереву этот ApplicationBloc не нужен(планируешь использовать только в HomeScreen). То достаточно только создать экземпляр класса и из HomeScreen обращаться к нему напрямую ",
{
"type": "code",
"text": "applicationBloc.someMethod()"
},
" вместо ",
{
"type": "code",
"text": "Provider.of(context).someMethod()"
},
""
]
Radomir Epur
[
"вместо гита для шэйринга кода в таких целях рекомендую использовать ",
{
"type": "link",
"text": "https://pastebin.com"
},
""
]
Anastasi
хорошо, спасибо огромное!! буду пробовать
Anastasi
просмотрела, удобная вещь, тоже спасибо за совет!)
Radomir Epur
[
"Должно получится что-то типа такого(писал на память, мог где-то ошибиться):\n\n",
{
"type": "code",
"text": "final applicationBloc = ApplicationBloc();\n\n@override\n void initState() {\n // ...\n super.initState();\n }\n\n @override\n void dispose() {\n applicationBloc.dispose();\n // ...\n }\n\n @override\n Widget build(BuildContext context) {\n\n return Provider.value(\n value: applicationBloc,\n child: Scaffold("
},
""
]
Юджин Баладжахе
[
"У самого такая проблема. Решил следующим образом. Дочерний блок принимает параметром ссылку на родительский блок. В мультиблокпровайдере при создании дочернего передаём туда явно родительский. create: (_) => ChildBloc(",
{
"type": "link",
"text": "context.read"
},
" ())"
]
Альберт
Так же сделал)) почему то сразу не подумал что можно в конструктор передавать сразу все что понадобится.
Юджин Баладжахе
Конечно через жёппу это, от внедрения зависимостей мы скатываемся к дриллингу параметров. Но что поделать, это флаттер...
iskander
[
"Ребят подскажите плес, как видеопоток добавить в свое приложение ",
{
"type": "link",
"text": "http://50.246.145.122/cgi-bin/faststream.jpg?stream=half&fps=15&rand=COUNTER"
},
""
]
.
Всем привет, есть список newss состоящий из элементов класа News. Как можно отсортировать список newss по параметру date ?
Nikita Kanunov
Здравствуйте, куда можно копать, чтобы сделать кнопки, наподобие этого?
Nikita Kanunov
Это не табы, а кнопки в теле Scaffold
Nikita Kanunov
А если в material?)
Nikita Kanunov
Похоже, но не то
Nikita Kanunov
Только это и остается)
Radomir Epur
[
{
"type": "code",
"text": "void main() {\n final lst = [\n DateTime.now(),\n DateTime.now().add(Duration(days: 2)),\n DateTime.now().add(Duration(days: 1))\n ];\n lst.sort();\n print(lst); // [2021-03-21 15:39:07.044, 2021-03-22 15:39:07.044, 2021-03-23 15:39:07.044]\n}"
}
]
.
У меня список не из дат состоит а из элементов класса
Nurassyl Nuridin
привет всем! Есть ли возможность в приложении т9 применять? Пользователь если с ошибкой напишет то автоматический исправить?
Radomir Epur
[
"А, не доглядел. Тогда вот так.\n",
{
"type": "code",
"text": "void main() async {\n \n final news1 = News();\n await Future.delayed(Duration(seconds:1));\n final news2 = News();\n await Future.delayed(Duration(seconds:1));\n final news3 = News();\n final newss = [news1, news3, news2];\n newss.sort((a, b) => a.dateTime.compareTo(b.dateTime));\n print(newss); // [2021-03-21 15:47:52.193, 2021-03-21 15:47:53.196, 2021-03-21 15:47:54.20\n}\n\nclass News {\n final dateTime = DateTime.now();\n @override\n String toString() => '${dateTime.toString()}';\n}"
},
""
]
BPS
Коллеги, куда копать в ситуации когда во Future builder прилетает пустой лист из функции, когда на момент return лист состоит из 41 элемента. скрины ниже
Sergey Hottabych
Глобальный стрим, и в него кидать ивенты, а в другом Блоке считывать. Есть пакет event_bus, он как раз это делает
Sergey Hottabych
VsCode абсолютно все то же умеет, генерация конструкторов / дата классов через экстеншен.
Radomir Epur
Так понятно?
Sergey Hottabych
Не имеет, пробовал собирать Хакинтош на стационарнике 12 Гб ram + старый i7, и на ноуте amd 5 + 16 ram + ssd, в обоих случаях это боль. Сейчас думаю хотя бы бушный мак мини с Авито приобрести
BPS
На мелком примере понятно, но где именно у меня порядок нарушен непонятно. я только недавно начал учить дарт, сорри
Radomir Epur
: / асинхроншину подучи. Пока совет: не используй forEach, когда можно использовать простой for.
Sergey Hottabych
setState все что делает - это помечает виджет как dirty, чтобы он перерисовался. При этом что внутри setState, значения не имеет
Sergey Hottabych
И он перерисовывает весь виджет целиком. Если тебе более точечные обновления, лучше заюзать какой-нибудь стейт-менеджмент
?? ??????????????????????????
Не так, он ребилдит а не перерисовывает. Это сильно разные вещи
?? ??????????????????????????
Виджет декларативная конфигурация UI. Запускается ребилд, если в результате конфигурация не изменилось экран перерисовывать не будет
?? ??????????????????????????
Билд просто позволяет сгенерировать новую конфигурацию, а рисовать или нет решается на уровне другого дерева
?? ??????????????????????????
Именно по этой причине нельзя логику описывать в билде, это сильно бьёт по производительности
?? ??????????????????????????
На эту тему есть видосики, а на одном из них через хаш рендер элемента показывается что ребилда не происходит
Sergey Hottabych
Спасибо за уточнение. Но по-моему, он не настолько умный, чтобы проверять , изменилась ли конфигурация. Если ты пометил виджеты const, то он их не трогает, если нет - перерисовывает, разве нет?
.
Спасибо, нашёл уже, там так же.
?? ??????????????????????????
Он отдает новый виджет, а вот дальше работают другие деревья и другие механизмы. Те по факту если ничего не изменилось то и элементы не перерисуются
Sergey Hottabych
А const тогда что даёт?
?? ??????????????????????????
Конст вычисляет значение на этапе компиляции
Sergey Hottabych
Я имею в виду, помечать виджеты const
|