Программирование : Dart & Flutter по-русски
Hellomik
о круто я его уже не помню????
Hateful
ну кроме графического ускорения ниче не трогал, все по умолчанию
???????
поетому в приватных методах и переманных пусть (в дарте) хоть var'ами срут сколько хотят
???????
Но публичный интерфейс всегда должен быть типизирован
???????
Вплоть до дженериков
Sergey Hottabych
Я к тебе и не обращался ни разу. Ты сам везде лезешь с советами, хотя я тебя не просил меня поучать.
Sergey Hottabych
Всё, умолкаю, чтобы на санкции не нарваться.
Hellomik
смотри открой android studio и все устройства удали от туда после добавь свой но с более мелким расширением и меньше оперативки
Hateful
и то что я оперативку и разрешение уменьшу реально поможет от BSOD'ов?Это прям из практики опыт или как?Я просто связи не вижу. Оперативки дофига, карточка нормальная,проц мощный, винда сборки конца 2019
Alex Blagodaryov
[
{
"type": "link",
"text": "https://dart.dev/guides/language/effective-dart/design#avoid-type-annotating-initialized-local-variables"
}
]
???????
[
{
"type": "link",
"text": "https://t.me/rudart/195371"
}
]
Alex Blagodaryov
[
{
"type": "code",
"text": "as"
},
" же кстати тоже вроде не рекомендуют и правило есть, но кодогенерация использует именно его"
]
???????
Ты про конкретную запись?)
???????
Если да, то в пятый раз: это не боевой код, просто пример кастинга
Alex Blagodaryov
[
"Ну да, за вот это ",
{
"type": "link",
"text": "https://dart-lang.github.io/linter/lints/avoid_as.html"
},
""
]
???????
[
{
"type": "link",
"text": "https://github.com/PlugFox/dart-tools/blob/master/analysis_options.yaml"
},
"\n\nУ меня все эти правила есть)"
]
???????
Конкретного нету, тк его нет в педантике и эффектив, обрати внимание
???????
[
"as требуется иногда когда теряется предидущая проверка на тип ",
{
"type": "code",
"text": "is"
},
""
]
Alex Blagodaryov
А, я понял, ты на чистом педантике, не добавлял ничего ????
???????
смесь педантика, эффектив минус правила на 80 строк и аннотацию всего публичного (только для пакетов пользую) плюс еще пару строгих правил, в тч на типизацию
???????
В общем самую каплю злее педантика
Павел
это получается в функциях не надо тип указывать? а каков уровень функции должен быть?
???????
Ты можешь не указывать типы у всего приватного
???????
Это норма, если нравится строгая типизация
Павел
то пишут указывайте то не указывайте)
Павел
Omitting the type focuses the reader’s attention on the more important name of the variable and its initialized value.
???????
по педантику и эффектив - можешь не указывать при инкапсуляции
Alex Blagodaryov
Для того, что наружу смотрит - указывать, для локального можно не указывать, дарт сам выведет тип
???????
плюсом - чуть удобнее читать на мелкоэкранчиках и блюсти правило в 80 символов
???????
минусом - куча дебилов не указывают типы и стреляют себе в ноги
???????
минусом - снижается читаемость логики
???????
минусом - если выстрелишь себе в ногу - узнаешь об этом не сразу
Павел
ну например если в голове контроллируешь что передаешь
???????
Ну и да, если спросишь моего мнения, лучше писать var чем просто Map без дженерика
Alex Blagodaryov
Есть пример? Там же всё равно тип выводится, если дарт не может его вывести, он напишет
???????
[
"Да\n",
{
"type": "link",
"text": "https://t.me/rudart/195409"
},
"\n\nименно про это и написал"
]
Павел
динамик это и есть выстрел в ногу?
???????
Кейс ультра популярный. Ты получаешь List вместо Map из json. var это хавает
???????
да, dynamic'ов старайся избегать
???????
лучше даже Object пиши, есичо
???????
хоть немного подстрахуешься
???????
Map - отлично var - приемлимо Object - ну чото meh, но хоть потом кастанешь dynamic - тiкай з городу
???????
вот мой from god to shiet type tier
Павел
имя иконки приложения закладывается в name ? в pubspec
???????
Есть отличный пакет для генерения этого дела
Павел
по рекомендациям там только маленькие буквы и подчеркивания
Павел
неее, я имел виду когда установлено на телефон, под иконкой текст сейчас берется из pubspec
???????
[
{
"type": "link",
"text": "https://pub.dev/packages/flutter_launcher_icons"
}
]
Павел
но там же иконки только а текст имя
???????
Ты про имя приложения?
Павел
в прошлый раз правил в xcode
???????
При публикации указываешь
???????
Покрайней мере в гугл плее, насколько помню
Павел
хм то есть при дебаге не обращать внимания?
???????
насколько помню, укажешь при публикации
Dmitriy Orteney
[
"в андроиде имя под иконкой берется из AndroidManifest.xml\n",
{
"type": "code",
"text": " \n"
},
"в ios вроде из Runner/info.plist\n",
{
"type": "pre",
"text": "CFBundleName\nПрилаженька",
"language": ""
},
""
]
Павел
да так и делал в прошлый раз вручную. думаю сразу задать можно
???????
Скорее всего можно, тк приложения ставятся и мимо маркета
???????
Но наскок помню, при публикации оно перезаписывает все равно
Dmitriy Orteney
Имя в маркете никак не влияет на имя приложения)
???????
Под иконкой с маркета не будет отображаться тоже имя что и в маркете?
Dmitriy Orteney
Можно писать в маркете: "Супер приложение для сброса веса", а на девайс поставится "лошара"
Павел
какая то либа привезла с собой постоянное отслеживание местоположения( Подозреваю Connectivity
???????
Можно провернуть такую афферу из "карты деньги два ствола", с названием "любители пощекотать очко"
Павел
а как поискать у либ, какие права они требуют?
i Bog
есть какой-нибудь способ принудительно остановить async метод который выполняется довольно долго? скажем юзер закрыл страницу не дожидаясь загрузки контента, и охота прервать ненужный труд в фоне
???????
.timeout у него указать
???????
Также можешь использовать Compliter
???????
[
{
"type": "link",
"text": "https://api.dart.dev/stable/2.8.2/dart-async/Completer-class.html"
}
]
???????
Предупреждаю сразу "отменяешь" ты только ожидание, само future не прерывается
i Bog
Compliter это скорее колбек чем способ прервать
???????
там есть метод completeError у него
???????
Вроде единственный +- адекватный способ убийства длительных операций - помещать свои операции в изолят и убивать сам изолят
???????
[
"Можешь посмотреть в сторону библиотеки ",
{
"type": "code",
"text": "@dsrenesanse"
},
" - worker_manager"
]
i Bog
не знаю чем это (completeError) лучше handleError скажем для стрима
Павел
simple_connectivity NOTICE : This plugin is a fork of the connectivity using the same source code and functionality. The only difference between the two packages is that simple_connectivity does not require the user to add the NSLocationWhenInUseUsageDescription and NSLocationAlwaysUsageDescription strings in the info.plist file since all location-aware code has been removed from the plugin.
???????
Это вообще полностью разные методы
???????
и служащие для разных вещей
4??uzhoy .
если контент грузится через дио то там есть возможность убить клиент
???????
completeError - не хендлит
???????
[
{
"type": "link",
"text": "https://api.dart.dev/stable/2.8.2/dart-async/Completer/completeError.html"
}
]
i Bog
хм, это вариант, у меня как раз длинный сетевой вызов который юзер может недожидаться (это о dio)
???????
Твой вариант - timout()
???????
Также в HttpClient ты можешь указывать таймаут для всего
???????
Обычно сервер держит соединение гдет около 120 секунд
i Bog
не вариант, юзер может ждать а может не ждать загрузки
???????
в браузере сам браузер оборвет соединение
???????
Очевидно, что у вас не правильно сделан бэк
???????
Если ты что то большое качаешь - качай чанками
???????
если помещаешь в очередь на обработку - помещай с id, а затем лонг поллингом ожидай готовности
i Bog
кейс простой - открытие юзер профайла, бывает что он грузится секунд 20 и пользователи просто закрывают и открывают следующий профайл
i Bog
вот и думал как прерывать хвосты принудительно
???????
так яж говорю, ты не можешь ОТМЕНИТЬ выполнение future
???????
ты можешь просто выкинуть ошибку и не дожидаться его выполнения
???????
если всеже хочешь такую оптимизацию - смотри в сторону изолятов
???????
ну и да, если у вас там профайл грузится по 20 секунд, что то вы делаете не так)
i Bog
согласен, но приходится работать с тем что есть )
???????
[
"В общем попробуй библиотеку Даниила\n",
{
"type": "link",
"text": "https://pub.dev/packages/worker_manager"
},
""
]
4??uzhoy .
[
{
"type": "link",
"text": "https://github.com/flutterchina/dio/blob/master/example/cancel_request.dart"
}
]
i Bog
спасибо это пока лучшее решение
Kostya Tsymbaliuk
привет, нужен совет, не могу понять в чем проблема, в двух словах есть ListView, в него подгружаются айтемы которые есть в локлаьной БД Moor, для подгрузки инфы с сервера использую пагинацию, условно за 10 айтемов до конца делаю запрос и получаю данные, эти данные пишу в Moor, он соответственно сразу дает дает мне в UI инфу о поступлении новых айтемов и рендерит их. Вот тут возникает вопрос. в момент получения данных от сервера + записи в БД + отдачи в юай у меня вылетают микрофризы на пол секунды где-то. Все вроде бы работает асинхронно, ну точнее сетевой запрос асинхронный, далее когда прилетает ответ пишу это асинхронно в бд ну а БД инфомирует уже о новых айтемах UI . Сорри если вышла каша )) сталкивался кто-то с похожей проблемой, или у меня явно косяк где-то в архитерктуре и я просто чрезмерно рендерю что-то изза этого эти микрофризы
Kostya Tsymbaliuk
может подскажите как это можно продебажить чтобы найти проблему?
???????
фризы могут быть от jsonDecode
Kostya Tsymbaliuk
а как его можно побороть?
???????
координально любые проблемы решаются с помощью изолятов
Kostya Tsymbaliuk
ага вынести из основного треда фактически это все
???????
[
"если уверен, что тебе колеса в палки вставляет именно jsonDecode, а все остальное супер - ",
{
"type": "code",
"text": "Compute"
},
" оберни его"
]
???????
Если все мозга делает - делай паралельно работающий изолят
Kostya Tsymbaliuk
понял, спасибо за совет, попробую
???????
Возьми вокер менеджер Даниила, Или возьми компьютер Сергея
???????
Ну или можешь взять мой хелпер из гиста
???????
[
{
"type": "link",
"text": "https://gist.github.com/PlugFox/a7a5fd8ef307ea5f717855aff377dc2b"
}
]
Kostya Tsymbaliuk
спс, пробую
S
[
"Привет всем.\n\nПри запуске выдает ошибку (OS Error: No address associated with hostname, errno = 7).\n\nЯ пытаюсь отправить запрос из сайта с настроенным локальном доменом ",
{
"type": "link",
"text": "lararest.my"
},
". В браузере хорошо работает json код(приклиплю скриншот внизу). Локальный сервер Open server. ",
{
"type": "link",
"text": "http://127.0.0.1:8000/api/categories"
},
" - так тоже не работает. Когда я отправляю запрос, он показывает какую-то ошибку. Так же в yaml файле прописан - http: ^0.12.1.\n\n//File Repository\n import 'package:http/http.dart' as http;\n\nclass Repository {\n\n String _baseUrl = '",
{
"type": "link",
"text": "http://lararest.my/api/categories"
},
"';\n\n httpGet(String api) async {\n return await http.get(_baseUrl + \"/\" + api);\n }\n\n}\n\n //Slider Code\n\n import 'package:ecommerce/repository/reposiory.dart';\n\n class SliderService{\n Repository _repository;\n SliderService(){\n _repository = Repository();\n }\n\n getSliders() async{\n return await _repository.httpGet('sliders');\n }\n }"
]
S
где я сделал ошибку? можете помочь?
admin
Ну слушай, такого домена реально не существует)
admin
А, сервер локальный? Так пропиши IP-адрес
Nikita Domnitskii
Это флаттер?
Nikita Domnitskii
На эмуляторе локалхост на другом ип если что
???????
Гдет статик днс не донастроил судя по всему
Ulugbek Isroilov
всем привет. кто пользуется grinder подскажите из-за чего может быть такая ошибка
Ulugbek Isroilov
даа. тоже на нее думаю
Ulugbek Isroilov
как это лечить?
???????
Тагни через чяс, научу пользовать прально
???????
Если в крации то прям flutter.bat
???????
По вумнаму - геттер с тернарником и io.platform.iswindows
Ulugbek Isroilov
кажется понял о чем ты
S
это локальный домен, на опен сервере
S
я прописал , тоже самое
S
это я через телефон запустил
Ulugbek Isroilov
спасибо??
Nikita Domnitskii
Ну так ты на телефоне в браузере открой
Nikita Domnitskii
Ну так иди донастраивай сервер свой
S
если на какой то поддомен залю свои файлы , потом оттуда спрашивать запрос , то срабоатает?
S
реальный хостинг в интернете
?? Назар Калитюк
Можно ли установить дарт 2.7, когда уже установлен 2.8 через brew? А то мне ошибку пишет Error: No available formula with the name "dart@2.7"
???????
[
{
"type": "pre",
"text": "import 'dart:io' as io;\n\nString get flutter => io.Platform.isWindows\n ? r'flutter.bat'\n : r'flutter';\n\n@Task('Upgrade flutter')\nFuture upgrade() async => logProcessOutput(\n flutter,\n arguments: ['upgrade'],\n );\n\nFuture logProcessOutput(String executable,\n {List arguments}) async {\n final io.Process process = await io.Process.start(\n executable,\n arguments,\n );\n //final bool ansi = io.stdout.supportsAnsiEscapes;\n Completer completer = Completer();\n StreamSubscription> onSuccess = process.stdout.listen((message) {\n io.stdout.write('${utf8.decode(message)}');\n }, onDone: () => completer.complete());\n StreamSubscription> onError = process.stderr.listen((message) {\n io.stdout.write('\\x1B[31m${utf8.decode(message)}\\x1B[0m');\n }, onDone: () => completer.complete());\n return completer.future.then(\n (_) => Future.wait([\n onSuccess.cancel(),\n onError.cancel(),\n ]),\n );\n}",
"language": ""
},
"\n\nКак то так"
]
Tim
Как думаете, такое норм рисовать через drawLine постепенно увеличивая и уменьшая его ширину?
Григорий Коваленко
через drawPath надо
4??uzhoy .
[
"Хочу сделать синглетон менеджер сетевой, в нем ретрофит клиент, клиенту нужен дио, а дио нужны опции с ключом сессии которая в шаред префах лежит, правильно ли написал код ? или то что я хочу нужно делать по другому ? \n",
{
"type": "code",
"text": "class NetworkManager {\n Dio _dio;\n RestClient _restClient;\n bool _isInit = false;\n DioOptions dioOptions = DioOptions();\n\n static final NetworkManager _singleton = NetworkManager._internal();\n factory NetworkManager() {\n return _singleton;\n }\n NetworkManager._internal();\n \n RestClient get restClient => _isInit ? _restClient : _initRestClient();\n\n _initDio() async {\n SharedPreference sharedPreference = SharedPreference();\n _dio = new Dio(\n dioOptions.setBasicOptions(await sharedPreference.getSessionInfo()));\n }\n\n RestClient _initRestClient() {\n _initDio();\n _restClient = RestClient(_dio);\n _isInit=true;\n }\n}"
},
""
]
4??uzhoy .
_initDio(); по моему не отработает да ?
???????
Ну код стайл у тебя канешно, мдаааа.
???????
Если вызовешь - отработает)
???????
Отработает как только в первый раз дернешь свой синглтон
Dmitriy Orteney
у тебя в restClient null придёт
???????
Ну и да, очевидный return забыл
4??uzhoy .
тфу, ну это да, пасиб
4??uzhoy .
а вообще оно так и пишется ?
4??uzhoy .
нормально что там асинк метод ?
???????
Если уж собрался кудат выносить - выноси в изолят
???????
Если это все делаешь, чтоб из любого места интерфейса такие штуки дергать - сделай уж хотяб через get_it (это я про твой синглтон)
4??uzhoy .
я думал через провайдер
???????
Через провайдер еще лучше
???????
Ну и с кодстайлом тебе срочно что то надо делать
4??uzhoy .
ну вот, в верхах приложения до или после материал апп висит мульти провайдер, там и создам инстанс
4??uzhoy .
ну в смысле что тебе глаз режет
???????
прям с ходу: 1) протеляр пару final 2) забыл мщшв 3) ошибка с return 4) фабрику через short hand
4??uzhoy .
или подожди, мне же нужен синглетон даже если я кидаю его через провайдер ? или это уже не имеет значение
???????
Уже не должно иметь значения
???????
Тобишь синглтон то оставить можешь
4??uzhoy .
но он без надобности?
???????
Но не ради того, чтоб доставлять объект, а чтоб указать, что единый на все приложение
???????
Ну технически да, без надобности, но вреда от него не будет
???????
Только будет подмывать злоупотряблять правдо
4??uzhoy .
ну файнал это да, мщшв это ? и что за short hand? фабрика же так и создается ?
???????
5) new - не нужно, сам отучивался
???????
dioOptions.setBasicOptions(await sharedPreference.getSessionInfo())); - вот эту запись на .then переделать
4??uzhoy .
ты про key word? у меня там их нет, или про то что я пишу =Class(); ?
???????
Ты пишешь Object object = new Object()
???????
[
{
"type": "link",
"text": "https://dart-lang.github.io/linter/lints/unnecessary_new.html"
}
]
???????
factory NetworkManager() => _singleton;
???????
У тебя тут публичное поле, да еще без final DioOptions dioOptions = DioOptions();
4??uzhoy .
[
"аа, ты про это",
{
"type": "code",
"text": " _dio = new Dio()\n"
},
"я чет упустил"
]
???????
Вот установлю новые настройки, у тебя разве инициализация заного вызовется?
???????
_initDio() тут void потерял
4??uzhoy .
все, понял в общем, подправлю, я думал там принципиальное что то, типа асинк в инит методе
4??uzhoy .
оно же по умолчанию void если нет ретерна ?
4??uzhoy .
типа дурной тон?
???????
[
{
"type": "pre",
"text": "Future _initDio() =>\n SharedPreference()\n .getSessionInfo()\n .then((v) => _dio = Dio(v));\n\n",
"language": ""
},
"Как то так надо"
]
|