Программирование : Dart & Flutter по-русски
Савостьянов Андрей
Странно. ББ рыжелис нормально съел. А на мобильном даже сомнительный Dolphin принял.
Р????????????????? ??????????????????у???????? ????????????????? К????? ????????????? ??????????????????у?????????????? ?? ?? ???
это наверн просто картинки
Савостьянов Андрей
Обещают сделать позже. Подтягивают на текст Гуддини, как слышал. Пока это канвас.
Dmitry Bubnenkov
"Подтягивают на текст Гуддини" не понял эту фразу
Ars
[
{
"type": "link",
"text": "https://stackoverflow.com/a/56166051/3923490"
}
]
Dmitry Bubnenkov
Судя по ссылке выделение в мастере уже работает
Савостьянов Андрей
[
"Разработчики экспериментируют с html/css вставками для текста с помощью",
{
"type": "link",
"text": "https://m.habr.com/ru/company/mailru/blog/282027/"
},
""
]
Савостьянов Андрей
Это не веб. В вебе только обработку событий указателя начали делать (уже работает, но лагает жутко)
Dmitry Bubnenkov
[
"Подскажите как лучше сделать.\nУ меня есть ряд виджетов из которых я собираю данные, чтобы потом выполнить запрос на сервер:\n",
{
"type": "link",
"text": "https://gist.github.com/bubnenkoff/0aaf86f31361fdb20f2d57db86225e92#file-app-dart-L340"
},
"\n\nВопрос. Этот запрос в отдельном класса (не виджете) лучше делать или как?"
]
Dmitry Bubnenkov
А там что веб-не веб версия будут сильно разница? Вроде бы мобильное приложение под вебом должно 1к1 работать? Или если под мобилой что-то работает, под вебом этот функционал может быть просто не доступен?
Савостьянов Андрей
Лучше сделать: 1. класс для работы с конкретным сервером, например SomeApi. В нем сделать все методы по работе с этим сервером. 2. Класс провайдера ProviderSomeApi. Он расширяет Inherited Widget, в его поле создаётся экземпляр SomeApi. 3. Помещаешь этот провайдер в голову дерева и обращаешься к апи из любого места приложения. 4. Профит.
Dmitry Bubnenkov
[
"Тоесть как у меня вот тут сделано: ",
{
"type": "link",
"text": "https://gist.github.com/bubnenkoff/0aaf86f31361fdb20f2d57db86225e92#file-app-dart-L39"
},
" ?"
]
Савостьянов Андрей
Отличается. Там же транспилятор в js.
Dmitry Bubnenkov
[
"Просто мне тут ",
{
"type": "mention",
"text": "@ykmnkmi"
},
" говорил, что вроде бы это не очень правильный подход т.к. потом данные внутри классов сложно пробрасывать обратно в виджеты. Если я его правильно понял"
]
Яўген
Добрый день. Можно как-то влиять на отрисовку elevation? Чтобы тень была не со всех сторон, а с конкретной стороны?
Not That Onion
[
"нет, elevation будет вести себя по спеке. для гибкости лучше использовать Container и ",
{
"type": "code",
"text": "decoration: BoxDecoration(boxShadow: [BoxShadow(...)])"
},
""
]
Савостьянов Андрей
Типа того. Только у тебя Апи и Провайдер в одном классе (не принципиально). И проброс состояния запроса лучше сделать в виде стрима состояния запроса. Т.е. делаешь абстрактный класс SomeApiState, от него наследуешь три, класса условно DataState, ErrorState и InProgressState. В DataState - поле с нужными тебе данными из запроса. В провайдере создаёшь поле Stream и при запросе отправляешь внутри провайдера соответствующие состояния в этот стрим, а в нужном виджете подписываешься на него с помощью StreamBuilder. И будет тебе Профит сразу: отображение ожидания результата запроса, вывод ошибки или данных овета сервера.
Dmitry Bubnenkov
ок пасибо, но я пока до этого еще не дошел. Сейчас пока так попробую. Как только убежусь что работает попробу как ты сказал
Dmitry Bubnenkov
Слушай, ну вот создал я отдельный класс для работы с данными. А ключ который мне нужен в виджете лежит который через провайдер. И я опять уперся в то, что мне контекст нужен
Dmitry Bubnenkov
[
"Вот если что сам код ",
{
"type": "link",
"text": "https://gist.github.com/bubnenkoff/0aaf86f31361fdb20f2d57db86225e92"
},
""
]
Dmitry Bubnenkov
[
{
"type": "pre",
"text": "class GetServerData \n{\n String url = 'https://api/request';\n Map myrequest;\n GetServerData(this.myrequest);\n\n doRequest()\n {\n String key = Provider.of (context).access_token; // я к ключу доступ без контекста не получу\n var response = http.get(url, )\n }\n \n}",
"language": ""
},
""
]
Dmitry Bubnenkov
[
"Может у меня не правильный подход? Может ",
{
"type": "code",
"text": "GetServerData"
},
" нужно как видежет оформлять? Типа кнопка получающая данные"
]
Савостьянов Андрей
Очень тяжело с телефона читать код. Какой ключ?
Dmitry Bubnenkov
Я создал отдельный класс в котором получается ключ от сервера
Dmitry Bubnenkov
Но как только я создаю еще класс мне нужно к первому классу обратиться, но у второго класса же нет контекста. Это просто класс
Mitai
[
"version: '3.7'\nservices:\n db:\n image: postgres:11.4-alpine\n container_name: postgres\n ports: 5432:5432\n volumes: .",
{
"type": "bot_command",
"text": "/postgres_data"
},
":/var/lib/postgresql/data/pgdata\n environment:\n POSTGRES_PASSWORD: pass\n POSTGRES_USER: userdb\n POSTGRES_DB: db_test\n PGDATA: /var/lib/postgresql/data/pgdata\n restart: always\n backend:\n django\n frontend:\n dartangular"
]
Яўген
какая-т фигня получается... тупо полоска рисуется и все, немного блюра и еще чего-то, но реально рассеянная тень не получается....
Mitai
осталось завести джангу и вфке
Савостьянов Андрей
Для этого и нужен провайдер Апи в дереве виджетов. В нем создаётся 1 класс Апи. Фактически он станет синглтоном. И можно будет обращаться к одному и тому же классу Апи с уже сохраненным в начале ключом
Dmitry Bubnenkov
[
"В моем случае у меня вроде бы используется сингл-тон: ",
{
"type": "code",
"text": "class AppState extends ChangeNotifier {}"
},
""
]
Dmitry Bubnenkov
[
{
"type": "link",
"text": "https://gist.github.com/bubnenkoff/0aaf86f31361fdb20f2d57db86225e92#file-app-dart-L54"
}
]
Dmitry Bubnenkov
Ты же его имеешь ввиду?
Савостьянов Андрей
Если тебе так удобно, положи ключ в него. В UI ключу Апи не место 100%
Dmitry Bubnenkov
[
"А вот тут контекста то не будет:\n",
{
"type": "link",
"text": "https://gist.github.com/bubnenkoff/0aaf86f31361fdb20f2d57db86225e92#file-app-dart-L110"
},
"\n\nИ я не смогу в AppState ключ положить?"
]
Davron Asrorov
Привет! Есть кто chopper и retrofit пробовал? Что лучше, напишите кто с чем работал, какие плюсы и минусы у библиотек?
Dmitry Bubnenkov
Тут же контекста нет
Dmitry Bubnenkov
А как данные запихнуть то если надо?
Dmitry Bubnenkov
Можешь объяснить логику? Может я не так приложение проектирую?
Савостьянов Андрей
Нет, так точно нельзя. Передавать контекст в Апи класс - зло. И провайдеру в Апи точно не место, это же виджет, ui слой. Давай вечером за ПК буду, перекомпонуем твой апп?
Dmitry Bubnenkov
ок хорошо
Яўген
В чем может быть причина такой кривой прорисовки тени? Знает кто?
Яўген
Вот такой код, взял boxShadow из примера и он нормально отображается... А в этом проекте фигня
Егор Шепелев
Проверь родительский элемент. Выглядит так, будто контейнер ограничивает размер.
Яўген
точно, там же showMenu в гgesturedetector и, короче, панель меню которая появлялась была больше, чем контейнер и его содержимое. Пришлось сделать цвет фона меню прозрачным, а контейнер белым черезе виджет темы, понятно, я как минимум не на тот виджет пытался сделать тему...
Р????????????????? ??????????????????у???????? ????????????????? К????? ????????????? ??????????????????у?????????????? ?? ?? ???
Решил попробовать вместо привычной Android студии VS Code. Вроде бы полет нормальный. Однако столкнулся с небольшой проблемкой. Там написано, что ctrl+f5 это hot reload, но когда я нажимаю также, то ничего не происходит. В чем трабл?
Мумитроль
Простое сохранение файла - хот релоад по дефолту
Р????????????????? ??????????????????у???????? ????????????????? К????? ????????????? ??????????????????у?????????????? ?? ?? ???
я знаю, но писать ctrl + K S как-то извращенно. Да и светится эдакий тулбар с хот релоадом, остановкой и прочее
Р????????????????? ??????????????????у???????? ????????????????? К????? ????????????? ??????????????????у?????????????? ?? ?? ???
и обидно становится, что меню-то не совсем рабочее
Мумитроль
Зачем вам меню?
Мумитроль
И все, если же не заработает, то значит у вас это просто отключено в настройках VS Code
Р????????????????? ??????????????????у???????? ????????????????? К????? ????????????? ??????????????????у?????????????? ?? ?? ???
даже если на кнопку хот релоада нажимаю мышкой, то ничего не происходит
Виктор
Он хот реалоадид последнюю сохранённую версию
Виктор
Достаточно просто нажать ctrl+s и получить сохранение+перезагрузку
Р????????????????? ??????????????????у???????? ????????????????? К????? ????????????? ??????????????????у?????????????? ?? ?? ???
Понятно, спасибо
Игорь Чичерин
Доброй ночи
Fearless Cry
То есть нормального автосохранения в VScode нет?
Alex S
есть File -> Autosave (галочка
KeepOnSmiling ??
Как сверстать длинную кнопку, на которой будет небольшой текст с иконкой за текстом? Проблема в том, что я не знаю как отцентрировать Row(текста и иконки)...
KeepOnSmiling ??
Я могу облачить их в контейнер фиксированного размера, но как я узнаю размер текста + иконки, ведь нужно без переноса текста
KeepOnSmiling ??
Можно ли как-то сделать, чтобы Row занял не всю ширину, а только необходимую для его элементов или если один из элементов - Text, то его размер не предскажешь?
Vladislav
Raised button разве не по контенту расширяется?
KeepOnSmiling ??
Ага, но у меня кнопка длинная, а текст не на всю кнопку
KeepOnSmiling ??
Хотел отцентрировать текст, а с Row он начинается у меня слева :)
KeepOnSmiling ??
Center тоже не спасает положение
Vladislav
[
{
"type": "link",
"text": "https://inducesmile.com/google-flutter/how-to-create-a-button-with-icon-and-text-in-flutter/"
}
]
Vladislav
Тебе такую кнопку надо?
KeepOnSmiling ??
Ну вообще, нет, но я подумал, что решение было гораздо проще: заюзать пэддинги контейнера в кнопке :)
Fearless Cry
У Row mainAxisSize: MainAxisSize.min
KeepOnSmiling ??
Ха, спасибо! А вот это сработало как раз нужным образом!
Fearless Cry
Row ,по умолчанию расширяется на максимум, несмотря на то что чилды будут занимать меньше. А внутри Row выравнивает элементы слева. Получается, что вы кладете Row в Center и его контент не меняет выравнивания.
KeepOnSmiling ??
Спасибо! Теперь буду учитывать это
Vladislav
[
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/Positioned-class.html"
},
" я просто оставлю тут"
]
Fearless Cry
Это к чему вообще?
Олжас Сулеймен
вроде билду можно задать выходную папку вне проекта
Mitai
чет я даже webdev serve запустить не могу
Олжас Сулеймен
а что пишет? он вообще установлен? pub run build_runner build\serve [web]??
Олжас Сулеймен
если нужно просто сбилдить dart2js -O4 web\main.dart -o выходной_файл
Олжас Сулеймен
потом либо в django пихнуть или python -m http.server или дартовский dhttpd но он умеет только в юникод
Игорь Чичерин
Добрый день, начал изучать flutter столкнулся с проблемами небольшими. Можно ли тут получить помощь?
Anton Vasiljev
а зачем еще эта группа
Игорь Чичерин
[
"Я создал тему на so ",
{
"type": "link",
"text": "https://stackoverflow.com/questions/56830894/google-maps-lagging-in-sliverappbar"
},
""
]
Alexandr Dolgov
сорян миссклик...
Vyacheslav
я сталкивался с тем, что релизная версия работает без сбоев, когда во время разработки идут лаги анимации
Anton Vasiljev
карты в режиме дебага всегда тормозят
Игорь Чичерин
Потом понял что эти лаги обойти можно в момент скролла на картинку, и тут начались забавные приключения. Листенера я подходящего кроме как для скролла я не нашел. С ним эта штука ведет себя еще страннее когда я в сливере начинаю перетаскивать карту все фризит сейчас прикреплю видос
Игорь Чичерин
А как мне сделать не дебаг сборку?
Vyacheslav
собрать билд и запустить на телефоне
Игорь Чичерин
Так видео на so записано с телефона
Vyacheslav
что знал все рассказал) но с такой проблемой точно сталкивался
Игорь Чичерин
Сейчас лаги убрались однако начались такие проблемы когда перетаскиваю карту в какой то момент интерфейс начинает ломаться
Игорь Чичерин
Просто перестает работать плавный скролл И так далее
Vyacheslav
[
{
"type": "link",
"text": "https://flutter.dev/docs/testing/ui-performance"
}
]
Vyacheslav
посмотри тут, может какие-то идеи будут
Игорь Чичерин
Есть ли какой нибудь способ подлкючиться к евенту сжимания sliverappbar так же как к скроллингу?
Dmitry Bubnenkov
Я праивльно понимаю, что тот же Flutter for web живет отдельно, но в перспективе его планируют влить в мобильный флаттер?
Dmitry Bubnenkov
И еще вопрос. Производятся ли сейчас какие-то правки кодовой базы мобильного флатра, чтобы сделать его пригодным для десктопа и веба?
Hellomik
я использую try catch и дело в том что код который работал в одном не работает в другом
Олжас Сулеймен
И в мобильном флаттере можно веб запустить
Олжас Сулеймен
Вы бы код дали
Dmitry Bubnenkov
А смысл тогда отдельной ветки на гитхабе под веб?
Hellomik
[
{
"type": "pre",
"text": " \n Future _submit() async {\n if (!_formKey.currentState.validate()) {\n // Invalid!\n return;\n }\n _formKey.currentState.save();\n setState(() {\n _isLoading = true;\n });\n try {\n if (_authMode == AuthMode.Login) {\n // Log user in\n await Provider.of(context, listen: false).login(\n _authData['email'],\n _authData['password'],\n );\n } else {\n // Sign user up\n await Provider.of(context, listen: false).signup(\n _authData['email'],\n _authData['password'],\n );\n }\n } on HttpException catch (error) {\n var errorMessage = 'Authentication failed';\n if (error.toString().contains('EMAIL_EXISTS')) {\n errorMessage = 'This email address is already in use.';\n } else if (error.toString().contains('INVALID_EMAIL')) {\n errorMessage = 'This is not a valid email address';\n } else if (error.toString().contains('WEAK_PASSWORD')) {\n errorMessage = 'This password is too weak.';\n } else if (error.toString().contains('EMAIL_NOT_FOUND')) {\n errorMessage = 'Could not find a user with that email.';\n } else if (error.toString().contains('INVALID_PASSWORD')) {\n errorMessage = 'Invalid password.';\n }\n _showErrorDialog(errorMessage);\n } catch (error) {\n const errorMessage =\n 'Could not authenticate you. Please try again later.';\n _showErrorDialog(errorMessage);\n }\n\n setState(() {\n _isLoading = false;\n });\n }",
"language": ""
}
]
Hellomik
[
{
"type": "pre",
"text": "Future _authenticate(\n String email, String password, String urlSegment) async {\n final url =\n 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/$urlSegment?key=AIzaSyBgAoxY';\n try {\n final response = await http.post(\n url,\n body: json.encode(\n {\n 'email': email,\n 'password': password,\n 'returnSecureToken': true,\n },\n ),\n );\n final responseData = json.decode(response.body);\n if (responseData['error'] != null) {\n throw HttpException(responseData['error']['message']);\n }\n _token = responseData['idToken'];\n _userId = responseData['localId'];\n _expiryDate = DateTime.now().add(\n Duration(\n seconds: int.parse(\n responseData['expiresIn'],\n ),\n ),\n );\n \n _autoLogout();\n notifyListeners();\n final prefs = await SharedPreferences.getInstance();\n final userData = json.encode(\n {\n 'token': _token,\n 'userId': _userId,\n 'expiryDate': _expiryDate.toIso8601String(),\n },\n );\n prefs.setString('userData', userData);\n } catch (error) {\n print(error);\n throw error;\n }\n }\n\n Future signup(String email, String password) async {\n return _authenticate(email, password, 'signupNewUser');\n }\n\n Future login(String email, String password) async {\n return _authenticate(email, password, 'verifyPassword');\n }",
"language": ""
}
]
Олжас Сулеймен
Там тестируют, мобильная отстаёт и в ней нет доступа к апи браузера
Hellomik
вот одна связка которая работает
Dmitry Bubnenkov
А можно код не сюда, а на гист?
Dmitry Bubnenkov
И потри плиз его отсюда, а сюда ссылку кинь
Hellomik
[
{
"type": "pre",
"text": " Future _submit() async {\n print('sdad');\n if (!_formKey.currentState.validate()) {\n return;\n }\n _formKey.currentState.save();\n setState(() {\n isLoading = true;\n });\n try {\n if (_authMode == AuthMode.Signup) {\n await Provider.of(context, listen: false).signup(\n _email.text,\n _password.text,\n );\n } else {\n await Provider.of(context, listen: false).login(\n _email.text,\n _password.text,\n );\n }\n print('sada');\n //Navigator.of(context).pushReplacementNamed(ProductsScreen.routeName);\n } on HttpException catch (error) {\n var errorMessage = 'Authentication failed';\n if (error.toString().contains('EMAIL_EXISTS')) {\n errorMessage = 'This email address is already in use.';\n } else if (error.toString().contains('INVALID_EMAIL')) {\n errorMessage = 'This is not a valid email address';\n } else if (error.toString().contains('WEAK_PASSWORD')) {\n errorMessage = 'This password is too weak.';\n } else if (error.toString().contains('EMAIL_NOT_FOUND')) {\n errorMessage = 'Could not find a user with that email.';\n } else if (error.toString().contains('INVALID_PASSWORD')) {\n errorMessage = 'Invalid password.';\n }\n _showErrorDialog(errorMessage);\n } catch (error) {\n const errorMessage =\n 'Could not authenticate you. Please try again later.';\n _showErrorDialog(errorMessage);\n }\n }",
"language": ""
}
]
Олжас Сулеймен
Читать не удобно когда много строк
Hellomik
да щас как файл скинуть?
Dmitry Bubnenkov
А размеры отставания большие? И вообще активность на сколько высокая? Просто отдельная ветка ели развивается...
Dmitry Bubnenkov
[
{
"type": "link",
"text": "https://gist.github.com/"
}
]
Hellomik
[
{
"type": "link",
"text": "https://gist.github.com/Hellomik2002/4ec21c5aa9127952922db05de9f87d31"
},
" вот где не работает"
]
Олжас Сулеймен
В веб версии можно прокинуть обычные аштмл элементы
Олжас Сулеймен
Если не было коммитов в веб пару недель или месяцев все ок
Hellomik
[
{
"type": "link",
"text": "https://gist.github.com/Hellomik2002/00744fa84dbf40e1eaf52c29d8a659e4"
},
" в от где работает"
]
Hellomik
код одинаковый но че та не работает
Dmitry Bubnenkov
Типа значит в мобильной версии работы вели?
Dmitry Bubnenkov
где именно не работает?
Олжас Сулеймен
Я нз, вообщем работают
Hellomik
он именно catch который in class auth не выводит throw на верхний уровень
Hellomik
он говорит что там ошибка и stop
Яўген
Можно ли как-то в PopupMenuEntry фоновый виджет заменить на контейнер?
Hellomik
а в коде в котором все ок он throw выводить на верх на raisedButton без проблем
Dmitry Bubnenkov
Могу ошибаться, но может ты в одном случае глобальный объект исключения ловишь, а во втором локальный?
Hellomik
можеть быть верно но я слегка не понимаю как это происходит
Dmitry Bubnenkov
[
"Ну вот тут ты кидаешь:\n",
{
"type": "pre",
"text": "throw HttpException(responseData['error']['message']);",
"language": ""
},
"\nИ это работает?"
]
Hellomik
вы имели дело с provider ?
Dmitry Bubnenkov
[
{
"type": "mention",
"text": "@Hellomik"
},
" имел на столько что 90% вопросов за последние 10 дней тут про него от меня были)))"
]
Dmitry Bubnenkov
[
"А дальше ты ловишь только:\n",
{
"type": "pre",
"text": "on HttpException catch (error) ",
"language": ""
},
"\nи обработки других типов исключений нет"
]
Hellomik
ну он ошибку выводит именно в auth классе
Hellomik
у вас есть vs share ?
Dmitry Bubnenkov
это что?
Hellomik
что бы два компа могли один код смотреть
Dmitry Bubnenkov
Я боюсь не смогу помочь. У меня пока скилов мало. У меня самого слишком много вопросов
Ильгиз
Привет всем) у меня такой вопрос .Я создал диалоговое окно SimpleDialog. Но он будет использоваться ещё в других местах ,поэтому я вынес его в ресурсы. Для кнопок я использовал InkWell ('подтвердить, иконка "галочка" и Закрыть иконка "крестик"). Так вот, я задал в конструкторе тексты заголовка и контента. Но мне еще нужно передать значение onTap . Чтобы при создание нового окна ,я просто вводил данные которые указал в конструкторе , соответсвенно и значение на клик
Ильгиз
Как мне передать onTap. Использовал GestureTapCallBack, не сработало
Олжас Сулеймен
а на какой строчке ошибка
Hellomik
здесь он стопится
Hellomik
хотя ошибка должна идти на вверх
Hellomik
она должна придти к raised Button
Hellomik
и там catch стоит
Олжас Сулеймен
попробуйте написать rethrow; за место этой строчки
Dmitry Bubnenkov
throw как я понимаю ошибку без типа кидает, а rethrow пробрасывает выше все что было поймано
Яўген
Можно ли в showMenu заставить появляться свой виджет, а не виджет внутри стандртного (от showMenu) виджета? МНе просто нужно меню с бордером, закругленными краями и тенью. Но получилось только запихнув внутрь контейнер и сделав родительский виджет showMenu транспарент, из-за этого я не могу сделать такую тень как мне нужно, а стандартный elevetion от showMenu отображается не так как мне нужно. Если же попытаться повесить тень на контейнер, то она ограничивается родительским виджетом showMenu...
Hellomik
возможно немного не понял вопроса но ты можешь запихнуть в card
Hellomik
ну у самого show menu просто не можеть тени
Hellomik
неее не работает
Яўген
elevation есть и тень появляется
Олжас Сулеймен
а в чем был смысл? отловить ошибку выше?
Hellomik
Система авторизации
Олжас Сулеймен
это я понял, про проблему
Hellomik
когда якобы пароль не верный или firebase дает ошибку
Олжас Сулеймен
вы хотите ее отловить или кинуть ошибку вверх
Hellomik
я хочу ее отловить выше
Hellomik
и там вывести show dialog
Dmitry Bubnenkov
[
"Почему следующий код может падать с ошибкой:\n",
{
"type": "code",
"text": "var response = await http.post(url, body: data, headers: {\"Accept\": \"application/json\", \"Authorization\": \"bearer $token\"});\n\n"
},
"Ошибка:\n",
{
"type": "code",
"text": "Unhandled Exception: NoSuchMethodError: The getter 'length' was called on null.\n\n"
},
"Все три поля data token и url я туда передаю"
]
Dmitry Bubnenkov
Опытным путем установил, что data почему-то пустое, хотя в консоли оно печатается
Dmitry Bubnenkov
Как такое может быть?
Dmitry Bubnenkov
[
"передаю данные вот так:\n",
{
"type": "pre",
"text": "GetServerData getServerData = GetServerData(Provider.of (context).access_token, map);\n getServerData.getData();",
"language": ""
},
"\nкаким образом в запросе в data на момент запроса может быть пусто?"
]
Hellomik
ты не забыл json.decode или encode
Dmitry Bubnenkov
Запрос сам падает
Dmitry Bubnenkov
[
"т.к. поле ",
{
"type": "code",
"text": "data"
},
" пустое на момент запроса оказывается, хотя в консоли оно печатается еще до запроса"
]
Hellomik
[
{
"type": "pre",
"text": "final response = await http.post(\n url,\n body: json.encode(\n {\n 'email': email,\n 'password': password,\n 'returnSecureToken': true,\n },\n ),\n );",
"language": ""
}
]
Dmitry Bubnenkov
а... щас попробую
Dmitry Bubnenkov
да ты оказался прав)
Dmitry Bubnenkov
[
"только почему оно ругалось на: ",
{
"type": "code",
"text": "The getter 'length' was called on null."
},
"?"
]
Hellomik
у меня тут у себя collapse
Hellomik
два одинаковых кода
Dmitry Bubnenkov
Вопрос как быть. Есть Урл который нужно обстукивать каждые 3 секунды в ожидании когда он вернет status: "done". Как лучше сделать это чтобы ничего не блокиваровалось? Бесконечный цикл в основном потоке наверно худший из возможных вариантов
Aleksey
[
{
"type": "link",
"text": "https://pub.dev/packages/web_socket_channel"
}
]
Makunjata
Ребят, мб кто-нибудь работал с canvas, есть метод у него drawImage, не могу понять как подгрузить туда свой локальный Image, мб кто сталкивался
Dmitry Bubnenkov
объясни плиз как эта либа поможет.
Dima
[
"Помогите пожалуйста, не пойму что вообще писать:\nЗадача: отправить в Google cloud kms ключ на шифрование и сохранить его в местном хранилище.\nдо шифрования дойдем, но я не пойму, что писать даже чтобы просто какую-то стрингу сохранить там. Тут все по аналогии с файрстором должно быть, но как-то не для людей написано.\n\nВот на скрине, я вроде как получаю параметры авторизации, проверил конект есть.\nДалее есть некий бакет инсерт, там имя проекта и некий реквест, че в реквесте писать хз вообще\n",
{
"type": "link",
"text": "https://cloud.google.com/storage/docs/json_api/v1/buckets/insert"
},
""
]
Dmitry Bubnenkov
[
{
"type": "pre",
"text": " while (true) {\n Timer.periodic(Duration(seconds: 5), (_) async\n {\n var response = await http.get(url_status, headers: {\"Accept\": \"application/json\", \"Authorization\": \"bearer $token\"});\n print(response);\n\n } \n );\n }",
"language": ""
},
"\nКак-то так? Только почему то у меня ничего на экран не печатается"
]
northelks
не нужно while(true)
Dmitry Bubnenkov
А почему не нужно?
northelks
угадай с трёх раз)
Dmitry Bubnenkov
Он в себе это этот цикл реализует?
Dmitry Bubnenkov
А почему тогда он ничего не напечатал? Типа получилось цикл в бесконечном цикле?
northelks
while(true) - такое себе лучше сразу в стикер записать и на моник, с фразой "никогда так не делай"
northelks
потому что ты залочил поток
Dmitry Bubnenkov
ну тут согласен, но просто сходу идей лучше не возникло)
|