Отпуск, целых две недели, без программирования.
К вечеру первого дня уже не знал чем себя занять. Работать мне запретили.. гады.
Как ещё может отдыхать программист? Делать новый 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. А тут… ну ничего.


Это всё конечно было спонтанно, но пока что интересно, посмотрим куда дальше приведёт меня отпуск, авось как говорится что и получится интересное.

Буду рад советам и напутствиям!

Комментарии (1)


  1. Tolnik
    04.12.2025 14:08

    Примерно с такой же мотивацией сделал пару APK с помощью App Inventor. Там low-code парадигма как в Scratch, т.е. программирование логики с помощью блоков. Мне понравилось.