Программирование : Dart & Flutter по-русски
Sergey Salnikov
это не ошибка - это не понимание основ сетевого взаимодействия
Nick
[
{
"type": "link",
"text": "https://developer.android.com/studio/run/emulator-networking#networkaddresses"
},
"\nиспользуй ",
{
"type": "link",
"text": "10.0.2.2"
},
""
]
Nick
надеюсь я не сильно опоздал
Sergey Salnikov
[
"о это в тему, только android ли эмулятор у ",
{
"type": "mention",
"text": "@ilx13"
},
"?"
]
ilx13
[
"да андроид. щас почитаю. Спасибо ",
{
"type": "mention",
"text": "@AaronAumer"
},
""
]
A1ex Petrov (К)
Мужики, такая проблема, есть PageController, инициализирую его с индексом из стрима, при переходе на новую страницу для этого стрима может индекс измениться, и при возвращении на страницу с PageController текущий индекс не изменяется на новый из стрима, куда копать?
ilx13
а флаттеру нельзя подключится обычному сокету?
Sergey Salnikov
[
"можно, читай доки и пиши\n",
{
"type": "link",
"text": "https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwj9uNyOiKLoAhVQposKHQGYDLAQFjAAegQIBhAB&url=https%3A%2F%2Fapi.dart.dev%2Fstable%2Fdart-io%2FSocket-class.html&usg=AOvVaw3WIJJJjPTB3-958-O-8Z1x"
},
""
]
CrazyAlarmClock
Кто знает как называются эти элементы ?)
(;?_?) Ivan Zhuravlev ???>?
listview?
CrazyAlarmClock
ну просто вдруг у флатера есть готовый виджет для этого)
CrazyAlarmClock
похоже на него, да
Kirill Malev
а это где, когда?
ilx13
это чистый ListTile
Evgenii Elchev
Навигатор это же виджет. Их можно вкладывать один в другой)
Kirill Malev
спасибо, почитаю еще чат
Evgenii Elchev
Проще попробовать. Это не Рокетс сайнс)
Kirill Malev
Вообще мне надо оставить внизу navigation bar для всех страниц, кроме авторизации и настроек
Kirill Malev
и я как раз похожее обсуждение нашел выше
Evgenii Elchev
Ну это норм решение
Alexey
По-моему, у меня было что-то похожее, связанное с обновлением Global Key в build методе
Andrey
[
"Нигде ",
{
"type": "pre",
"text": "FocusScope.of(context).unfocus()",
"language": ""
},
" не стоит?"
]
Sasha
Я GlobalKey не узал
Andrey
ну, кусок кода, думаю, всё-таки был бы полезнее для того, чтобы понять, что происходит
Tagir
[
"Привет ?? как с помощью ListView.builder задать настройку, чтобы itemBuilder выводил только те элементы из списка, где есть, например, status: ",
{
"type": "link",
"text": "StatusModel.active"
},
" ?( всего возможны active, delivered и тд)"
]
Andrey
передавать список в builder с .where?
Roman Vasiliev
Container() как один из вариантов
Tagir
это как? сейчас код выглядит вот так
Sasha
[
{
"type": "mention",
"text": "@override"
},
"\n Widget build(BuildContext context) {\n return Scaffold(\n body: SafeArea(\n top: false,\n child: Stack(\n children: [\n GoogleMap(\n myLocationEnabled: true,\n myLocationButtonEnabled: false,\n mapType: MapType.normal,\n initialCameraPosition: _kGooglePlex,\n mapToolbarEnabled: false,\n onMapCreated: (GoogleMapController controller) {\n _controller.complete(controller);\n },\n onTap: (position) {\n setState(() {\n _markers = [\n Marker(\n markerId: MarkerId('marker'),\n position: LatLng(position.latitude, position.longitude),\n draggable: true,\n ),\n ];\n });\n print(position.latitude);\n print(position.longitude);\n },\n markers: _markers.length > 0 ? _markers.toSet() : null,\n onCameraMove: (cameraPosition) {},\n ),\n Positioned(\n top: 0,\n child: Container(\n padding: EdgeInsets.only(top: 14),\n width: MediaQuery.of(context).size.width,\n decoration: BoxDecoration(\n gradient: LinearGradient(\n colors: [Color(0xFF68BB49), Colors.transparent],\n begin: Alignment.topCenter,\n end: Alignment.bottomCenter,\n ),\n ),\n child: Row(\n mainAxisAlignment: MainAxisAlignment.spaceBetween,\n children: [\n IconButton(\n onPressed: () {\n Navigator.pop(context);\n },\n icon: Icon(\n Icons.arrow_back_ios,\n color: Color(0xFF68BB49),\n ),\n ),\n Text(\n 'Карта',\n style: TextStyle(\n fontSize: 18,\n color: Color(0xFF68BB49),\n ),\n ),\n Container(\n width: 50,\n ),\n ],\n ),\n ),\n ),\n ],\n ),\n ),\n floatingActionButton: FloatingActionButton(\n child: Icon(Icons.my_location),\n onPressed: _findLocation,\n ),\n bottomSheet: AnimatedContainer(\n curve: Curves.easeIn,\n duration: Duration(milliseconds: 100),\n height: 230,\n width: MediaQuery.of(context).size.width,\n child: Column(\n children: [\n Padding(\n padding: const EdgeInsets.only(\n top: 16.0,\n right: 16.0,\n bottom: 0,\n left: 16.0,\n ),\n child: Text(\n 'Место проведения работы',\n style: TextStyle(\n fontSize: 16.0,\n ),\n ),\n ),\n RadioListTile(\n controlAffinity: ListTileControlAffinity.trailing,\n activeColor: Color(0xFF00AE68),\n title: Text(\n 'Территория заказчика',\n style: TextStyle(\n fontSize: 18.0,\n color: Color(0xFF68BB49),\n ),\n ),\n value: false,\n groupValue: isRemote,\n onChanged: (bool value) {\n print(value);\n setState(() {\n isRemote = value;\n });\n },\n ),\n RadioListTile(\n controlAffinity: ListTileControlAffinity.trailing,\n activeColor: Color(0xFF00AE68),\n title: Text(\n 'Удаленно',\n style: TextStyle("
]
Sasha
[
"fontSize: 18.0,\n color: Color(0xFF68BB49),\n ),\n ),\n value: true,\n groupValue: isRemote,\n onChanged: (bool value) {\n setState(() {\n isRemote = value;\n });\n print(isRemote);\n },\n ),\n Padding(\n padding: const EdgeInsets.symmetric(horizontal: 16.0),\n child: TextFormField(\n controller: _addressController,\n enabled: !isRemote,\n decoration: InputDecoration(\n labelText: 'Адрес',\n hintText: 'Укажите адрес',\n counterText: '${_addressController.text.length}",
{
"type": "bot_command",
"text": "/10"
},
"',\n counterStyle: TextStyle(\n color: _addressController.text.length >= 10\n ? Theme.of(context).primaryColor\n : null,\n ),\n labelStyle: TextStyle(\n fontSize: 18.0,\n color: Color(0xFF68BB49),\n ),\n ),\n onChanged: (val) {\n setState(() {});\n },\n ),\n ),\n SizedBox(\n height: 10,\n ),\n ],\n ),\n ),\n floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,\n );"
]
Andrey
такие длинные куски кода на гитхаб лучше отдельным файликов отправлять, чем сюда
Sasha
в данный момент не могу(((
Sasha
плохой интернет не позволяет
Andrey
я смотрю ты используешь AnimatedContainer, может быть дело в том, что клавиатура начинает открываться когда ещё происходит анимация, но это только догадка
Вадим
подскажите такую вещь если переходишь на новую страницу с помощью Navigator.of(context).push();, то страница, с которой уходишь, должна dipose вызывать?
Andrey
а вообще, сравнительно недавно сделали виджет под твою задачу
Andrey
насколько я понял, как в гугл/apple картах
Ivan
но для уверенности пропиши принт
Вадим
если не вызывается, то какие могут быть причины?
Rodion Mostovoy
[
"Товарищи, а с такой проблемой кто-то сталкивался?\n",
{
"type": "pre",
"text": "_TypeError\ntype '_OneByteString' is not a subtype of type 'Map '",
"language": ""
},
""
]
Andrey
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=Hgw819mL_78&list=LLdVbvlDQLPA_dWS5uWsQgGQ&index=87&t=0s"
}
]
Tagir
Теперь такая ошибка
Sasha
я просто не очень понимаю как он работает
DVS (Read The F.ng Manual) Studio (NoHello)
Ну.. он работает
Sasha
я не так искал кажется)))
Andrey
я бы на твоем месте его попробовал использовать, глядишь и работать всё как надо будет)
Andrey
а, да, ошибся немного
Ivan
При пуше не вызовется, я ошибся, вызовется, к примеру, при пушреплейсменте, так как ты перманентно избавишься от объекта в widget tree
Andrey
вот так должно быть
Sasha
+++ этот виджет решил мою проблему, + классная анимация, спасибо огромное
Sasha
кстати, в эту группу надо добавить считывателя кармы, было бы хорошо
DVS (Read The F.ng Manual) Studio (NoHello)
Посмотри плагин "stopper" сильно круче и кастомится лучше
Andrey
плагин? что он делает, можно ссылочку?
DVS (Read The F.ng Manual) Studio (NoHello)
[
"stopper | Flutter Package\n",
{
"type": "link",
"text": "https://pub.dev/packages/stopper"
}
]
Andrey
по гифке выглядит точно так же, как и тот, что я скинул, мне показалось, что это просто было кастомное решение пока не было стандартного такого виджета, а теперь он есть и смысла в сторонних пакетах нет
DVS (Read The F.ng Manual) Studio (NoHello)
Не совсем тоже самое. Встроенный не умеет магнититься к определенным точкам, не даёт настраивать физику, плохо работает с контейнерами без хедера.
Kirill Malev
смотрите, я хочу юзать авторизацию по jwt, поэтому логины будут переодически протухать. Как правильно тогда это сделать? Где делать проверку на протухание? в отдельном bloc ? И где тогда хранить jwt токен ? (он через локалсторадж прекрасно хранится, но что его тогда вызывать должно? userRepository?)
Andrey
ну по идее ставишь таймер на время жизни, потом при каждом запросе отправляешь access token, если не сработал - пробуешь отправить refresh token, если и он не сработал - выкидываешь пользователя на авторизацию
Andrey
хранить, я думаю, в secure storage надо, хотя у самого пока в local storage лежит, никак не переделаю
ilx13
ребята как запускать на потоке мой постоянный цикл, который работает только при открытом определлоного скрина?
Mitai
[
"Утро доброе, возможно кому то будет интересно видео по aqueduct ",
{
"type": "link",
"text": "https://www.youtube.com/watch?v=WdxKVMQV6kM"
},
""
]
Sergey Salnikov
Полагаю это связано со вчерашними сокетами. Не пиши свой клиент на голых сокетах, бери websocket либы и будет щастье
Sasha
Кстати, а при неактивном состоянии приложения будут работать сокеты?
Sergey Salnikov
Для этого начала надо понимать lifecycle приложения и ui, что такое foreground, background. На обеих платформах. На этот абстрагированный от реальности вопрос ответа не дать
Sasha
Есть ссылки где можно об этом прочитать?
Sergey Salnikov
[
{
"type": "link",
"text": "https://developer.android.com/guide/components/activities/process-lifecycle?hl=ru"
},
"\n",
{
"type": "link",
"text": "https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ru"
},
"\nпо всем вложенным ссылкам читать тоже\n\nпотом переходить к различиям в версиях sdk\n",
{
"type": "link",
"text": "https://developer.android.com/about/versions/oreo/background?hl=ru"
},
"\n",
{
"type": "link",
"text": "https://developer.android.com/about/versions/pie/power?hl=ru"
},
"\n\nps про ios я не расскажу, кто-нибудь может подкинуть ссылок из ios мира"
]
Gorohov Valeriy
[
{
"type": "link",
"text": "https://dartpad.dev/7710185af600f2095b1c47ba7674fb2b"
}
]
Gorohov Valeriy
Что не так?
Gorohov Valeriy
[
"The switch case expression type 'Foo' can't override the == operator - line 19\nНо:\n",
{
"type": "pre",
"text": "@override\n bool operator ==(o) => o is Foo && title == o.title;",
"language": ""
},
""
]
Denis Gabyshev
Что думаете по этому поводу?
Underground ??
Частное мнение, которое имеет место быть)
Павел
Видимо нельзя применять в switch переопределнные операторы ==
Павел
[
{
"type": "link",
"text": "https://i.imgur.com/Hpqlaum.png"
}
]
Gorohov Valeriy
Вот Dart вроде приятный язык, flutter подающая надежды технология, но в некоторых мелочах так выбешивает.
Павел
и вроде не молод уже)
Павел
хотя только 2 поколения вышло
Igor
А кто такой Jake Wharton?
Denis Gabyshev
Один из главных людей в мире Андроида. Работает в Google
Denis Gabyshev
Участвовал в разработке Retrofit, RxRelay, Timber
Igor
Да. Отношение в flutter двоякое. Или это прорыв, либо временный хайп
Igor
Судя по количеству участников в этом чате :)
Evgenii Elchev
это плохая метрика)
Evgenii Elchev
мне только интересно, ему гугл потом не настучит за такие высказывания? они неплохие деньги в раскрутку флаттера вкладывают, а такой авторитетный человек противдействиет так сказать)
Igor
ну у них свобода слова :)
Sergey V.
[
{
"type": "link",
"text": "https://twitter.com/JakeWharton/status/1109517688769048576"
}
]
Sergey V.
ну и он еще потом писал в твитторе что его маленечко задолбали и вообще это его личное мнение)
Igor
Можно было на Go сделать Flutter :)
Evgenii Elchev
да го то же тот еще подарок)
Evgenii Elchev
идеальных языков не бывает
Evgenii Elchev
по этому не суть
Gorohov Valeriy
dart еще ладно, у flutter такое чаще, наиболее яркие кейсы которые я встретил: http headers - "У вас на сервере используется CamelCase названия заголовков? Ваши проблемы, переписывайте сервер. Сервер не под вашим контролем? Нам то какое дело, хотим lowercase для заголовков и идите лесом" TextFieldForm - "Вам нужно обновить значение через didChange? Ну сорян, мы забыли его нормально реализовать два года назад" BottomNavigation - "У вас дизайнер нарисовал его красиво, здорово, но мы константой задали ему высоту. Верстайте как хотите."
Evgenii Elchev
она плохо работает когда на кону деньги) но кстати твит и правда ничего не значит. Многие талантливые специалисты на самом деле долбанутые фанатики. Он вполне может оказаться одним из них.
Sergey V.
[
"нашел кстати к чему это пришло)) критиковать ему разрешили)\n",
{
"type": "link",
"text": "https://twitter.com/JakeWharton/status/1111652587248537600"
},
""
]
Sergey V.
свобода слова победила :)
Evgenii Elchev
как будто в ios не так
Evgenii Elchev
скорее всего в андроиде тоже
Gorohov Valeriy
В ios ещё веселее, здесь хоть можно исходники посмотреть и понять в чем дело. В iOS можно пол интернета перелазить и не найти ответа.
Igor
ТЫ хочешь сказать что мне придется менять? X-Pagination-Current-Page: 1 X-Pagination-Page-Count: 73 X-Pagination-Per-Page: 20 X-Pagination-Total-Count: 1460
Evgenii Elchev
кстати не факт, что это сообщение не пиарщик написал, типо мне все разрешили, так что мое молчание не значит что мне не дают высказываться, это я сам не хочу)
Григорий Коваленко
Да он просто старик уже, цепляется за старое))
Vadim Lukichev
Вспомнить бы ещё, как сами эти нативные платформы android и iOS различные авторитеты критиковали на заре становления)) Странно было бы без критики
Павел
Можно подумать есть выбор большой. Ксамарин, РН, флаттер. Натив не предлагать. Обсуждается исключительно кроссплатформа. Не все заказчики могут заказать 2 команды разрабов
Павел
он просто вью перекодирет в РН
Igor
NativeScript это ангуляр прежде всего
Igor
там вро как свои мосты
Evgenii Elchev
Вообще в новой версии http регистр заголовков регламентируются. И куча софта заточена на этот формат (не помню какой именно). И даже случайный prox ngingx на пути к твоему телефону может тебе их поменять на правильные)
Павел
ну если не ангулар то реакт там вроде
Igor
ты путаешь с Vue-native :)
Павел
про мосты не знаю, но падал он знатно. написал ишью не получил ответа и ушел на РН
Igor
NativeScript это Telerik
N A
ой забудьте про NativeScript ???>?
Павел
прежде всего это наверное те же мосты с JS
Gorohov Valeriy
Лучше делай регистронезависимым)
Denis Gabyshev
Kotlin Multiplatform есть еще
Igor
ну тут понятно что Flutter на 10 голов выше того же NS
Denis Gabyshev
Было бы интересно услышать разбор твиттера в подкасте
Denis Gabyshev
Джейка Вартона имею в виду
Igor
Чем еще флаттер лучше. Сообщество грамотней чем у RN :)
Igor
вопринимайте как комплимент
Павел
The runtimes enable you to call APIs in the Android and iOS frameworks using JavaScript code. To do that they use JavaScript Virtual Machines - Google’s V8 for Android and WebKit’s JavaScriptCore implementation distributed with iOS 7.0+.
Igor
Там все же молодые фронтенеры
Igor
флаттер в основном с серьезных языков пришли
Павел
во флаттер пришли за кроссплатформой и 60 фпс
Evgenii Elchev
Просто пришли
Павел
неее, я бы так и оставался на теплом-ламповом РН если бы он не тормозил
Timur Karimov
в чем теплота и ламповость если тормозит?
Павел
потому что все уже знаешь, как дома
Павел
и тормозит он не всегда
Павел
справедливости ради я на нем реалтайм аппу сделал
Timur Karimov
тогда все может быть теплым и ламповым)
Green Giraffe
Добрый день, как реализовать переход с одного виджета на другой (переход на другой экран)? ( Пробовал сделать как показано в документации flutter, но не получилось)
Timur Karimov
А какая ошибка?
Evgenii Elchev
Не все думают так же как ты)
Igor
я и на кордове делал сокеты :) легкий месенджер
Павел
у меня на пределе JS было все от 50 мс
Igor
я имею в виду что парни пришедшие во флаттер, в основном с Java и Swift на пример
Павел
для интереса можно голосовалку)
Павел
выборка уже приличная
Igor
ну из за хайпа наверное да
Artyom Nesterenko
Была не так уж давно, закрепляли ещё.
Igor
я так же сидел и делал на ламповой кордове :)
Павел
и какие результаты вкратце?
Evgenii Elchev
Почему был, почему только кем то одним?)
Artyom Nesterenko
Не знаю, не я опрос делал. ??
Семён undefined
почему до этого вообще не программировал?
Семён undefined
я просто под мобайл не писал и всё
Evgenii Elchev
Ну там есть другие варианты
Павел
там смысл именно перехода типа) я например тоже натив андроид-натив иос-веб-рн-флаттер. Но предпоследний веб все-таки получается
Семён undefined
я выбрал флаттер чтобы сделать курсовую, ибо две платформы считались за две готовые курсовые работы
Семён undefined
были две критерии: не люблю разметку, горят сроки. флаттер со всеми условиями справился на ура, я с нулевыми знаниями платформы смог сделать работоспособное красивое приложение
Семён undefined
за полтора месяца
Green Giraffe
Ошибки нет, кнопка просто не работает, пытаюсь поменять виджет через onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => Category()),);
Radomir Epur
[
"Привет. Ребят, не сталкивались с проблемой смены build variant в новой android studio(3.5.3)? А именно в ней нет кнопок \"Open for Editing in Android studio\", которая появлялась в предыдущей версии при выборе файла build.gradle. Инструкция на оф. сайте тоже неактуальна (",
{
"type": "link",
"text": "https://flutter.dev/docs/deployment/android"
},
"). В новой андроид студии даже нет такого представления как на скрине."
]
Andrey
это проблема конкретно IDE, какой-то .iml файл не создаётся
Radomir Epur
Так, как я могу решить вопрос? У меня еще visual studio есть. Задача: поменять build variant на release с debug и забилдить версию aab.
Artyom Nesterenko
Новая Android Studio - это 3.6.1, если что. А скоро и 4.0 выйдет. ??
Andrey
тебе никто не запрещает открыть папку android из проекта в android studio - получится то же самое, просто ты это сделаешь вручную, а не через команду
Andrey
Проверь наличие файла
Radomir Epur
Сорян, сделал такой вывод, потому что специально хотел обновиться, сделал check for updates, и мне сказали что у меня самая новая версия, а в about выдает версию 3.5.3
Andrey
тогда, наверное, файл с ‘названием проекта_android’.iml в корне проекта, просто не помню уже точно как решил
Artyom Nesterenko
А если правой кнопкой нажать на модуль android?
Andrey
в общем, ерунду какую-то сказал, просто создай новый проект и посмотри на .iml файлы в корне и в android, и сделай так же и заработает)
Hellomik
Хай кто работал с completer
Tagir
Доброе утро! Как такое сделать ?
Hellomik
тут дело такое работаю с картинами и нужно их ловить через Network Image можете помочь ?
Andrey
в чём конкретно вопрос?
Hellomik
вот примернный набросок
Hellomik
и дело в том что я должен вернуть именно Ui8list
Hellomik
но там стрим и мне нужно дождаться пока он закончиться и потом уже
Hellomik
я для него обычная логика не подходит
Artyom Nesterenko
[
{
"type": "link",
"text": "https://www.youtube.com/watch?time_continue=52&v=1FmATI4rOBc"
}
]
Radomir Epur
Вроде вариант, который ты подкинул с выбором папки андроид, сработал. Версию release выставил. Забилдил aab файл, а google play все равно говорит что "набор Android App Bundle был подписан в режиме отладки". Решил еще раз посмотреть build variant, а он опять debug стал. Интересно почему build variant не сохранился на release.
Artyom Nesterenko
[
"Можно самому сделать, чтобы не тащить лишние зависимости. ",
{
"type": "link",
"text": "https://stackoverflow.com/a/46480722/5569272"
},
""
]
Andrey
прежде чем грузить в гугл плей попробуй просто сделать релизную версию на телефон
Hellomik
вывести картину в Custom Painter (я могу через http.get)
|