TGViewer
Channel Public Channel
Flutter. Много

Flutter. Много

@flutter_amiga

Заказать мобильную разработку: https://amiga.ru//?utm_source=tg
Заказать рекламу в канале @amiga_agency_bot

Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Subscribers
2.96K
Photos
460
Videos
24
Links
284

Showing posts older than #575 · Back to latest

Older Posts 7 shown
Post #569 1.21K
Hola, Amigos! Мы вводим еще одну новую рубрику и раз в месяц мы будем делиться с вами плагинами для Android Studio и VS Code, которыми пользуемся сами.

Сегодня посмотрим на Bloc - плагин от разработчиков одноименной библиотеки. Он позволяет:

• Создавать классы Bloc, State и Event в пару кликов с уже добавленным под ваше название шаблонным кодом. Для Android Studio также доступно создание с использованием библиотек equatable и freezed;

• Оборачивать виджеты в BlocProvider, BlocListener, BlocBuilder, BlocConsumer и BlocSelector, как мы это делаем с оборачиванием в другие виджеты через плагин Flutter;

• Добавлять шаблонный код для bloc при помощи специализированных snippets.

Делитесь в комментариях, используете ли этот плагин?

P.S. Вы сможете находить посты этой рубрики через #плагины
  • 👍 8
  • ❤ 4
  • 🔥 4
Post #568 1.21K
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня поговорим о том, как защитить свой код от любопытных глаз и сделать реверс-инжиниринг практически невозможным, используя обфускацию.

Обфускация - процесс преобразования кода, чтобы он перестал быть понятным для человека, но его работоспособность не изменилась.

Как обфусцировать сборку?

Делать это, разумеется, необходимо при сборке для публикации. Например, мы собираем Android App Bundle:


flutter build appbundle --obfuscate --split-debug-info=/symbols


Параметр obfuscate запускает саму обфускацию, а уже split-debug-info выдает специальные файлы, которые помогут расшифровать информацию. Для этого мы указываем директорию, куда их нужно сложить.

Как расшифровать Stack Trace?

Для расшифровки также существует команда, в которую нужно будет передать файл Stack Trace и файл для расшифровки.


flutter symbolize \
-i <stack-trace-file> \
-d <obfuscated-symbols-file>


Сам файл расшифровки нужен для нужной нам архитектуры. Например, для Android на arm64 нужен будет файл app.android-arm64.symbols.

Добавляем файл в Crashlytics

Если мы используем Firebase Crashlytcs или любую подобную систему, то и там мы будем видеть нерасшифрованный Stack Trace. Чтобы этого не случалось, нужно выполнить команду для загрузки символов. Для Firebase она такая:


firebase crashlytics:symbols:upload --app=<firebase-app-id> <path-to-symbols>/symbols


Учтите, что Firebase App ID должен еще и соответствовать платформе - отдельно для Android, отдельно для iOS.

Если вы уже автоматически отправляете dSYM файлы для iOS в Crashlytics, то вам ничего не нужно делать, так как символы уже будут загружены.

Делитесь в комментариях, используете ли обфускацию на проектах?
  • 👍 6
  • 🔥 2
Post #567 1.1K
Hola, Amigos! Мы постоянно стремимся уменьшить написание boilerplate кода, поэтому вводим новую рубрику - полезные extensions, где будем рассказывать о небольших кусочках кода, которые спасают нас каждый день. А начинаем мы со String.

Первое расширение позволит нам ускорить проверку на пустую строку.


extension NullableStringX on String? {
bool get isNullOrBlank => this == null || this.trim().isEmpty();
}


Пример:


final String? s = null;
s.isNullOrBlank; // true

' '.isNullOrBlank // true
'test'.isNullOrBlank // false


Второе позволяет сделать первую букву строки заглавной, а также сделать это для предложений.


extension StringX on String {
String capitalize() => this.trim().isEmpty ? this : '${this.trim()[0].toUpperCase()}${this.trim().substring(1).toLowerCase()}';

String capitalizeSentense() => this.split('.').map((e) => e.capitalize()).join('. ').trim();
}


Пример:


'мое ПрЕдЛоЖеНиЕ РАЗНОГО размера'.capitalize() // Мое предложение разного размера

'три. слова. точка.'.capitalizeSentense() // Три. Слова. Точка.


Еще одно позволяет скопировать в Clipboard для дальнейшей вставки вместо дополнительного создания объектов в коде.


extension StringX on String {
void copyToClipboard() => Clipboard.setData(ClipboardData(text: this));
}


В следующий раз мы разберемся с расширениями, которые помогут нам с валидацией данных и конвертацией.

Рассказывайте в комментариях, используете ли вы extensions на проектах?
  • 🔥 9
  • ❤ 6
  • 👍 2
Post #566 992
Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Не всё, что нам нужно, упаковано в библиотеки, поэтому иногда мы пишем решения сами. После этого возникает желание завернуть код в пакет и отправить на pub.dev, чтобы облегчить работу другим разработчикам. А может, вы сами создаете полезное SDK и внедряете поддержку Flutter.
И перед публикацией встает вопрос: какую лицензию выбрать? Давайте разбираться.

Сегодня мы рассмотрим лицензии для Open Source проектов, которые чаще всего используют библиотеки под Dart и Flutter - MIT (uuid, flutter_svg), BSD-3-Clause (библиотеки от команд Dart и Flutter) и Apache 2.0 (clock, rxdart).

Все они относятся к категории разрешительных: позволяют использовать, модифицировать и распространять код. Но отличия у них всё-таки есть. Давайте разбираться.

Лицензия MIT запрещает предъявлять иски к авторам. Для ее использования нужно оставить уведомления в коде и файл с текстом самой лицензии. Можно сказать, что она является базовой. Ее стоит выбирать для небольших проектов и примеров кода.

Лицензия BSD-3-Clause максимально похожа на MIT, но в нее добавлен пункт о запрете рекламы от имени автора. Ее можно выбрать, если вы не хотите, чтобы ваше имя использовали для рекламы чужого продукта.

Лицензия Apache 2.0 является самой защищенной, хотя у нее нет полноценного пункта о запрете рекламы от имени автора (только при согласовании), но она максимально защищает патенты. Еще одно отличие - нужно указывать изменения в коде, если мы модифицируем библиотеку. Такую лицензию выбирают, если проект серьезный и имеет патенты.

Еще одно важное отличие - совместимость с лицензиями GPLv3. MIT и BSD-3-Clause имеют совместимость только с GPLv2, поэтому их можно использовать в проектах с GPLv3, но не наоборот. А вот у Apache 2.0 есть полная совместимость.

P.S. В 2024 году мы анонсировали набор библиотек Amiga Dev Screen. Сейчас мы его активно заканчиваем, а также выбрали для него лицензию MIT.
  • 👍 9
  • 🔥 6
  • ❤ 5
Post #561 1.05K
Hola, Amigos! В прошлой части мы показали как создать свой собственный Snippet в Android Studio. Теперь пришла очередь сделать это в VS Code.

Делитесь в комментариях, какие Snippets для вас были бы самыми полезными?
  • 🔥 13
  • ❤ 4
  • 👍 3
Post #560 1.29K
3️⃣0️⃣0️⃣0️⃣ 🦋
  • 🔥 16
  • ❤ 9
  • 👍 7
Post #554 1.31K
Hola, Amigos! Мы все любим ускорять и упрощать написание шаблонного кода. Один из таких методов - Snippets.

Snippet - аббревиатура, которую IDE может преобразовать в код.

Показываем, как это сделать в Android Studio. А в следующей части расскажем про VS Code.

Рассказывайте в комментариях, используете snippets в работе?
  • ❤ 9
  • 👍 8
  • 🔥 5
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →