Программирование : Dart & Flutter по-русски
Evgenii Elchev
можно в infoplist прописать что бы не блочило
Павел
уже перевел домен на https , сегодня первый день опять буду пробовать, вчера первый тестер тоде не смог)
Anatoliy Dvoryashin
подскажите как такую ерунду зафигачить, маркер а по тапу вот такое окно. Точнее с чего лучше начать делать такое окно?
Павел
у меня expo само собаирет в облаке ipa
Evgenii Elchev
кстати, сейчас подумал, что у меня дев сервер http, и флаттер запросы к нему делает без вопросов, при этом в info.plist флага нет нужного)
Evgenii Elchev
очевидно flutter делает запросы уровнем ниже, чем стоит блокировка в ios
Павел
начать с библиотеки карт. Гугл, Яндекс, Openstreetmap
Anatoliy Dvoryashin
гуглкарты есть
Anatoliy Dvoryashin
маркер есть
Anatoliy Dvoryashin
больше
Anatoliy Dvoryashin
нет png
Павел
и менять его с рисунка на окно
Павел
и абсолютно позиционировать
Павел
Это как ниже? Выше может?
Павел
Вот расскажешь потом после релиза. Хотя я точно зарекся делать http. Теперь только https покупать
Evgenii Elchev
ну очевидно что ниже, иначе бы блочились запросы) скорее всего в ios внутри URLSSession стоит проверка, а flutter разумеется его не использует)
Evgenii Elchev
в релиз то https пойдет
Павел
ios есть ядро. Просто оно читает Info.plist
Павел
и в режиме разработки не блочит
Павел
ниже ядра не может флаттер быть
Павел
Хотя предыдущий проект у меня на http и он нормально работает
Evgenii Elchev
не уверен что там ядро его читает)
Павел
Ну я образно. Когда стартует ipa
Igor Kusoff
А что не так с бесплатными сертификатами?
Павел
я имел в виду покупать домен с сертификатом(бесплатным). До этого на техническом работал от провайдера
Павел
[
{
"type": "link",
"text": "mysite.provider.ru"
}
]
Anton Zheltov
можно сгенерировать бесплатно letsencrypt сертификат, если у вас нет кучи поддоменов, оптимальный выбор
Павел
да я умею это. легче когда за тебя хостер делает)
Denis Dubov
Гайс помогите пожалуйста. Есть вообщем задача сделать Sliver App Bar, который бы сжимался. Проблема в том что большой красный прямоугольник это должен быть ListView с добавлением итемов (запрос к серверу) при скроле вниз. Получается такая история что SliverAppBar сжимается когда скролла ListView нет, а когда в ListView идет свой скролл остается неизменным. Вопрос можно ли вообще как то сжимать SliverAppBar на событие скрола по нижнему LIstView
Kitsu
[
"Добавил в проект build_runner для moor, вначале вродь работало, даж в сиайке завелось. После удаления кэша (flutter clean + сгенеренные файлы) почему-то ",
{
"type": "code",
"text": "build_runner build"
},
" уходит в бесконечный цикл с сообщением ",
{
"type": "code",
"text": "[WARNING] Throwing away cached asset graph because the language version of some package(s) changed. This would most commonly happen when updating dependencies or changing your min sdk constraint."
},
", было мб у кого такое?"
]
Anton Seagull
Привет, может кто подсказать - сколько билды андроди и ios весят примерно для приложения 5-8 экранов?
Denis Dubov
Наверное это зависит от количества используемых ресурсов. Но примерно приложение таблицы - отчеты - кабинет на 8 экранов у меня получилось 20мб
Denis Dubov
?? спасибо попробую
Anton Seagull
и android и ios?
Artur
У меня 6 экранов + sqlite на 5-6 Мб + фото на 1-2 Мб Итого 16.2 Мб
Sasha
А у меня на 14 скринов 19 мб. Правда ещё не закончил. Но примерно тоже 20 мб будет в конечном итоге.
Denis Dubov
android ios до 20 мб, использовал hive db
Evgenii Elchev
народ, сижу уже час копаю не могу ничего понять, хочу посмотреть на запросы моей апки, включил mitmproxy, сертификаты вот это все настроил, уже в браузере с симулятора (ios) отываю url в проксе вижу запрос, апка отправляет запрос просто глухо, как будто его и небыло, НО! при этом она данные от сервера получает, как так может быть?
Алексей Анисов
Коллеги рассказывали , сниферы не показывают траффик флаттера по каким то причинам)
Вячеслав Кулинич
Подскажите, что от меня хочет эта надпись? В IOS мало чего понимаю..
Иван
На андроиде прога Packet capture все ловит
Иван
[
{
"type": "link",
"text": "https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture"
}
]
Sergey Hottabych
Оказывается, это баг самого Дарта, его пофиксили в сегодняшнем апдейте.
Константин Буланов
Ага. А ведь сразу на Dart и не подумаешь.
Evgenii Elchev
сколько времени порачено зря, у него видимо какая то своя валидация сертификатов
Evgenii Elchev
однако же, не зря потратил))
Evgenii Elchev
[
{
"type": "link",
"text": "https://flutterigniter.com/debugging-network-requests/"
}
]
Compote
Proxyman отлично все показывает и бесплатный
Evgenii Elchev
mitm тоже бесплатный, но вот в статье пишут надо отрубить внутренню проверку сертификатов
Compote
Я проксимен и во флаттере и в RN пользуюсь. Под иос так вообще очень удобно. Всего парочку сертификатов поставить
Evgenii Elchev
ну ты в коде же то же что то добавляешь как я понял?
Evgenii Elchev
ну вот в статье пишут надо сделать // Make sure to replace with // the external IP of your computer if you're using Android. // Note that we're using port 8888 which is Charles' default. String proxy = Platform.isAndroid ? ':8888' : 'localhost:8888';
// Create a new Dio instance. Dio dio = Dio();
// Tap into the onHttpClientCreate callback // to configure the proxy just as we did earlier. (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { // Hook into the findProxy callback to set the client's proxy. client.findProxy = (url) { return 'PROXY $proxy'?; }; // This is a workaround to allow Charles to receive // SSL payloads when your app is running on Android. client.badCertificateCallback = (X509Certificate cert, String host, int port) => Platform.isAndroid; }
Compote
Да, под Андроид там более геморно. А под иос прокси просто указать для дебаг режима
Evgenii Elchev
просто в нативе это работает без вмешательства в код, я только в системе выставляю проксю и симулятор автоматом туда же стучится
Compote
Это флаттер по умолчанию не может
Evgenii Elchev
хотелось бы уточнить с чем связано, ну да ладно, главное что разобрался, спасибо)
Compote
Других вариантов пока и нет более адекватных.. а тут прокси указал и.. видишь все, + retry и т.д.
Evgenii Elchev
Ну с одной стороны это удобно, что не всю систему. С другой стороны не удобно что код надо менять.
Evgenii Elchev
Для qa опять же надо хак какой то изобретать
Evgenii Elchev
Хотел ещё дебаг экран по шейку сделать) че то шейк не работает. Отложил пока)
Compote
я когда во флаттер начал, меня вообще очень удивило, что с таким количество дебаг инструментов, они не сделали дебаг реквестов вообще ни какой
Павел
[
{
"type": "link",
"text": "https://fbflipper.com/docs/features/index.html"
}
]
Павел
вот держу все никак не попробую
Evgenii Elchev
Вообще то там в статье есть какой то стандартный)
Compote
ты про логи? Ну это такое себе на мой взгляд)
Evgenii Elchev
Не, там в devtools
Compote
да, logging в девтулз
Compote
судя по картинке там в лог падает просто json-строка? Ее потом еще парсить нужно, чтоб читалась номарльно
Evgenii Elchev
Возможно, этими devtools ещё не пользовался вообще. Ксть смысл ставить хром и пробовать?
Dmitriy Orteney
[
"Мы на диологгере сидим)\n",
{
"type": "link",
"text": "https://pub.dev/packages/pretty_dio_logger"
},
""
]
Askhab
Актуально ли изучать Dart 2.0.0?
Кирилл Матросов
а какая сейчас версия?
Никита Масев
подключаю google maps к проекту и Api ключ в манифесте устанавливаю. При запуске на андроиде (на ios не проверял, нет возможности) такая ошибка. Излазил гитхаб, чет не нашел похожие проблемы. Есть идеи?
Timur Karimov
а зачем привязываться к какой-то версии?
Timur Karimov
Лучше вообще не учить язык отдельно, я считаю Сразу пишешь приложения какие-нибудь язык автоматически выучится
Dima
Согласен, а когда уже чувствуешь силы, можно выучить по патч ноутам новые фишки типа. [ if(a==b) widget (), ...[a,b,c] ] Extension methods, И в effective dart прочитать к примеру, что: forEach((e) => print(e)); - это плохо, forEach(print) - это хорошо)
???????
Зачем читать effective, если можно просто настроить линтер?)
???????
Можешь взять за основу мои правила)
Rinat Kurmashev
[
{
"type": "mention",
"text": "@PlugFox"
},
" привет, ещё не подготовил репу с воздушными стейтами?) а то мне кажется моему коду чёт не хватает"
]
Rinat Kurmashev
тяжеловатые стейты-ивенты
???????
я еще даже жепу почесатб не успел)
Rinat Kurmashev
чешем репу и делаем репу)
Alexey Z
[
"Может кому пригодится ??\n ",
{
"type": "link",
"text": "https://github.com/Overman775/Flutter-Framework7-Vue"
},
""
]
Serge Shkurko
есть же cordova \ phonegap)
roman G ??
[
"как можно пофиксить эту проблему? пробовал все решеения ",
{
"type": "link",
"text": "https://github.com/flutter/flutter/issues/19384"
},
""
]
Alexey Z
Есть, это эксперимент, можно использовать как вариант архитектуры native <—> web
Serge Shkurko
[
"в pubspec прописано?\n",
{
"type": "pre",
"text": "dependencies:\n flutter:\n sdk: flutter",
"language": ""
},
""
]
Daniil Kolyasnikov
Ребят, bloc можно назвать частным случаем mvvm ?
Daniil Kolyasnikov
Корректно ли это будет
???????
Ну яб не сказал что это прям про связывание данных
???????
В чем то схоже и предоставляет схожую свободу, но это всеже маленько другое.
Daniil Kolyasnikov
Спасибо
Roman Vasiliev
Это MVI тогда уж, разве нет?
Oleg
Всем привет! Подскажите пожалуйста, есть ли способ сделать nested navigation вместе с bottom navigation ? Чтобы bottom navigation всегда была на экране
Sergey Salnikov
тут как раз есть двусмысленность если взять имплементацию Феликса - это наследие MVU (ELM TEA) один стрим ивентов мапится в стрим состояний если же взять имплементацию со множеством стримов и sink'ами - то это ближе к MVVM
N N
Нет ли каких то гайдов по работе с Process из dart:io в dart? Или примеров. Получится ли вообще наладить нормальное взаимодействие с питоновскими скриптами таким способом?
Dmitriy
[
"Всем привет: Как в дарте можно отсортировать список объектов по boolean свойству. Это свой компаратор нужно писать. Типа ` [].sort((ob1, ob2) {\n if (",
{
"type": "link",
"text": "ob1.is"
},
" == ",
{
"type": "link",
"text": "ob2.is"
},
") return 0;\n else if (",
{
"type": "link",
"text": "post1.is"
},
" && !",
{
"type": "link",
"text": "ob2.is"
},
") return 1;\n return -1;\n });` или есть другое решение ?"
]
CrazyAlarmClock
Flutter clean :D
Никита Масев
Первое, что сделал. В итоге пришел даунгрейд делать до 1.9.1. Только тогда завелся проект и карта отобразилась.
CrazyAlarmClock
У нас тоже иногда фб либы умирают, приходится ручками либы в классах импортить заново , не знаю почему , но работает
Serge Shkurko
Если проблема на андройде то дело вероятно в embended v2
Никита Масев
Ну я так понимаю, что либо ждать пока гугл обновит гугл мапс под v2, либо даунгрейд
Sasha
Всем привет))), как можно сделать правильные рабочие Радио листы в AlertDialog() в методе showDialog?
Sasha
Проблема в том что стейт внутри метода showDialog не меняется
Igor Kusoff
[
"старый баг Дарта давно починили, сейчас без разницы абсолютный или относительный путь указывать: ",
{
"type": "link",
"text": "https://stackoverflow.com/a/61086247/13030779"
},
""
]
???????
О, можно теперь совмещать абсолютные с релятивными путями?
???????
Помню раньше если использовать и то и то, то была ошибка сборки
???????
Так что нужно было выбрать код стайл
Igor Kusoff
вроде теперь можно)
???????
Даже в линтере правила есть только для релятивных и только для абсолютных путей
???????
[
{
"type": "link",
"text": "https://github.com/dart-lang/sdk/issues/33432"
}
]
Igor Kusoff
на андроиде проблем вроде нет
???????
По идее пофиксили
Igor Kusoff
на айосе не проверял пока на проде
???????
Там не с устройством проблемы были
???????
А прям на этапе сборки
???????
Тобишь не в рантайме
Igor Kusoff
ну тогда точно всё ок)
Igor Kusoff
по крайней мере у меня)
Roman Vasiliev
Не видел даже такого чтоб нельзя было
Roman Vasiliev
Как минимум года полтора значит
???????
Ну раньше оно было
???????
Я с тех пор перешел с релятивных путей на абсолютные
Igor Kusoff
[
"т.е. можно использовать такой кодстайл, чтобы сразу видеть откуда ноги растут:\n\n",
{
"type": "code",
"text": "import 'package:flutter/material.dart';\n\nimport '../constants.dart';"
},
""
]
???????
[
"Сейчас попробую переучится снова с этими двумя правилами:\n\n\n",
{
"type": "link",
"text": "https://dart-lang.github.io/linter/lints/avoid_relative_lib_imports.html"
},
"\n\n",
{
"type": "link",
"text": "https://dart-lang.github.io/linter/lints/prefer_relative_imports.html"
},
""
]
???????
Да, вот как раз это удовлетворит тем двум линтам что я скинул
Alexey
тут день назад вышло видео виджет оф зе вик про ignorepointer - кто знает, чем он отличается от absorbpointer? (лень гуглить!)
Alexey
Не стерпел, нагуглил: ignorepointer поглотит поинтер только для своего дитеныша, но лежащий в другом слое получит. А absorbpointer всосет pointer и не отдаст никому
???????
В итоге обновил правила линтера и все импорты в проекте переписал + еще два свежих правила из педантика учел)
Кирилл Матросов
когда уже 3к перешагнем?
Roman Diachenko
Да, конечно это возможно сам так сделал
Oleg
А есть пример или ссылка какая то?
roman G ??
почему может возникать такое поведение? Проблема с тем, что у меня после повторного отрытия экрана появляется такая ошибка, мол текуший lifecycle state-а difunct, хотя по идее он сейчас должен быть активным проверял dispose вызывается нормально, в консоле об ошибках информации нет
Artur
Начал использовать States Rebuilder вместо Provider'a, так, для общего развития. Пока всё очень удобно. Есть кто нибудь, кто пользуется? Какие наблюдения?
Yerassyl Maikhanov
там надо подзапросы в google api делать
Anatoliy Dvoryashin
А ты делал? Если есть где почитать скинь плиз
Yerassyl Maikhanov
[
{
"type": "link",
"text": "https://pub.dev/packages/place_picker"
},
" я вот эту либу чутка переделывал под себя"
]
Yerassyl Maikhanov
у меня вопрос есть ли какой либо эталонный analysis_options для pedantic
Aleksey
Можешь взять за основу мои правила)
Aleksey
бери у фокса за образец
Evgenii Elchev
[
"не могу понять свой код))\n\n\n ",
{
"type": "mention",
"text": "@override"
},
"\n Stream mapEventToState(\n CheckEvent event,\n ) async* {\n if (event is CheckSubmittedEvent) {\n yield* _mapSubmittedToState(event);\n } else if (event is CheckSubmittedEvent) {\n yield* _mapResetToState(event);\n }\n }\n\n Stream _mapSubmittedToState(CheckSubmittedEvent event) async* {\n yield CheckProgressState(event.query);\n try {\n final apiToken = await _sessionRepository.getApiToken();\n final result = await _userApiClient.search(apiToken, event.query);\n // сюда не доходит\n print(result);\n yield result.isEmpty\n ? CheckOneState(event.query)\n : CheckTwoState(event.query, result);\n } catch (e) {\n yield CheckErrorState();\n }\n }\n\nв блоке, не выполняется код после ",
{
"type": "code",
"text": "await _userApiClient.search(apiToken, event.query);"
},
" (я бряками смотрю, принт уже от безысходности) при том что сам поиск выполяется, запрос уходит на сервер, приходит ответ, благополучно выполянется return а на этой стороне тишина("
]
Mehdi Heyderov
Здравствуйте
Mehdi Heyderov
Можете подсказать как убрать жолто чёрную полосу
Алексей Анисов
в скролл вью запихай это
Алексей Анисов
либо сжимай когда клавиатура поднимается, но будет выглядить стремно скорей всего
Evgenii Elchev
а по моему вопросу нет идей?)
Алексей Анисов
у тебя сложные вопросы))
Алексей Анисов
catch не проверял?
Andrey P
может у тебя все таки ошибка
Evgenii Elchev
проверял конечно, молчек там)
Compote
а catch общий делал или на какую-то специфическую ошибку?
Алексей Анисов
там же тип не указан вроде
Evgenii Elchev
пока общий, потом разделю на ошибку сервера и на ошибку сети
Алексей Анисов
значит общий)
Andrey P
сказок не бывает -зависает запрос значит - может быть выше - вообще не отваливается по таймауту? если убрать второй запрос - что происходит?
Ленар Махмутов
а можно же внутрь запроса провалится и там по шагам чекнуть
Evgenii Elchev
первый запрос к локальным настройкам, если второй бурать то все ок)
Compote
[
"а реализацию можно посмотреть? ",
{
"type": "pre",
"text": " _userApiClient.search(apiToken, event.query);",
"language": ""
},
""
]
Ленар Махмутов
мне почему то тоже кажется что проблема в запросе
Evgenii Elchev
делал, там все ок вплодь до ретурна(
Алексей Анисов
попробуй не делай return а результат в переменную положи
Алексей Анисов
и проверь ее
Алексей Анисов
а потом return
Evgenii Elchev
там так и есть) и в переменной результат)
Andrey P
и проверь другой любой запрос
Andrey P
который точно работает
Evgenii Elchev
короче, там никаких магичейских сайд эфектов быть не может?
Ленар Махмутов
все так говорят )
Evgenii Elchev
попробую все перезагрузить тогда
Andrey P
это только ты можешь сказать ) твой же метод
Andrey P
покажи его общественности
Ленар Махмутов
обложи все принтами по самое не хоч
Evgenii Elchev
я про язык) может я не так понял стримы)
Ленар Махмутов
чтобы на каждом шаге отвечал что да как
Dmitriy Orteney
у нас бывает в стримах пропадают ошибки, особено с вложенным yield* х)
Ленар Махмутов
а зачем там await?
Ленар Махмутов
я этот момент не очень понял
Evgenii Elchev
не люитель тянуть то без чего и так норм) я его помню во времена swift 2 втянул, потом выпиливал когда лучше понял что не такой он и крутой)
Алексей Анисов
ну метод async видимо
Evgenii Elchev
асинхронный код же
Ленар Махмутов
а сам запрос тоже асинхронный?
Ленар Махмутов
ну в смысле функция внутри которая
Ленар Махмутов
я с этими await у флаттера постоянно путаюсь где он нужен где не нужен
Алексей Анисов
я вот не уверен с return type там, разве если метод async* то надо писать Stream return type? вроде просто тип результата, а дарт сам в стрим завернет
Ленар Махмутов
в идеале надо видеть что внутри происходит
Ленар Махмутов
иначе гадать )
Compote
как бы да) Раз после этого вызова ничего не приходит, нужно смотреть что в нем происходит
Evgenii Elchev
Так, я перезагрузился и все работает ???>?
|