Ответ
До перехода на Flutter и Dart я в основном занимался нативной Android-разработкой на Kotlin и немного кросс-платформенной разработкой на React Native (JavaScript/TypeScript).
Мой опыт с Kotlin:
// Пример работы с корутинами для асинхронности в Android
class UserRepository(private val apiService: ApiService) {
suspend fun fetchUser(userId: String): Result<User> = withContext(Dispatchers.IO) {
try {
val response = apiService.getUser(userId)
Result.success(response.toDomain())
} catch (e: Exception) {
Result.failure(e)
}
}
}
Почему я выбрал Flutter/Dart:
- Единая кодовая база: После опыта с React Native я оценил более стабильную и производительную кодовую базу Flutter.
- Сходство с Kotlin: Dart, особенно с включенным null safety, показался мне очень похожим на Kotlin по выразительности и строгости типов, что упростило переход.
- UI как код: Подход Flutter, где интерфейс полностью описывается кодом (в отличие от XML-разметки в Android), дал мне больше контроля и предсказуемости в отрисовке.
- Горячая перезагрузка (Hot Reload): Скорость разработки UI в Flutter несравнимо выше, чем в нативной Android-разработке.
Ответ 18+ 🔞
Да ты посмотри, какой у нас тут профиль подъехал! Ну что ж, рассказывай, как жизнь кидала с одного фреймворка на другой.
Раньше-то я, можно сказать, в нативном болоте сидел, на Kotlin под Android ковырялся. Чистый, годный такой код, всё по-взрослому. А потом, блядь, решил глянуть, что там за трава зеленее на стороне кросс-платформы — зацепился за React Native на JavaScript/TypeScript. Ну, знаешь, как обычно: попробовал, плюнул, потому что на каждом шагу сюрпризы, как будто ходишь по охуенно тонкому льду — то треснет, то провалишься.
Вот смотри, как я раньше на Котлине асинхронность эту самую, блядь, организовывал, через корутины:
// Пример работы с корутинами для асинхронности в Android
class UserRepository(private val apiService: ApiService) {
suspend fun fetchUser(userId: String): Result<User> = withContext(Dispatchers.IO) {
try {
val response = apiService.getUser(userId)
Result.success(response.toDomain())
} catch (e: Exception) {
Result.failure(e)
}
}
}
Красота же, ёпта! Всё чётко, строго, ошибки ловятся. Но потом пришёл Flutter, и я, сука, сам от себя охуел, насколько всё заходит проще.
Ну а почему я в итоге на Flutter с Dart подсел, рассказываю:
- Одна кодовая база на всё. После этих плясок с бубном в React Native, где доверия, блядь, ноль к стабильности, Flutter показался мне тихой гаванью. Написал один раз — и оно реально работает на двух платформах, а не прикидывается.
- Дарт — это ж брат-близнец Котлина! Я, когда начал писать, волнение, блядь, почувствовал — такой родной синтаксис. Null safety включил — и вообще красота, та же строгость и выразительность. Переход был как перелезть через низкий забор, а не через стену с колючкой.
- UI как код — это пизда рулю. Ты меня пойми: после этих вечных танцев с XML-разметкой в Android, где ты в трёх файлах правки вносишь, чтобы кнопку подвинуть, подход Flutter — просто песня. Всё в одном месте, всё контролируешь, всё предсказуемо. Никаких сюрпризов.
- Горячая перезагрузка (Hot Reload). Вот это, блядь, главный кайф! В нативной разработке, чтобы поменять отступ и посмотреть, надо было ждать сборку целую вечность, терпения, блядь, ноль. А тут — хук-бабах, сохранил файл, и интерфейс обновился за секунду. Скорость прототипирования просто овердохуищная.
Короче, пересел и не жалею. Как будто с раздолбанной "девятки" пересел на новую машину — и едет лучше, и багов меньше, и кайфа больше.