
Отпуск, целых две недели, без программирования.
К вечеру первого дня уже не знал чем себя занять. Работать мне запретили.. гады.
Как ещё может отдыхать программист? Делать новый pet-project.
За последние пару месяцев было много языков программирования, но хотелось чего-то нового, что никогда не делал, нужно же развиваться? А почему бы не сделать мобильное приложение. Так всё и закрутилось.
Первый ресёрч — а на чём сейчас вообще пишут? Я не хотел тратить сильно много времени, чтобы делать нативные приложения, изучать Swift и Kotlin получится сильно долго. Ищем дальше, должно быть что-то универсальное? На 2025 год топ-2 это у нас React Native и Flutter. Хм…
Если подумать логически, то вроде реакт простой, там js/ts — должно быть легко. Dart пока непонятно что за зверь, но с виду тот же js. Нужно прикинуть плюсы и минусы:
Flutter
Плюсы:
Собственный движок рендеринга — идеально одинаковый UI на всех платформах
Hot Reload — мгновенный просмотр изменений
Отличная производительность (компилируется в нативный код)
Богатая библиотека виджетов из коробки
Минусы:
Нужно учить Dart (хотя он простой)
Приложения чуть тяжелее по размеру
Меньше готовых нативных библиотек
React Native
Плюсы:
JavaScript/TypeScript
Огромное комьюнити и экосистема npm
Использует нативные компоненты платформы
Легко найти разработчиков
Минусы:
JS Bridge может тормозить в тяжёлых анимациях
UI может немного отличаться на iOS/Android
Зависимость от сторонних библиотек
Почему-то мой выбор пал на реакт, показалось будет проще. Недолго думая о том какое приложение я хочу написать, ставлю нужные инструменты и понеслась. VSCode, проект на GitHub, а что дальше-то? Возвращаемся к ресёрчу.
После изучения пачки сайтов, пришло понимание что для разработки приложения на реакте нужно поставить: node, expo, в моём случае ещё Xcode, что-то ещё по мелочи. npx expo start и уже работает! Пришлось поломать голову с приложением, хотелось запускать сервер и на телефоне смотреть приложение без xcode simulator, оказалось у них всё есть — приложение Expo Go. Как ни странно, всё установилось и приложение базовое открылось на телефоне! Я был в восторге)
Потом мои поиски привели меня к Supabase, это было приятное открытие, не нужно было поднимать свой сервер, выдумывать разное, всё было уже готово и бесплатно!
У меня есть одна особенность, но многие с кем я работаю, говорят что это нифига не особенность)) Мой пунктик в том, что все приложения, библиотеки, ОС и т.д. всегда должны быть последних версий, я не могу работать пока всё не обновлю, очень часто я всё ломаю, потому что какая-нибудь библиотека выкатит старый deprecated и пиши пропало, но я привык, мне нравится исправлять потом) А у вас какие пунктики?
Вот с этого и начался первый геморрой, я напридумывал себе разных экранов, функционала, да так что мой package.json стал немаленький.
{
"dependencies": {
"@supabase/supabase-js": "^2.86.0",
"expo": "^54.0.25",
"expo-blur": "^15.0.7",
"expo-constants": "~18.0.10",
"expo-device": "^8.0.9",
"expo-haptics": "~15.0.7",
"expo-image": "~3.0.10",
"expo-image-picker": "^17.0.8",
"expo-linear-gradient": "^15.0.7",
"expo-linking": "~8.0.9",
"expo-localization": "^17.0.7",
"expo-notifications": "~0.32.13",
"expo-router": "~6.0.15",
"expo-secure-store": "~15.0.7",
"expo-sqlite": "~16.0.9",
"expo-status-bar": "~3.0.8",
"i18n-js": "^4.5.1",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-native": "^0.81.4",
"react-native-gesture-handler": "~2.29.1",
"react-native-reanimated": "~4.1.5",
"react-native-safe-area-context": "~5.6.2",
"react-native-screens": "~4.18.0",
"react-native-worklets": "~0.5.1",
"react-native-web": "~0.21.0"
},
"devDependencies": {
"@biomejs/biome": "^2.3.8",
"@types/react": "~19.2.7",
"dotenv": "^17.2.3",
"jest": "^30.2.0",
"jest-expo": "^54.0.13",
"tsx": "^4.20.6",
"typescript": "~5.9.3"
}
}
И самое весёлое оказалось в том, что нельзя просто так взять и установить последние версии всего. Например, если устанавливаешь react-native, то отваливается supabase-js или какая-то библиотека expo, потому что внутри одной или другой используются старые версии других библиотек и они конфликтуют. Не могут они блин, как я, постоянно держать все зависимости в актуальном состоянии. Я откатывал одни библиотеки, то другие — и меня это бесило). В итоге к концу следующего дня я просто удалил всё и начал с чистого листа. Да, это проблема только у меня в голове, но блин, пошёл схожу к Flutter.
Качаем Flutter SDK, ещё что-то, flutter run и тоже поднялось! Умеют же делать) Хоть и недолго я на реакте посидел, но было очень удобно тестировать приложение на своём устройстве без геморроя. Надеялся что Flutter тоже сделали что-то. Гугл сказал что без проблем в симуляторе будет открываться, если на телефоне — то через провод. Но в принципе, симулятор меня устроил, пока что.
Да, Dart это не js, пришлось тратить время на изучение, хорошо что он схож и принятие проходит быстро. Не без нюансов конечно, зато весело)
Вот например кнопка:
React Native
import { Button } from 'react-native';
export default function LikeButton() {
const handleLike = () => {
console.log('Лайк нажат!');
};
return <Button title="? Лайк" onPress={handleLike} />;
}
Flutter
import 'package:flutter/material.dart';
class LikeButton extends StatelessWidget {
void handleLike() {
print('Лайк нажат!');
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: handleLike,
child: Text('? Лайк'),
);
}
}
Разница
По сути одно и то же, просто синтаксис. React Native ближе к вебу, Flutter — к Java/Kotlin стилю.
supabase_flutter тоже есть, этому я был рад, да и в принципе все нужные библиотеки тоже были. Единственное чего прям мало — это библиотеки для линта, формата, поиска мёртвого кода и другого. В React Native легко встал Biome и Jest, идеально было.
С Flutter пришлось гуглить, для форматирования тут из коробки dart format, в качестве линтера использую flutter analyze иии всё).
Может ещё что есть, я пока не нашёл, но по ощущениям скудно. Хотелось бы чтобы инструментов было как для Python, там мой набор примерно такой: black, ruff, mypy, bandit, pylint, hypothesis. А тут… ну ничего.
Это всё конечно было спонтанно, но пока что интересно, посмотрим куда дальше приведёт меня отпуск, авось как говорится что и получится интересное.
Буду рад советам и напутствиям!
Tolnik
Примерно с такой же мотивацией сделал пару APK с помощью App Inventor. Там low-code парадигма как в Scratch, т.е. программирование логики с помощью блоков. Мне понравилось.