Hola, Amigos! Даже идеально защищенный backend не поможет, если приложение уязвимо на уровне устройства. В финальной части посмотрим на безопасность со стороны устройства и пользовательского интерфейса. 1. Запрещайте скриншоты на чувствительных экранах Некоторые чувствительные данные не должны попадать в скриншоты: @override void initState() { super.initState(); if (Platform.isAndroid) { FlutterWindowManager.addFlags( FlutterWindowManager.FLAG_SECURE, ); } } 2. Используйте биометрию Биометрия ну...
Flutter. Много
Заказать мобильную разработку: https://amiga.ru//?utm_source=tg Заказать рекламу в канале @amiga_agency_bot Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
15 из 15Hola, Amigos! Сегодня делимся простыми, но рабочими лайфхаками, которые помогут сделать ваше Flutter-приложение быстрее, легче и стабильнее. Делитесь в комментариях, пользовались чем-то?
Hola, Amigos! Продолжаем разговор о безопасности приложений на Flutter. Даже при корректной аутентификации приложение остается уязвимым, если сетевой слой и серверная валидация реализованы неправильно. В этой части поговорим о защите сетевых запросов, доверии к данным и проверке OTP. 1. SSL pinning — обязательное требование Без pinning HTTPS не спасает от атаки MITM (Man In The Middle), когда злоумышленники перехватывают трафик между приложением и сервером, а потом читают или подменяют запросы ч...
Hola, Amigos! Небольшое обновление 🙂 Мы запустили отдельный канал нашей компании. Теперь все новости агентства, анонсы мероприятий и выступлений, кейсы, а также инсайты про рынок разработки будут выходить там. Этот канал, как и раньше, остается про Flutter ❤️
Hola, amigos! Сегодня разберем подборку Flutter-инструментов, которые прокачивают взаимодействие с пользователем. 1. Dismissible позволяет легко реализовать логику swipe-to-delete. Dismissible( key: Key(item.id), background: Container(color: Colors.red), onDismissed: (direction) => deleteItem(item.id), child: ListTile( title: Text("Swipe me to delete"), ), ) 2. Tooltip показывает краткую подсказку при долгом нажатии (mobile) или наведении (web/desktop). Tooltip( message: 'Download PDF', child: I...
Hola, Amigos! Сегодня разбираем полезные и часто недооцененные виджеты во Flutter, которые реально спасают в реальных проектах 🙂 1. AbsorbPointer. Он блокирует взаимодействия (тапания, жесты) для своего потомка полностью, когда absorbing is true. Use case: запретить двойные тапы на кнопке во время состояния загрузки. AbsorbbPointer( absorbing: isLoading, child: isLoadingButton( child: ElevatedButton( onPressed: () { / submit / }, child: Text("Submit"), ), ), ) Позволяет UI оставаться видимым и ...
Hola, Amigos! Async/await и Isolate оба помогают держать UI плавным, но решают разные задачи. Сегодня обсудим, что и в каких ситуациях лучше использовать. Неправильно: async/await для CPU-тяжелой задачи Future<String> processBigData() async { final raw = await fetchHugeJson(); // ← I/O — ок final data = jsonDecode(raw); // ← блокирует UI ~1с final result = heavyMath(data); // ← ещё ~1с return result; } Правильно и просто: compute() import 'package:flutter/foundation.dart'; Future<String> process...
Hola, Amigos! Сегодня обсудим pattern matching. Он сокращает boilerplate, улучшает код и повышает безопасность работы со state. 1. Деструктуризация с помощью паттернов Пример с Records: var user = ('Naman', 29); var (name, age) = user; print(name); print(age); 2. Деструктуризация объектов Есть класс: class User { final String name; final int age; User(this.name, this.age); } Можно извлечь свойства так: var User(:name, :age) = user; Это эквивалентно: var name = user.name; var age = user.age; 3. P...
Hola, Amigos! Продолжаем разбор полезных Flutter-виджетов для адаптивной верстки. Во второй части еще несколько инструментов, которые помогут сделать UI стабильным на разных экранах. 1. FractionallySizedBox. Позволяет задать размер дочернего виджета как долю от размера родителя (по ширине и/или высоте). Use case: когда нужно, чтобы кнопка или контейнер занимали, например, 80% ширины родителя без hardcoded значений. FractionallySizedBox( widthFactor: 0.8, child: ElevatedButton( onPressed: () {}, ...
Hola, Amigos! Наш Flutter Team Lead Павел Гершевич примет участие в круглом столе на FlutterConf 🙂 Запускаешь новый проект — и снова тот же вопрос: какой state manager выбрать? Проверенный временем? Популярный в комьюнити? Или тот, который сейчас чаще всего советуют? На FlutterConf вынесли тему на открытое обсуждение с аргументами и практическим опытом. Обсудим реальные кейсы, плюсы и минусы подходов, гибкость Flutter и попробуют понять, возможен ли тот самый «золотой стандарт». В обсуждении уч...