Программирование : Dart & Flutter по-русски
Eugene
это псевдо PWA, засунули манифест и думают что теперь это PWA
Саша Вайнштейн
именно так почитай единственный коммент и пойми уровень IQ пользователей этого модуля))))
Дмитрий Щербаков
цена 2к еще ??
Саша Вайнштейн
просто есть программисты а есть программисты битрикс это две разные категории специалистов))) в эпоху веба на коленке я работал с битриксом и в целом проклинал каждую минуту своей жизни))) очень громоздкий фреймворк который мнит себя царём)))))
Илья Максименко
я извиняюсь
Илья Максименко
почему блин в дарте нет перегрузки методов??????????
Илья Максименко
спасибо за внимание
tdesc
вы видимо про что-то другое
Илья Максименко
это переопределение если чо
Илья Максименко
тоже раньше путал
tdesc
есть опциональные параметры, не знаю, плодить функции с одинаковыми именами тоже не всегда хорошая практика
Илья Максименко
та нет, не вижу минусов
tdesc
ну ок, с таким не поспоришь )
Eugene
Возможно я ошибаюсь, но у этого подхода ноги растут из Си, там принято использовать крайне короткие названия функций
tdesc
думаю при желании на эту тему в dart lang ченить можно найти
Илья Максименко
ну, ведь для этого и придумали такую вещь как сигнатура
Илья Максименко
чтобы по типам переменных которые передаются можно было понять что делает метод
Илья Максименко
но дарт решил добавить немного питона
tdesc
как показывает практика продакшн пишется без этого с равным успехом
Дмитрий Щербаков
По названию метода должно быть понятно что он делает
Илья Максименко
название метода входит в сигнатуру
Daniil Kolyasnikov
вы случаем не про typedef ?
Дмитрий Щербаков
Вообще куча этих условностей растет из махровых 90
Дмитрий Щербаков
Длина строки не больше 120 символов или сколько там
Дмитрий Щербаков
У всех уже 2к Моники
Илья Максименко
та не у всех((
??leg
Ну это не совсем из 90-х, это из удобства скорее ??
Илья Максименко
та и так проще читать
Илья Максименко
обычно когда большой монитор то открывают два окна
Илья Максименко
а если больше 120 то не получится
Eugene
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/7448262/why-are-c-names-shortened#:~:text=2%20Answers&text=This%20is%20partly%20historical.,names%20were%20all%20made%20short"
},
".\n\nВот я нашёл ответ, который меня также интересовал. Получается перегрузку функций придумали из-за коротких названий самих функций"
]
Степан Ревицький
Ви працюєте на стаф чи просто копію робите?
I V ?-N
Копію)) Хочу зробити краще оригіналу)
Gorohov Valeriy
Всем привет. Вопрос по верстке ListView мне нужно сделать так, что бы первый и последний элемент списка могли быть доскроллены до центра экрана. задача усложняется тем, что высота элементов списка динамическая. В какую сторону копать?
Daniil Kolyasnikov
[
"*рубрика немного говнокода*\nв начало добавить прозрачный контейнер с высотой == (высота рабочей области списка - высота первого элемента )",
{
"type": "bot_command",
"text": "/2"
},
", аналогично в конец только с высотой последнего элемента"
]
Gorohov Valeriy
Не, это можно и без говнокода, используя паддинги у ListView/ Изначально так и работало, пока элементы были фиксированного размера. А вот с динамикой уже так не работает.
Daniil Kolyasnikov
Паддинг у listview мне кажется, здесь не должен сработать .
Gorohov Valeriy
[
"Как раз работает, я про ",
{
"type": "code",
"text": "ListView.padding"
},
", не про ",
{
"type": "code",
"text": "Padding(child:ListView)"
},
""
]
Artem Tkachenko
[
"нужно кастомизировать SliverMultiBoxAdaptorWidget\nзаоверрайдить \n",
{
"type": "link",
"text": "https://api.flutter.dev/flutter/widgets/SliverMultiBoxAdaptorWidget/createRenderObject.html"
},
"\n\nи вернуть свой класс который наследуется от RenderSliverFixedExtentList в котором просчитать необходимые offset для 1го и крайнего элемента"
]
Gorohov Valeriy
Спасибо) Но я сначала попытаю счастья меньшей кровью, в этом проекте sliver для меня уже стали головной болью)
Mihail Studenets
ребят, есть кто свободный с опытом в IOS ? Нужно либу на стооне ИОС модернизировать. напишите плз свой рейт в личку.
Daniil S
вам проще наверное в чат iOSников написать, я думаю тут очень мало людей с опытом в iOS готовых вам помочь
Ajay Prabhakar
[
"Привет ребята,\nВо время этой блокировки я опробовал новые дизайны пользовательского интерфейса с использованием Flutter, и это оказалось действительно круто??.\nВы можете найти эти дизайны на моем GitHub:\n",
{
"type": "link",
"text": "https://github.com/Chromicle/awesome-flutter-ui"
},
"\nпоставьте звездочку?? если они вам нравятся, любые отзывы приветствуются"
]
Mihail Studenets
спасибо за совет.
vasilich
[
"Зырь сюды\n\n",
{
"type": "link",
"text": "https://flutter.dev/docs/cookbook/networking/fetch-data#5-display-the-data"
},
""
]
Игорь
[
"Future != String\nСоветую прочитать про future в dart\n\n",
{
"type": "link",
"text": "https://dart.dev/codelabs/async-await"
},
""
]
vasilich
Так там же фючер билдер, который тебе и нужен
vasilich
Как раз пункт 5 - как отобразить хероту из фьючера
vasilich
Ну почему же) Тебе с сервера вернётся строка жуйсоном. Ее нужно перевернуть в какую-то модель. В том примере показано как сделать такую модель.
vasilich
Тогда не переворачивай, а просто дата верни из респонса
vasilich
Что ж не понятного? Из асинк функции верни строку. Фьючер из функции суёшь в фьючер билдер. Как загрузится - в снапшот.дата поучишь строку.
vasilich
Если после этого все ещё не понятно - пройди весь туториал по той ссылке.
Ivan
я бы даже добавил, проходи до тех пор, пока в спинном мозге не отложится понимание асинка =)
vasilich
Нехай сам скажет - понимает ли он асинк или просто во флаттере новичок)
Ivan Heveliev
[
"Future fetchAlbum() async {\n final response = await http.get('",
{
"type": "link",
"text": "https://jsonplaceholder.typicode.com/albums/1"
},
"');\n if (response.statusCode == 200) {\n var data = json.decode(response.body);\n print(data);\n// {userId: 1, id: 1, title: quidem molestiae enim}\n print(data['userId']);\n print(data['id']);\n print(data['title']);\n return response.body;\n } else {\n throw Exception('Failed to load album');\n }\n }"
]
Ivan Heveliev
это то, что вы хотели?
oc1 kent
Парни я тут вчера спрашивал вопрос касательно того, что мне dart не дает юзать запросы http, а что делать если мне нужно тянуть данные прям с IP адресов и тем более протоколом только http?
oc1 kent
посоветовали добавить что-то волшебное в манифест только что?
oc1 kent
StateError (Bad state: Insecure HTTP is not allowed by platform:
vasilich
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/51902629/how-to-allow-all-network-connection-types-http-and-https-in-android-9-pie"
}
]
oc1 kent
спасибо а кто в танке в какой из AndroidManifest.xml добавлять?
Ivan
нене, асинхронный метод возвращает тебе обьект класса Future , чтобы достать YourClass просто ставь await перед тем как вызвать этот метод, это все. Можешь поиграть в дартпаде void main() async { print(syncMethod('sync')); print(await asyncMethod('async')); print('Completed'); }
Future asyncMethod(a) { return Future.delayed(Duration(seconds: 1), () => a); }
String syncMethod(s) => s;
Илья Максименко
как сделать так чтобы в метод нельзя было передавать объекты типа который не наследует сразу оба класса
Илья Максименко
а в жаве получается можно?
Roman Vasiliev
Наследует оба класса, значит один из них наследует второй
Илья Максименко
Необязательно
Roman Vasiliev
Если НАСЛЕДУЕТ - обязательно
Аят Алиев
А где хранятся цвета во flutter?Тут есть папка как в андройде типо colors?
Илья Максименко
ну окей, не наследует, а имплментирует
Илья Максименко
Т должен наследовать класс B и имплементировать класс С
Andrew Ka
[
"Контрольный выстрел ?? ",
{
"type": "link",
"text": "https://github.com/flutter/flutter/issues/11426#issuecomment-414047398"
},
""
]
Илья Максименко
или Т должен имплементировать интерфейсы A и B
Илья Максименко
по идее должны быть такие кейсы
Daniil S
отнаследовать сразу 2 класса в дарте нельзя, в джаве вообще нет множественного наследования. В дарте есть огрызочек от этого - mixin
Илья Максименко
ну, я в курсе что в жаве нет множественного наследования
Илья Максименко
там есть множественное имплементирование
Ivan
так нигде почти нельзя, собственно в этом смысл ооп =)
Илья Максименко
кусок жава кода
Daniil S
реализовывать интерфейсы да, ограничений нет.
Илья Максименко
хотелось бы такое в дарте(
Daniil S
напишите 3 класс, который реализует вот это вот ваше и все и его в дженерик запихните =)
Ivan
но абстрактные классы использовать как интерфейсы нельзя ) а дарте вроде можно
Andrew Ka
У нас есть extends, implements и with для миксинов
Daniil S
можно, в дарте и ключевого слова нет - interface
Daniil S
пишут абстрактный класс
Daniil S
можно I добавить для наглядности
Илья Максименко
имплементс и with не работают в женериках
Ivan
ага я понял уже, сорри )
Илья Максименко
или вы о чем
Dr. Sergey Glukhota
Привет. Пацаны, мне нужен flutter разраб на недельку. Кому-то нужно немного денег и прикольной экспы? :)
Илья Максименко
получается что так и сделаю, но надоело говнокодить из-за ограниченности дарта
Daniil S
опиши проблему, которую хочешь решить, ты хочешь чтобы объект передаваемые в метод реализовывал 2 интерфейса?
Илья Максименко
да, в точности это
Daniil S
напиши 3 и его пихни дженериком =)
Daniil S
я не знаю алгебра ли это типов, но писать так чтобы и то и то было наверное нельзя
Daniil S
по крайней мере я не встречал еще такой записи
Илья Максименко
я же кидал скрин жава кода
Pavel Erokhin
мда, и до сих пор ни до кого не дошло, что это всего-лишь биология ...
Илья Максименко
на самом деле я понял, что мне проще забить, пусть в клиентском коде какой хотят такой тип и указывают????
Pavel Erokhin
нет, он хочет задать lower bounded type
Pavel Erokhin
чтобы T был как минимум BoxModel
Pavel Erokhin
но такой его код и в джаве не сработает, точнее сложно сказать, всю строку не видно
Daniil S
тут будет как минимум BoxModel
Илья Максименко
чтобы Т был как минимум BoxModel и как минимум ModelWithId
Илья Максименко
чтобы получить доступ к интерфейсу
Кирилл Пешин
[
"Всем привет.\nПомогите пож-та начинающему )))\n\nЕсть пет проект, которым давно не занимался и вот решил обновить...\nНо, наблюдаю глюки с 29 и 30 API - на них или не устанавливается или не работает\n\nУ меня зависимости:\n\n camera: ^0.5.8+7\n file_picker: 2.0.2\n flutter_email_sender: ^3.0.1\n flutter_speed_dial: ^1.2.5\n json_annotation: ^3.1.0\n open_file: ^3.0.1\n path_provider: ^1.6.18\n permission_handler: ^5.0.1+1\n share: ^0.6.5+2\n shared_preferences: ^0.5.12\n sqflite: ^1.3.1+1\n url_launcher: ^5.7.2\n\ndev_dependencies:\n build_runner: ^1.10.0\n # flutter pub run build_runner build\n # flutter pub run build_runner watch\n pedantic: ^1.9.0\n ",
{
"type": "hashtag",
"text": "#flutter"
},
" analyze\n json_serializable: ^3.5.0\n\nbuild.gradle\n\nbuildscript {\n ext.kotlin_version = '1.4.10'\n repositories {\n google()\n jcenter()\n }\n\n dependencies {\n classpath '",
{
"type": "link",
"text": "com.android.tools.build"
},
":gradle:3.5.0'\n classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n }\n}\n\ncompileSdkVersion & targetVersion 28 - пробовал 29 и 30 - глючит, все равно\nGradle - distributionUrl=https\\://",
{
"type": "link",
"text": "services.gradle.org/distributions/gradle-5.6.2-all.zip"
},
"\n\nFlutter Stable - 1.20.4\nМожет он еще не готов к 29 и 30 API и нужно подождать?"
]
Илья Максименко
один класс работает
Pavel Erokhin
ну создай общий интерфейс лол)
Илья Максименко
там просто сложно
Pavel Erokhin
и там имплементь 2 интерфейса
Илья Максименко
я только что попробовал
Илья Максименко
есть классы которые наследуют ModelWithId
Daniil S
ну я предложил, мне кажется это весьма лаконично, чем типы складывать
Илья Максименко
и имплементируют BoxModel
Илья Максименко
ну, мне лаконичней было бы один знак & поставить
Илья Максименко
чем сейчас создавать еще один интерфейс и исправлять 10 классов моделей
Pavel Erokhin
ну а кто виноват, что не знал особенностей языка?)
Илья Максименко
получается я
Pavel Erokhin
в следующий раз сразу сделаешь правильно
Илья Максименко
я же не виню никого кроме себя и разрабов дарта
Илья Максименко
я тоже думал что так будет работать
Илья Максименко
если ты внутри main
Daniil S
анализатор не ругается вроде, не работает?
Илья Максименко
попробуешь вызвать абстрактные методы класса B
Илья Максименко
то дарт меня пошлет
Daniil S
у меня работает все
Илья Максименко
ладно, сейчас сам попробую в дарт паде
Илья Максименко
мб в проекте какая-то лажа
Daniil S
а в вы их ведь переопределили?
Daniil S
методы написали без тела?
Илья Максименко
а разве должен был?)
Илья Максименко
это же абстракция
Илья Максименко
тип T должен быть не абстрактным
Илья Максименко
с реализацией
Илья Максименко
я имел ввиду подчеркнет мне его если что
Илья Максименко
да, сейчас попробую
Дмитрий Щербаков
чем вам миксин не нравится?) если надо больше 2-ъ классов миксить то это наверное уже вопрос к архитектуре (кривой)
Daniil S
как я понимаю, вы пытаетесь вызвать метод у объекта, который якобы имплементит класс, но сами вы этот класс не написали, теперь вопрос, а как компилятор и анализатор поймет что это вообще такое, что вы передаете?
Daniil S
это у вас не работает, верно?
Илья Максименко
вот так тоже не работает
Daniil S
наверное самым хоршим решением будет написать класс С, который наследует A и B
Daniil S
иначе не получится записать
Илья Максименко
ну факт в том, что дарт игнорирует класс который пишется второй
Илья Максименко
это же не то, что мне в конечном счете нужно, просто вы говорили что это из-за того что реализации нет как я понял
Илья Максименко
ну вот, получается два класса с реализацией
Ivan
обьясните тупому, почему так нельзя
Илья Максименко
всмысле нельзя
Pavel Erokhin
+++, уже бы как минимум 15 минут назад бы он решил эту проблему)
Daniil S
человек так не хочет писать, не знаю почему
Илья Максименко
если бы так можно было бы сделать я бы сделал, поверьте
Daniil S
а в чем проблема то?
Pavel Erokhin
ну и правильно что не дает ИМХО я на дарте пока особо не пишу и вообще не знаю нахера такая запись но если логически подумать какого типа тогда будет t? чего ты хочешь достичь такой записью? че там будет за тип такой тогда?
Илья Максименко
секунду, попробую в дарт паде опять пример сделать
Tim
Товарищи, всем доброго денёчка. Вопрос - в базе данных есть данные, они отображаются в DataTable, у данных есть имя, фамилия и.возраст . Каким образом можно при нажатие на имя или фамилию перейти именно в тот профайл имя которого указано в DataTable, а ежели такой профиль не зарегистрирован - выводить сообщение мол его нет в системе.. Подскажите пожалуйста или подбодрите ссылкой какой. Заранее человеческое вам гранд мерси.
Pavel Erokhin
да и в теории такое же невозможно, класс не может экстендить больше одного класса
Pavel Erokhin
хз как в дарте, но в других языках так
Pavel Erokhin
если только через интерфейс, возможно для этого и есть ключевое слово with
Daniil S
можно 2 дженерика передать и там понять что есть что
Daniil S
а типы опициональными сделать
Pavel Erokhin
два варика: сделать две перегрузки t метода с разными типами (ну норм варик) сделать общий класс и там унаследовать и реализовать что нужно
Pavel Erokhin
примерно это сделать можно за 2 или 3 секунды
Pavel Erokhin
ну по клавишам тыкать самое долгое
Pavel Erokhin
чел уже 20 минут сидит ))))))))))))))))))))
Daniil S
перегрузки в дарте нет
Daniil S
только общий тогда
Pavel Erokhin
понял)), я просто пока на нем не пишу))))
Daniil S
ну в целом да, перегрузка была бы хорошим вариантом если точно ответственность будет разделена и не будет вызывов из A когда работают с B
Владимир Калашников
Всем привет) Хотел спросить, initState() выполняется перед методом build()?
Daniil S
вдруг что придумает и мы ахнем, круто же будет
Andrey Gaysin
это можно проверить через print
Daniil S
дебагер еще есть
Владимир Калашников
Этот кусок кода кидает nullpointer exception, а потом все нормально работает
Владимир Калашников
void initState(){ // TODO: implement initState getFiles(); super.initState(); } void getFiles() async{ files = await loadFiles(); }
Batyrzhan uulu
[
"“”””\n",
{
"type": "code",
"text": "@override\nWidget build(BuildContext context) {\n return FutureBuilder(\n future: items,\n builder: (context, snapshot) {\n print(\"BLA BLA BLA BLA\");\n // operation for completed state\n if (!snapshot.hasData) {\n return Center(child: SpinnerWidget(),);\n } else {\n return Container(\n height: 400.0,\n child: ListView.builder(\n shrinkWrap: true,\n scrollDirection: Axis.horizontal,\n itemCount: snapshot.data.length,\n itemBuilder: (context, index) {\n var item = snapshot.data[index];\n return Container(child: Text(item.title));\n }),\n );\n }\n },\n );\n}"
},
"\n“”””"
]
Daniil S
а что внутри loadFiles?
Batyrzhan uulu
С этим кодом получаю вот это, как мне эти строки воткнуть в Columns. Как мне сделать кто подскажет?
Владимир Калашников
Future > loadFiles() async { // Create list of custom files List files = new List();
//Get path to file directory String path = await getLocalPath();
// Create string list of all files List allFiles = io.Directory("$path").listSync().map((e) => e.path).toList(); // for (String i in allFiles){ files.add(CustomFile(filePath: path + "/", fileName: i.split("/").last, fileExtension: i.split(".").last)); }
return files; }
Daniil S
scrollDirection.vertical
Daniil S
или вообще уберите
Daniil S
если в дебагере запустить или в консоле что пишет?
|