Программирование : Dart & Flutter по-русски
Григорий Коваленко
Задрали уже эти ниггеры
Andrey Kapitonov
Привет, а почему состояние может не обновляться в дочернем компоненте? Хотя я вижу что есть изменения
Andrey Kapitonov
Дочерний компонент имеет обертку, а сам является StatefulWidget
Урусай
Без кода не разберёшься
Урусай
Народ, а как вообще во флаттере тени работают? Мучаюсь с ними постоянно. Во флаттере вообще есть механизм, который позволяет теням накладываться на соседний элемент?
Andrey Kapitonov
[
"это в родителе\n",
{
"type": "pre",
"text": "child: Column(\n children: [\n buildHeaderView(context),\n PlaykitBoundary(streamUrl),\n buildPanelView(context),\n Expanded(\n child: _buildFutureProgram(),\n )\n ],\n ),\n\n",
"language": ""
},
"Это в дочернем\n\n",
{
"type": "pre",
"text": "Widget PlaykitBoundary(String stream) {\n if (stream.length > 0) {\n return Playkit(stream: stream);\n }\n\n return NotStream();\n}\n\n",
"language": ""
},
{
"type": "code",
"text": "class _PlaykitState extends State {\n VideoPlayerController _controller;\n ...\n initState и т.д.\n}\n\n"
},
"не обновляется вот это:\n\n",
{
"type": "code",
"text": "PlaykitBoundary(streamUrl),"
},
""
]
Олжас Сулеймен
а со стеком пробовал? аппбар накладывает на боди, можно там покавырять
Урусай
Насчёт аппбара - поковыряю
Урусай
Я очень много в инете про тени читал, да и на гитхабе есть несколько очень объёмных обсуждений по поводу теней - нигде нет ни workaround, ни подвижек к решению проблем (а их куча)
Andrey Kapitonov
Хотя там состояние обновляется, видимо нужно Плеер переинициализировать
Alexander PhatoM
Есть огромный список данных(допустим Man с полями name и age, данные могут изменятся(у определенного man изменится name или age). Список этих данных нужно отобразить на экране(все). Есть ли способ не перерисовывать заново виджеты, которые отображают данные, если данные не изменились, чтобы не нагружать устройство, или всё и так хорошо оптимизировано?
Andrey Kapitonov
didUpdate?
Andrey Kapitonov
а кто работал с VideoPlayer как уничтожить предыдущий плеер или есть варианты просто подменить поток?
Денис
[
"Народ появилась ошибка в проекте, при Navigator.of(context).popUntil((r)=>",
{
"type": "link",
"text": "r.settings.name"
},
" = '",
{
"type": "bot_command",
"text": "/name"
},
"')\n",
{
"type": "pre",
"text": "“!_debugLocked': is not true.”",
"language": ""
},
""
]
L
Сталкивался с этой проблемой, тоже интересует решение
Alexander PhatoM
но один men из списка будет изменен. Разве из за этого весь список не будет перерисовываться?
L
А список через listview builder сделан?
Урусай
Можешь попробовать через ChangeNotifier обновление сделать
Alexander PhatoM
[
{
"type": "link",
"text": "https://pub.dev/packages/flutter_sticky_header"
},
"\nчерез SliverList планирую, пока не делал, просто узнаю пока как лучше это сделать"
]
L
Тогда вроде не должно быть проблем, он же рендерит только то, что на экране сейчас
Alexander PhatoM
при каждом скроле заново рендерит все элементы?
Alexander PhatoM
сам почитал, спасибо за помощ
Aleksandr
Привет всем, у меня тут проблема, я делаю Push named + then setState с первого экрана. И на следующих экранах у меня есть pushNamedAndRemoveUntil. Когда в результате я возвращаюсь с пятого экрана на первый экран, then уже не срабатывает, и этот экран не перерисовывается. Как мне отдетектить это возвращение на стартовом экране ?
Vladimir
подскажите, есть какие-нибудь 100% кейсы, по окторым я смогу определить приложение запущенно на эмуляторе или реальном девайсе ?
L
Есть плагин device_info, там можно получить параметр isPhysical
Stepan
ребят, кто как здесь флаттер вообще учил/учит?
Stepan
есть ли смысл брать какой-нибудь курс на удеми или хватает бесплатных материалов?
Ivan
зависит от твоего бэкграунда
Stepan
на самом деле, основы довольно понятные
Ivan
тогда не думаю, что курсы с юдеми будут сильно полезны )
Stepan
документацию читал, тоже все понятно вроде, но ощущение, будто очень сыро все в голове
Ivan
они совсем на новичков рассчитаны, по крайней мере те что я видел
Stepan
наверное, будет лучше просто садиться и делать что-то)
Ivan
начни писать просто, будет дежавю после жавы)
Stepan
какими ресурсами пользуешься?
Andrey Novatovski
На Ютубе есть плейлист. Даже два + Metanit и + Flutter tutorial нп русском
Andrey Novatovski
Дальше берешь проект и пилишь
Andrey Novatovski
Ссылки могу потом
Stepan
хорошо, спасибо, начну
Stepan
пока немного напрягает это: }]}}])}]]})}}}]]]}}]]]}}})))]]
Stepan
сколько строк в файле вообще считаются нормой?
Ivan
)) ну выпиливай виджеты из главного и все ок будет
Andrey Novatovski
Скачай плагин color brackets
Ivan
[
{
"type": "link",
"text": "https://www.youtube.com/channel/UC2d0BYlqQCdF9lJfydl_02Q"
},
"\n",
{
"type": "link",
"text": "https://www.youtube.com/c/ResoCoder"
}
]
Maxim Gora
Можно еще разбивать хотя бы на методы
Ivan
вот хорошие каналы, правда на английском
Andrew Ka
[
{
"type": "link",
"text": "https://www.youtube.com/watch?v=TSGlxxGFuXY"
}
]
Ivan
ну он чисто про юай часть скорее всего) там есть такое да
Maxim Gora
ну и я про это)
Andrey Novatovski
А чо в флатере какие темы вообще есть основные
Andrey Novatovski
Шоб на job
Andrey Novatovski
Щас выучил BLoc
Andrey Novatovski
Что дальше можно
Maxim Gora
особо яркого примера нет, сейчас, только такое что-то
Ivan
ну я собственно про тоже))
Stepan
да ничего, индусский инглиш, такой родной=)
Ivan
нене, там норм инглиш
Stepan
а, ну наверное видео такое попалось просто
Stepan
а вот это хорошо смотрится
Ulugbek Usmanov
[
{
"type": "code",
"text": " @override\n void initState() {\n _loadAppName();\n getUserToken();\n super.initState();\n print(\"initState\");\n\n }\n\n getUserToken() async {\n prefs = await SharedPreferences.getInstance();\n\n setState(() {\n token = (prefs.getString('token'));\n username = (prefs.getString('user_name'));\n phone = (prefs.getString('user_phone'));\n });\n print(\"$phone\");\n print(username);\n getUserInfo();\n }\n\n _addUsernamePhone(String phone, String username) async {\n prefs = await SharedPreferences.getInstance();\n prefs.setString('user_phone', phone);\n prefs.setString('user_name', username);\n }\n\n getUserInfo() async {\n Map headers = {\n \"Authorization\": \"Token $token\",\n };\n var response = await http.get(Constans.get_user_info, headers: headers);\n if (response.statusCode == 200) {\n var responseJson = json.decode(response.body.toString());\n print(\"responseJson $responseJson\");\n\n _addUsernamePhone(responseJson[\"email\"], responseJson[\"username\"]);\n } else {\n print('Request failed with status: ${response.body}.');\n }\n }"
}
]
Ulugbek Usmanov
здесь username phone null приходить
Daniil S
оберни "bug" в материал
Ivan
[
{
"type": "link",
"text": "https://github.com/flutter/flutter/issues/30647"
}
]
Шахзод Джураев
О,благодарю
Шахзод Джураев
спасибо ??
Андрей Козак
кто нибудь флаттер веб раскатывал в докере? Поделитесь докер файлом, плз
Семён undefined
а зачем флаттеру докер?
Андрей Козак
чтобы руками не выкатывать на сервачок
Андрей Козак
хочу сбилдить и собрать образ с бандлом веба и с nginx
Андрей Козак
ну и выкатить
Семён undefined
ну, у меня есть yaml для github actions
Семён undefined
который заливает всё сам
Андрей Козак
скинь посмотреть плз
Андрей Козак
ты в тревисе билдуешь и сразу html льешь на гитхаб?
Семён undefined
[
{
"type": "link",
"text": "https://github.com/oneLab-Projects/experiments/blob/master/.github/workflows/main.yml"
}
]
Семён undefined
билжу на actions
Семён undefined
заливаю сразу на сервер по ssh
Андрей Козак
ну как вариант
Vladimir Avramov
[
{
"type": "pre",
"text": "FROM nginx:1.13.8-alpine\nRUN rm -rf /usr/share/nginx/html/*\nCOPY ./web /usr/share/nginx/html\nCMD [\"nginx\", \"-g\", \"daemon off;\"]",
"language": ""
}
]
Андрей Козак
с nginx траблов нет, там все как обычно с какими нить реактами
Андрей Козак
не могу готовый образ с флаттером найти
Андрей Козак
так как нужно сначала сбилдить, потом уже артефакт запихать под nginx
Vladimir Avramov
Вы многоэтапную сборку хотите сделать?
Андрей Козак
ну других вариантов не вижу, можно перед коммитом бундл собирать, а потом уже в dockerFile использовать готовый артефакт, но это как то западло
Андрей Козак
ну лан, в общих чертах понятно. Беру alphine, накатываю туда flutter выставляю ветку и билдую
Андрей Козак
прост думал делал кто уже, лень велосипедить
Vladimir Avramov
[
{
"type": "link",
"text": "https://github.com/cirruslabs/docker-images-flutter"
}
]
Vladimir Avramov
Да полно примеров. Я свой образ склепал на коленке.
Андрей Козак
лучше готовый взять)
Daniil Kolyasnikov
собрал на рабочей машине, отдал в git, на сервере выкачал. В чем проблема ?
Андрей Козак
собрал в докере, сделал образ, выкатил
Daniil Kolyasnikov
*шутка про пушку и воробьев*
Андрей Козак
в гите что-то кроме кода хранить - плохая вообще идея
Vladimir Avramov
Руками это все делаете?
Daniil Kolyasnikov
Баш скрипт лежит. Запускаешь, он билдит, пушит, заходит на серв по ssh выкачивает
Daniil Kolyasnikov
мне кажется, что на продакшн сервере не место сборке
Андрей Козак
а гит тут вообще зачем?
Daniil Kolyasnikov
по ftp заливать ?
Daniil Kolyasnikov
по ssh файлы передавать ?
Daniil Kolyasnikov
ну это stfp по сути.
Aleksandr
Привет всем, у меня тут проблема, я делаю Push named + then setState с первого экрана. И на следующих экранах у меня есть pushNamedAndRemoveUntil. Когда в результате я возвращаюсь с пятого экрана на первый экран, then уже не срабатывает, и этот экран не перерисовывается. Как мне отдетектить это возвращение на стартовом экране ?
Андрей Козак
по ssh можно из коробки файлы передавать
Андрей Козак
есть еще rsync
Daniil Kolyasnikov
так себе индейка
Андрей Козак
да стандарт для тех, кто не хочет в докер
Андрей Козак
а вот с гитом это уже странно
Андрей Козак
ну на вкус и цвет как говориться, главное чтобы работало
Daniil Kolyasnikov
это да
Vladimir Avramov
Сборке чего? В идеале на CI идет сборка. После сборки, если прошли все тесты и т.д. варится образ. Образ деплоится в ваш тестовый контур, продакшн с k8s, etc
Daniil Kolyasnikov
нет ci ??
Andrey Kapitonov
UP, никто не знает?
Vadim Lukichev
Там вроде dispose есть, или что значит "уничтожить"
Andrey Kapitonov
[
"Оказывается все просто, надеюсь там не будет утечки памяти)\n\n",
{
"type": "code",
"text": "void didUpdateWidget(Playkit oldWidget) {\n super.didUpdateWidget(oldWidget);\n\n if (widget.stream != oldWidget.stream) {\n _controller.dispose();\n\n initPlayer();\n }\n }"
},
""
]
Andrey Kapitonov
Ага, вроде оно, выше одним сообщением выложил
Andrey Kapitonov
там просто кастомная инициализация
Andrey Kapitonov
[
{
"type": "code",
"text": "_initializeVideoPlayerFuture = _controller.initialize();\n _controller.setLooping(true);\n _controller.play();"
}
]
L
У тебя один и тот же плеер играет разные видео? У меня просто список видео в pageview и на каждую страницу свой плеер
Vadim Lukichev
Да, без dispose, на android могут начаться краши после 5-10 воспроизведений, ios как ни странно норм это переваривает
Andrey Kapitonov
У меня да, есть плейлист по которым можно переключаться и проигрывать. До этого инициализация происходила "поверх" старого воспроизведение и слышно было 2-3 звука на фоне
Andrey Kapitonov
Может под капотом позаботились
Пашка
есть скрин на котором толкаю блок после с этого скрина перехожу на другой (Navigator.pushNamed()), и мне нужно воспользоваться этим блоком, но он теряет его. Как быть?
Пашка
раньше таких проблем не было, хд
L
блок провайдер можно в main.dart прописать в runApp
Пашка
ага, так и делал. но он его теряет потом
Пашка
что то не так делаю или не так понимаю
Vadim Lukichev
Возможно контекст навигатора другой? Если что можно в devtools глянуть на дерево
Пашка
в сафари не откроет?
Sergey Hottabych
Бери курс на Udemy и тщательно прорабатывай с нуля. Java тебе ну вообще никак не поможет, язык Dart похож на Джаваскрипт, а Flutter ближе к Реакту.
Andrey Kapitonov
после React, React Native - Flutter - просто боженька)
Vadim Lukichev
Ни разу не пробовал))
Азамат Шегенов
Ребята привет, подскажите
Азамат Шегенов
При запуске первого приложения
Азамат Шегенов
На смартфоне через юсб
Азамат Шегенов
Не запускается
Азамат Шегенов
Режим отладки включен, драйвер установлен, vs code смартфон видит
Dagba
в дарте тип Data представляется в List , я правилльно понял?
Dagba
Data type в котором хранятся файлы
Dagba
передается информация между сервером и клиентом
Dagba
в Swift например такой тип называется Data
Азамат Шегенов
Вы отвечаете на мою проблему с подключением или что то другое?
Sergey Hottabych
Нет такого типа
Sergey Hottabych
Инфа в json передается
Sergey Hottabych
В который ты сам записываешь все, что хочешь
Roman Vasiliev
File и массив байтов из файла это обычно совершенно разные вещи в любом языке
??[T?CH]?? ??
Киньте плиз ссылку на закреп, закрыл случайно
??[T?CH]?? ??
Там фак годный, спасибо)
Igor
[
"?",
{
"type": "text_link",
"text": "?",
"href": "https://github.com/rudart/community/blob/master/chat_rules.md"
},
{
"type": "text_link",
"text": "Правила сообщества",
"href": "https://github.com/rudart/community/blob/master/chat_rules.md"
},
"\n?",
{
"type": "text_link",
"text": "?",
"href": "https://github.com/rudart/community/blob/master/jobs.md"
},
{
"type": "text_link",
"text": "Вакансии",
"href": "https://github.com/rudart/community/blob/master/jobs.md"
},
"\n?",
{
"type": "text_link",
"text": "?",
"href": "https://github.com/rudart/community/blob/master/faq.md"
},
{
"type": "text_link",
"text": "FAQ",
"href": "https://github.com/rudart/community/blob/master/faq.md"
},
"\n??Полезные ссылки: ",
{
"type": "text_link",
"text": "русскоязычное",
"href": "https://github.com/newbalancem5/flutter_info"
},
", ",
{
"type": "text_link",
"text": "awesome-dart",
"href": "https://github.com/yissachar/awesome-dart"
},
", ",
{
"type": "text_link",
"text": "awesome-flutter",
"href": "https://github.com/Solido/awesome-flutter"
},
""
]
Zhangeldy ***
[
"почему не открывается ",
{
"type": "link",
"text": "medium.com"
},
"? кто знает ?"
]
Zhangeldy ***
или это только у меня
Andrey Novatovski
Ток у тебя
Dagba
передается она в дате когда данные сериализуются во время передачи по сети
Andrew Ka
[
{
"type": "link",
"text": "https://youtu.be/92lDfN_92To"
}
]
Олжас Сулеймен
[
"))\n",
{
"type": "pre",
"text": "import 'dart:ffi';\n\nimport 'package:ffi/ffi.dart';\n\ntypedef DartNewDouble = Pointer Function(Double);\ntypedef NewDouble = Pointer Function(double);\n\ntypedef DartDoubleValue = Pointer Function(Pointer, Pointer);\ntypedef DoubleValue = Pointer Function(Pointer, Pointer);\n\nvoid main(List arguments) {\n final proc = DynamicLibrary.process();\n final newDouble = proc.lookupFunction('Dart_NewDouble');\n final doubleValue = proc.lookupFunction('Dart_DoubleValue');\n final pDouble = allocate();\n doubleValue(newDouble(1.6), pDouble);\n print(pDouble.value);\n}",
"language": ""
}
]
Stepan
С реактом я тоже познакомился, с синтаксисом, с основными понятиями, но всё-таки он мне не зашёл из-за отсутствия типизации в джиэс, поэтому и решил флаттер попробовать
Stepan
Знаю, но все равно
Stepan
Отладки нормальной там нет, например
Stepan
Кстати, как во флаттере дела с этим обстоят?
les forest
Коллеги подскажите чем можно заменить метод pipe() из rxJs в дарте
Sergey Hottabych
Там полноценный отладчик и профвйлер
Sergey Hottabych
И тесты)
admin
[
{
"type": "link",
"text": "https://fbflipper.com"
}
]
Stepan
А, это нэйтив, я просто реакт пробовал))
admin
а вообще за реактом приходится целый зоопарк тащить, так что если хочешь почти все из коробки, юзай флаттер
neikist
Ну концептуально дарт как раз как по мне на джавасишарп похож куда больше чем на жс.
admin
а какая тебе отладка в вебе нужна? там девтулзы браузерные есть и их хватает
neikist
Наследование обычное а не прототипное, типизация строгая статическая и будет еще строже. С js разве что эвентлупом схож
Stepan
Я пишу на Java EE, там можно на любой строчке затормозить программу и посмотреть/поменять переменные, в реакте такого либо нет, либо я просто не нашел
admin
есть типо такого, ты мобешь брейк поинты ставить в девтулзах
Stepan
В дарте декларативный подход поддерживается ещё, это прям сразу в глаза бросается)
admin
а я вот наоборот с жса бегу, в котлин ??
neikist
Это во флаттере, а не дарте
Stepan
Всякие map, reduce, foreach методы тоже есть
Andrey Novatovski
Меня бесит медленный запуск во флатере
Andrey Novatovski
Как вообще работать можно
neikist
Которые есть во всех языках современных XD
neikist
Да и опять же, это не элементы синтаксиса языка
neikist
Хот релод/рестарт же
Stepan
А что именно медленно?
|