В xml-разметке когда привязываете элемент к top и bottom других элементов, используя ConstraintLayout, по-умолчанию нужный кусок макета займет не всю область между двумя другими и нужно проставить ему height = 0dp. Частый кейс!
В Compose если поставить у этого элемента в модификаторе height = 0.dp это не сработает.
Оказывается, подобная опция есть в методе constrainAs и нужно выбрав либо ширину, либо высоту указать опцию fillToConstraints:
#Compose #ConstraintLayout
В Compose если поставить у этого элемента в модификаторе height = 0.dp это не сработает.
Оказывается, подобная опция есть в методе constrainAs и нужно выбрав либо ширину, либо высоту указать опцию fillToConstraints:
Modifier
.constrainAs(content) {
bottom.linkTo(termsAndConditions.top)
top.linkTo(topBar.bottom, margin = 32.dp)
...
height = Dimension.fillToConstraints }
Теперь элемент растянется по всей высоте.#Compose #ConstraintLayout
👍1
Любопытное, хотя уже и немного старенькое видео о том, как устроен Compose Runtime: https://www.youtube.com/watch?v=6BRlI5zfCCk
Самое интересное с 13 минуты.
Самое интересное с 13 минуты.
YouTube
KotlinConf 2019: The Compose Runtime, Demystified by Leland Richardson
Recording brought to you by American Express. https://americanexpress.io/kotlin-jobs
Jetpack Compose is an ambitious multi-team effort to reimagine Android's UI Toolkit more than 10 years after the Android Platform launched with the original UI Toolkit.
…
Jetpack Compose is an ambitious multi-team effort to reimagine Android's UI Toolkit more than 10 years after the Android Platform launched with the original UI Toolkit.
…
👍3
Кто бы мог подумать, что в 2023 я буду прикручивать к Android-приложению снова веб-сокеты? Еще когда только технология появилась все в мобильном мире считали как должное, что нужно обязательно их попробовать затянуть в проект. Потом все как хапанули с ними, особенно, в кейсах, когда нужно работать с сокетом из нескольких мест в приложении и держать коннект в фоне, который так и хотел где-то закрыться или память покушать. Видимо mobile-мир, как и человечество развивается по кругу (ну или просто архитекторы у нас вызывают вопросы?). Теперь ждем снова, когда будем хапать кое-чего на лопате.
Благо, если не нужна очень гибкая его настройка, можно воспользоваться либой, которая подключена почти в любом проекте - OkHttp:
Минус реализации в OkHttp в том, что вы не можете гибко контролировать коннект. Есть только открытие сокета, закрытие и отправка / получение сообщения. Хотя может и есть, я пока не встретил сходу, при том что в исходник тоже заглянул.
Как думаете зачем в банке могли потребоваться веб-сокеты в 2023?
Нет, не для чата 🙂
#WebSocket
Благо, если не нужна очень гибкая его настройка, можно воспользоваться либой, которая подключена почти в любом проекте - OkHttp:
webSocket = builder.newWebSocket(
Request.Builder().url(url).build(),
webSocketListener
)
и дальше работать с объектом WebSocket.Минус реализации в OkHttp в том, что вы не можете гибко контролировать коннект. Есть только открытие сокета, закрытие и отправка / получение сообщения. Хотя может и есть, я пока не встретил сходу, при том что в исходник тоже заглянул.
Как думаете зачем в банке могли потребоваться веб-сокеты в 2023?
Нет, не для чата 🙂
#WebSocket
👍4
Небольшой нюанс многомодульности в Android Studio Electric Eel
Как вы уже знаете, у нас в проекте очень много модулей (больше 100 наверное уже), поэтому иногда возникают забавные кейсы.
Вот один из них.
Суть: коллега закончил перенос конфигов в build.gradle для всех модулей на KTS и слил это в dev.
Но при мерже в ветку с новым модулем, который был только локально в этой самой ветке произошла аказия: студия САМА добавила вот такие строки в КАЖДЫЙ build.gradle:
Мораль простая: подливайте почаще изменения в свою ветку, правда, вряд ли в данном случае это бы вас сильно спасло, но по крайней мере можно заложить время на определенные правки, дабы они не были сюрпризом перед созданием PR.
#Многомодульность
Как вы уже знаете, у нас в проекте очень много модулей (больше 100 наверное уже), поэтому иногда возникают забавные кейсы.
Вот один из них.
Суть: коллега закончил перенос конфигов в build.gradle для всех модулей на KTS и слил это в dev.
Но при мерже в ветку с новым модулем, который был только локально в этой самой ветке произошла аказия: студия САМА добавила вот такие строки в КАЖДЫЙ build.gradle:
apply plugin: 'org.jetbrains.kotlin.android'
implementation("androidx.core:core-ktx:+")
implementation("androidx.core:core-ktx:+")
Неприятно.Мораль простая: подливайте почаще изменения в свою ветку, правда, вряд ли в данном случае это бы вас сильно спасло, но по крайней мере можно заложить время на определенные правки, дабы они не были сюрпризом перед созданием PR.
#Многомодульность
👍2🤔1
При переходе с MVP на MVI очень спасает мини-библиотека kotlinx.coroutines.rx2.
Проект старый, весь код работающий с API в основном возвращает Rx-сущности. А методы Middleware в котором как раз мы и дергаем этот API, возвращает flow.
Поток данных внутри flow-билдера должен быть синхронным, что как раз и позволяет сделать эта маленькая библиотечка, добавляющая метод-расширение await() к SingleSource/CompletableSource/MaybeSource и тд. Внутри расширения используется блок suspendCancellableCoroutine, который оборачивает каллбеки Rx, возвращая результат.
В итоге, код будет выглядеть примерно так:
#MVI #Coroutines #Rx
Проект старый, весь код работающий с API в основном возвращает Rx-сущности. А методы Middleware в котором как раз мы и дергаем этот API, возвращает flow.
Поток данных внутри flow-билдера должен быть синхронным, что как раз и позволяет сделать эта маленькая библиотечка, добавляющая метод-расширение await() к SingleSource/CompletableSource/MaybeSource и тд. Внутри расширения используется блок suspendCancellableCoroutine, который оборачивает каллбеки Rx, возвращая результат.
В итоге, код будет выглядеть примерно так:
val response = interactor.apiRequest().await()
Крайне рекомендую, если у вас все еще смешанное использование Coroutines/Rx. #MVI #Coroutines #Rx
👍4🤔1
В Compose 1.2.0 появились Chips.
Раньше контрол на скрине был у нас на базе RadioGroup, а теперь элементарно переехал на LazyRow + FilterChip.
Отличие FilterChip от обычного Chip в настройках цвета для выбранного/обычного состояний:
#Compose
Раньше контрол на скрине был у нас на базе RadioGroup, а теперь элементарно переехал на LazyRow + FilterChip.
Отличие FilterChip от обычного Chip в настройках цвета для выбранного/обычного состояний:
FilterChip(
modifier = Modifier,
onClick = { dayClick(index) },
content = {
...
Text(text)
},
colors = ChipDefaults.filterChipColors(
backgroundColor = .. ,
contentColor = ... ,
selectedBackgroundColor = ... ,
selectedContentColor = ...
),
selected = index == currentDay
)
Анимация нажатия тоже есть 🙂#Compose
👍3💩2🌚1
Знаете в чем основная проблема ревью пулл-реквестов?
У вас никогда не хватает времени (или желания?) скопировать себе чужую ветку из ревью, запустить и прогнать функционал 🙈
В итоге, основная проблема нового кода никак не решается. Вы просто проверяете стилистику, а не функционал.
#потрындеть
У вас никогда не хватает времени (или желания?) скопировать себе чужую ветку из ревью, запустить и прогнать функционал 🙈
В итоге, основная проблема нового кода никак не решается. Вы просто проверяете стилистику, а не функционал.
#потрындеть
🌚2
Хороший вводный доклад по KMM с примерами того, какие части архитектуры можно вынести в общий модуль и с некоторым количеством интересных вопросов в конце.
https://www.youtube.com/watch?v=3nyBxrAtF-M
#KMM
https://www.youtube.com/watch?v=3nyBxrAtF-M
#KMM
YouTube
Александр Соколинский — Почему KMM — не кроссплатформа?
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Александр уже полтора года делает приложения с использованием технологии KMM в продакшене. В докладе он рассмотрит концепцию KMM и ее принципиальные отличия от остальных кроссплатформенных решений.…
— —
Александр уже полтора года делает приложения с использованием технологии KMM в продакшене. В докладе он рассмотрит концепцию KMM и ее принципиальные отличия от остальных кроссплатформенных решений.…
🤔1
Слушайте, ну не так уж и страшно выглядит Аврора 😁
Или многие разрабы уже не учат плюсы в универе?
Понятно, что после Kotlin/Swift/Dart чуть-чуть больновато.
С другой стороны - новая ниша, новые возможности. Тут Алексей прав 👍
А доклад хороший:
https://www.youtube.com/watch?v=vPbAHQy7OBw
Или многие разрабы уже не учат плюсы в универе?
Понятно, что после Kotlin/Swift/Dart чуть-чуть больновато.
С другой стороны - новая ниша, новые возможности. Тут Алексей прав 👍
А доклад хороший:
https://www.youtube.com/watch?v=vPbAHQy7OBw
YouTube
Алексей Гладков — ОС «Аврора» глазами Android- и iOS-разработчика
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
В современном мире нельзя быть до конца уверенным, что завтра у нас будут работать Android или iOS. Поэтому спикер решил взглянуть на альтернативные мобильные ОС из России и начать с самой перспективной…
— —
В современном мире нельзя быть до конца уверенным, что завтра у нас будут работать Android или iOS. Поэтому спикер решил взглянуть на альтернативные мобильные ОС из России и начать с самой перспективной…
🆒2🤡1🤨1
Уже интереснее 👍
Работы по полноценной поддержи Flutter-разработки еще много, конечно. Особенно не хватает пока поддержки Blocs, но круто.
https://www.youtube.com/watch?v=6k3C1hjvTe4
Работы по полноценной поддержи Flutter-разработки еще много, конечно. Особенно не хватает пока поддержки Blocs, но круто.
https://www.youtube.com/watch?v=6k3C1hjvTe4
YouTube
Денис Глазков — ОС Аврора и Flutter. Статус поддержки
Ближайшая конференция: Mobius 2025 Spring, 9–10 апреля, Москва + онлайн. Подробности и билеты: https://jrg.su/ojGU3B
— Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9-10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV…
— Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9-10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV…
Forwarded from Открытая мобильная платформа
Приложения для Авроры будут публиковаться в RuStore. Скоро в мобильном приложении. https://www.omp.ru/news1/tpost/soj12068f1-natsionalnaya-mobilnaya-ekosistema-avror
www.omp.ru
Национальная мобильная экосистема Аврора планирует сделать RuStore своим основным публичным магазином приложений
Стартовала разработка RuStore для мобильной операционной системы Аврора
🤡3👍1🖕1🆒1
Как работает Android Garbage Collection под капотом - замечательная заметка из серии #MustRead 👍
https://medium.com/@banerjee.s.sayans/android-garbage-collection-in-a-nutshell-e5c8acfa1538
https://medium.com/@banerjee.s.sayans/android-garbage-collection-in-a-nutshell-e5c8acfa1538
Medium
Android Garbage Collection in a Nutshell
Have you ever wondered how Garbage Collection works under the hood in Android? 🤷♂️
Реализация паттернов проектирования на Kotlin:
https://reflectoring.io/kotlin-design-patterns/
и Java:
https://java-design-patterns.com/patterns/
Кстати, версия синглтона на базе companion object не компилится на Kotlin 1.9.24 - нужно сменить имя для getInstance. Такие дела 🫡
#DesignPatterns
https://reflectoring.io/kotlin-design-patterns/
и Java:
https://java-design-patterns.com/patterns/
Кстати, версия синглтона на базе companion object не компилится на Kotlin 1.9.24 - нужно сменить имя для getInstance. Такие дела 🫡
#DesignPatterns
reflectoring.io
Design Patterns in Kotlin
A design pattern is a general repeatable solution to a commonly occurring problem in software design. In this blog post, we will delve into various design patterns and explore how they can be effectively implemented in Kotlin.
🤔1
https://proandroiddev.com/everything-you-need-to-know-about-memory-leaks-in-android-d7a59faaf46a
Ультимативный гайд по Memory Leaks в JVM (да и не только), который хорошо сочетается с заметкой про сборку мусора
#MemoryLeaks #MustRead
Ультимативный гайд по Memory Leaks в JVM (да и не только), который хорошо сочетается с заметкой про сборку мусора
#MemoryLeaks #MustRead
Medium
Everything you need to know about Memory Leaks in android.
One of the core benefits of Java that they are garbage collected language. Essentially, we can create objects and the garbage collector…
❤1
Продолжая тему полезных статей для собесов, хочется отдельно поблагодарить автора за такую классную подборку статей по Kotlin. Здоровья тебе, мил человек!
Есть пару нюансов, но в остальном - замечательно 👍
Пол часа делов и ты снова в форме 😄
https://habr.com/ru/articles/721084/
#Kotlin
Есть пару нюансов, но в остальном - замечательно 👍
Пол часа делов и ты снова в форме 😄
https://habr.com/ru/articles/721084/
#Kotlin
Хабр
Вопросы и ответы для собеседования по Kotlin. Часть 1
Вопросы и ответы для собеседования по Kotlin. Часть 1 — вы находитесь здесь Вопросы и ответы для собеседования по Kotlin. Часть 2 Вопросы и ответы для собеседования по Kotlin. Часть 3 Вопросы и...
❤2✍1
Forwarded from Стас Ильин | Flutter
Ну как вам такие новости?
Я долго пропадал, обо всем по порядку...
Несколькими неделями ранее мне написал Станислав Чернышев, автор книги “Основы Dart”. Думаю многие из вас уже читали или, как минимум, слышали про эту книгу
Станислав предложил мне войти в авторский состав книги по Flutter, я конечно же согласился!
Это позволит нам собирать быструю обратную связь по добавленному материалу и вносить правки
Мы хотим выбрать тему сквозного проекта, на основе которого будут рассматриваться аспекты и главы книги
Предлагай тему проекта (только не todo-лист🥴) и если она понравится авторскому коллективу - мы упомянем вас в графе с благодарностями
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🌚1
Как ViewModel переживает смену конфигурации
https://proandroiddev.com/how-viewmodel-works-under-the-hood-52a4f1ff64cf
Под капотом, естественно 😄
#ViewModel #MustRead
https://proandroiddev.com/how-viewmodel-works-under-the-hood-52a4f1ff64cf
Под капотом, естественно 😄
#ViewModel #MustRead
Medium
How ViewModel works under the hood
Learn how a ViewModel survives to a configuration change
👍1🤔1
Довольно необычный (и пожалуй, самый последний) способ ускорить сборку многомодульного проекта:
https://habr.com/ru/articles/835402/
Но начинать стоит, конечно же, с gradle scan и анализа зависимостей.
#Gradle #Многомодульность
https://habr.com/ru/articles/835402/
Но начинать стоит, конечно же, с gradle scan и анализа зависимостей.
#Gradle #Многомодульность
🤔1