Получение данных с использованием http-клиента
Как получить данные с удаленного сервера, используя http-клиент 🤔
Шаг 1: Установите пакет http 📦
* Возвращение обобщенного типа T, чтобы можно было напрямую возвращать другой тип. Рекомендуется использовать пакет json_serializable для легкого парсинга объектов 📄
* Предоставление пользовательских заголовков, таких как токен API 🔒
* Улучшение: отправка пользовательских ошибок в зависимости от кода состояния ⚠️
Оцените новую рубрику и напишите свое мнение в комментариях! 💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #Coding #SoftwareDevelopment
Как получить данные с удаленного сервера, используя http-клиент 🤔
Шаг 1: Установите пакет http 📦
Future<T> request<T>({
required String endpoint,
Map<String, String>? headers,
Map<String, String>? queryParams,
}) async {
final url = Uri(
scheme: config.baseUrlScheme, // http или https
host: config.baseUrlHost, // localhost или mydomain.com
path: endpoint, // /api/articles
queryParameters: queryParams,
port: config.baseUrlPort, // порт вашего бэкенда
);
final response = await http.get(
url,
headers: {
...?headers, // Предоставление пользовательских заголовков, например, токена API
},
);
if (response.statusCode != 200) {
throw Exception('Запрос к API завершился неудачей: ${response.statusCode} ${response.reasonPhrase}');
}
return json.decode(response.body) as T; // Возвращение обобщенного типа T
}
* Возвращение обобщенного типа T, чтобы можно было напрямую возвращать другой тип. Рекомендуется использовать пакет json_serializable для легкого парсинга объектов 📄
* Предоставление пользовательских заголовков, таких как токен API 🔒
* Улучшение: отправка пользовательских ошибок в зависимости от кода состояния ⚠️
Оцените новую рубрику и напишите свое мнение в комментариях! 💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #Coding #SoftwareDevelopment
👍1👎1
Шпаргалка по форматированию цен
Вы можете легко форматировать цены, используя пакет intl. Вот наиболее распространенные методы:
Оцените нашу новую рубрику по Flutter советам! 👍 Оставьте свои комментарии и реакции, если вам понравился этот пост! 💬👍
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #Coding #FlutterTips
Вы можете легко форматировать цены, используя пакет intl. Вот наиболее распространенные методы:
import 'package:intl/intl.dart';
// Форматирование с указанием локали и символа валюты
NumberFormat.currency(locale: 'en_US', symbol: '\$').format(12.2);
// $12.2
// Форматирование валюты с использованием текущей локали устройства
NumberFormat.currency().format(12.2);
// US 12.2 или EUR 12.2 в зависимости от локали устройства
// Форматирование валюты без десятичных знаков
NumberFormat.currency(decimalDigits: 0).format(12.2);
// US 12
// Простое форматирование валюты
NumberFormat.simpleCurrency().format(12.2);
// $12.2
// Компактное форматирование больших чисел
NumberFormat.compactSimpleCurrency().format(1200000);
// $1.2M
Оцените нашу новую рубрику по Flutter советам! 👍 Оставьте свои комментарии и реакции, если вам понравился этот пост! 💬👍
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #Coding #FlutterTips
👍4
Как правильно обрабатывать результат диалога
Не пытайтесь выполнить код напрямую после закрытия диалога! 🚫💻
При работе с диалогами важно правильно обрабатывать их результат. Давайте рассмотрим два примера кода на Dart, чтобы понять, как это сделать корректно. 💡
Неправильный способ: 🚫
Правильный способ: ✅
В первом примере при нажатии на кнопки "Rate" или "Improve" диалог закрывается, но результат не возвращается. Во втором примере при нажатии на кнопки возвращается соответствующее значение из enum `RatingResult`, что позволяет корректно обработать результат.
Оцените новую рубрику и напишите в комментариях, что вы думаете о ней! 🤔💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #UIUX #SoftwareDevelopment
Не пытайтесь выполнить код напрямую после закрытия диалога! 🚫💻
При работе с диалогами важно правильно обрабатывать их результат. Давайте рассмотрим два примера кода на Dart, чтобы понять, как это сделать корректно. 💡
Неправильный способ: 🚫
Future<void> showRatingDialog(BuildContext context) {
return showDialog<RatingResult>(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
title: const Text('Rate the app'),
content: const Text('Please rate the app'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
// не пытайтесь выполнить что-либо здесь
// потому что диалог отклонен
},
child: const Text('Rate'),
),
TextButton(
onPressed: () {
Navigator.of(context).pop();
// не пытайтесь выполнить что-либо здесь
// потому что диалог отклонен
},
child: const Text('Improve'),
),
],
);
},
);
}
Правильный способ: ✅
enum RatingResult {
rate,
improve,
never,
}
Future<RatingResult?> showRatingDialog(BuildContext context) {
return showDialog<RatingResult>(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
title: const Text('Rate the app'),
content: const Text('Please rate the app'),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop(RatingResult.rate);
},
child: const Text('Rate'),
),
TextButton(
onPressed: () {
Navigator.of(context).pop(RatingResult.improve);
},
child: const Text('Improve'),
),
],
);
},
);
}
В первом примере при нажатии на кнопки "Rate" или "Improve" диалог закрывается, но результат не возвращается. Во втором примере при нажатии на кнопки возвращается соответствующее значение из enum `RatingResult`, что позволяет корректно обработать результат.
Оцените новую рубрику и напишите в комментариях, что вы думаете о ней! 🤔💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #AppDevelopment #ProgrammingTips #UIUX #SoftwareDevelopment
👍3❤1🤔1
Перегрузка операторов
Ещё один отличный способ улучшить читаемость кода 😉
Вы знаете, что в Dart можно перегружать операторы? 🤔 Это очень полезная функция, которая позволяет сделать ваш код более интуитивным и понятным.
Давайте рассмотрим пример с классом Vector. Мы хотим складывать векторы с помощью оператора +. Для этого нам нужно перегрузить этот оператор в нашем классе.
Таким образом, мы можем перегружать любые операторы, такие как -, *, / и другие, чтобы сделать наш код более удобным и читаемым. 👍
Оцените новую рубрику и напишите в комментариях, насколько она вам полезна! 😊
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #codingTips #mobileDevelopment #programmingTips
Ещё один отличный способ улучшить читаемость кода 😉
Вы знаете, что в Dart можно перегружать операторы? 🤔 Это очень полезная функция, которая позволяет сделать ваш код более интуитивным и понятным.
Давайте рассмотрим пример с классом Vector. Мы хотим складывать векторы с помощью оператора +. Для этого нам нужно перегрузить этот оператор в нашем классе.
class Vector {
final int x, y;
Vector(this.x, this.y);
// Перегружаем оператор +
Vector operator +(Vector other) => Vector(x + other.x, y + other.y);
}
void main() {
final v1 = Vector(1, 2);
final v2 = Vector(3, 4);
final result = v1 + v2; // Теперь мы можем складывать векторы с помощью оператора +
print('(${result.x}, ${result.y})'); // Вывод: (4, 6)
}
Таким образом, мы можем перегружать любые операторы, такие как -, *, / и другие, чтобы сделать наш код более удобным и читаемым. 👍
Оцените новую рубрику и напишите в комментариях, насколько она вам полезна! 😊
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #codingTips #mobileDevelopment #programmingTips
👍2
Проверка разрешений
iOS и Android требуют, чтобы вы запрашивали разрешение перед выполнением определенных действий, таких как съемка фотографии, сохранение в галерею пользователя или запись звука.
1. Установка и импорт плагина permission_handler
2. Как использовать
3. Пример использования
Создайте виджет (
Оцените новую рубрику! 👍💬 Нам важно ваше мнение! 🤔
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #AppDev #ProgrammingTips #DevTips
iOS и Android требуют, чтобы вы запрашивали разрешение перед выполнением определенных действий, таких как съемка фотографии, сохранение в галерею пользователя или запись звука.
1. Установка и импорт плагина permission_handler
import 'package:permission_handler/permission_handler.dart';
2. Как использовать
// Запрос одного разрешения
[Permission.camera].request()
// Запрос нескольких разрешений (цепочка запросов)
[Permission.camera, Permission.microphone].request()
// Просто проверка статуса разрешения
final cameraPermission = await Permission.camera.status;
final microphonePermission = await Permission.microphone.status;
3. Пример использования
@override
Widget build(BuildContext context) {
return CameraPermission(
child: CameraAwesomeBuilder.custom(
builder: (state, preview) {
...
},
),
);
}
Создайте виджет (
CameraPermission) здесь. Перед запуском камеры мы проверяем, дал ли пользователь все необходимые разрешения. В противном случае мы показываем виджет, который вежливо просит разрешить доступ + кнопку для открытия настроек.Оцените новую рубрику! 👍💬 Нам важно ваше мнение! 🤔
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #AppDev #ProgrammingTips #DevTips
👍8
1..2..3... Гонка Future
Представьте, что вы ждёте ответ от нескольких источников. Но вам нужен только один ответ. Ладно, такое случается не часто, но представьте...
Ждём только 1 ответ
Будьте осторожны, если первый запрос выдаёт ошибку до того, как придёт второй ответ... Future завершится с ошибкой. Значит, вам нужно игнорировать эту ошибку в вашем будущем запросе.
Что возвращает Future.any?
Он возвращает Future, который завершается с первым результатом. Вы можете передать несколько Future разных типов.
Оцените новую рубрику! 👍💡 Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #FutureAny #AsyncProgramming #FlutterTips #MobileDevelopment #ProgrammingTips
Представьте, что вы ждёте ответ от нескольких источников. Но вам нужен только один ответ. Ладно, такое случается не часто, но представьте...
Ждём только 1 ответ
Будьте осторожны, если первый запрос выдаёт ошибку до того, как придёт второй ответ... Future завершится с ошибкой. Значит, вам нужно игнорировать эту ошибку в вашем будущем запросе.
import 'dart:async';
import 'package:http/http.dart' as http;
void main() async {
await Future.any([
getPost(SERVER_1), // первый сервер
getPost(SERVER_2), // второй сервер
]);
}
Future<String> getPost(String url) async {
final response = await http.get(Uri.parse('....'));
if (response.statusCode == 200) {
return response.body; // возвращаем тело ответа
} else {
throw Exception('Не удалось загрузить пост'); // выбрасываем исключение
}
}
Что возвращает Future.any?
Он возвращает Future, который завершается с первым результатом. Вы можете передать несколько Future разных типов.
Оцените новую рубрику! 👍💡 Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #FutureAny #AsyncProgramming #FlutterTips #MobileDevelopment #ProgrammingTips
👍4
Отображение AlertDialog без Context в Flutter: Решение проблемы
🚨 Flutter-разработчики, сталкивались ли вы с ситуацией, когда нужно показать AlertDialog из асинхронной функции, но context недоступен? 🤔
В этой статье рассматривается распространенная проблема и предлагается элегантное решение с использованием GlobalKey<NavigatorState>. Вы узнаете, как отобразить AlertDialog без context, используя глобальный navigatorKey, и как это может упростить ваш код. 📈
Статья шаг за шагом объясняет, как определить глобальный navigatorKey, присвоить его MaterialApp, создать функцию для показа AlertDialog и вызвать ее из асинхронной функции. Вы получите полное понимание того, как работает это решение и почему оно является правильным подходом. 💡
Ссылки на статью:
🇷🇺Отображение AlertDialog без Context в Flutter
🇬🇧Showing AlertDialog Without Context in Flutter
🌐Оригинальная статья
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, понравилась ли вам новая рубрика!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programmingtips
🚨 Flutter-разработчики, сталкивались ли вы с ситуацией, когда нужно показать AlertDialog из асинхронной функции, но context недоступен? 🤔
В этой статье рассматривается распространенная проблема и предлагается элегантное решение с использованием GlobalKey<NavigatorState>. Вы узнаете, как отобразить AlertDialog без context, используя глобальный navigatorKey, и как это может упростить ваш код. 📈
Статья шаг за шагом объясняет, как определить глобальный navigatorKey, присвоить его MaterialApp, создать функцию для показа AlertDialog и вызвать ее из асинхронной функции. Вы получите полное понимание того, как работает это решение и почему оно является правильным подходом. 💡
Ссылки на статью:
🇷🇺Отображение AlertDialog без Context в Flutter
🇬🇧Showing AlertDialog Without Context in Flutter
🌐Оригинальная статья
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, понравилась ли вам новая рубрика!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programmingtips
🚫 Перестаньте использовать MediaQuery для адаптивности в Flutter
В 2025 году пора пересмотреть подход к созданию адаптивных интерфейсов во Flutter! Если вы всё ещё используете MediaQuery для responsive design, то пришло время изменить свой подход.
В статье рассматривается, почему использование MediaQuery для адаптивности является устаревшим и неэффективным подходом, особенно при разработке для различных устройств, таких как мобильные телефоны, веб, планшеты и складные устройства. Вы узнаете о новых инструментах и приёмах, которые предлагает Flutter для создания по-настоящему адаптивных интерфейсов.
В частности, в статье обсуждаются такие темы, как:
- Почему дробное масштабирование (fractional sizing) не подходит для создания адаптивных интерфейсов.
- Как использовать LayoutBuilder для создания адаптивных интерфейсов, основанных на доступном пространстве.
- Как использовать встроенные точки останова (breakpoints) во Flutter и пакеты, такие как flutter_responsive_framework.
- Как создавать адаптивные интерфейсы, которые не только масштабируются, но и меняют свою структуру в зависимости от устройства.
Читайте полную статью по ссылкам ниже:
🇷🇺Читать на русском языке
🇬🇧Читать на английском языке
🌐Оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Оцените новую рубрику!
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #responsiveDesign #adaptiveUI #mobileDevelopment #webDevelopment #FlutterDev #programmingTips
В 2025 году пора пересмотреть подход к созданию адаптивных интерфейсов во Flutter! Если вы всё ещё используете MediaQuery для responsive design, то пришло время изменить свой подход.
В статье рассматривается, почему использование MediaQuery для адаптивности является устаревшим и неэффективным подходом, особенно при разработке для различных устройств, таких как мобильные телефоны, веб, планшеты и складные устройства. Вы узнаете о новых инструментах и приёмах, которые предлагает Flutter для создания по-настоящему адаптивных интерфейсов.
В частности, в статье обсуждаются такие темы, как:
- Почему дробное масштабирование (fractional sizing) не подходит для создания адаптивных интерфейсов.
- Как использовать LayoutBuilder для создания адаптивных интерфейсов, основанных на доступном пространстве.
- Как использовать встроенные точки останова (breakpoints) во Flutter и пакеты, такие как flutter_responsive_framework.
- Как создавать адаптивные интерфейсы, которые не только масштабируются, но и меняют свою структуру в зависимости от устройства.
Читайте полную статью по ссылкам ниже:
🇷🇺Читать на русском языке
🇬🇧Читать на английском языке
🌐Оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Оцените новую рубрику!
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #responsiveDesign #adaptiveUI #mobileDevelopment #webDevelopment #FlutterDev #programmingTips
👍2💩1
7 критических ошибок в pubspec.yaml, которые ухудшают интеграцию вашего Flutter-приложения
Вы когда-нибудь сталкивались с проблемами при сборке или запуске вашего Flutter-приложения из-за неправильной конфигурации? Давайте разберемся, какие ошибки в файле pubspec.yaml могут привести к этим проблемам и как их исправить.
В этой статье рассматриваются 7 распространенных ошибок, которые допускают разработчики при настройке pubspec.yaml, и их влияние на приложение. Вы узнаете, как правильно управлять версиями зависимостей, настраивать платформо-зависимые зависимости, управлять ресурсами, конфигурировать окружение и плагины, а также оптимизировать сборку. Авторы статьи делятся реальными примерами того, как исправление этих ошибок может улучшить производительность и стабильность приложения.
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, чтобы подписчики оценили рубрику.
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programmingtips
Вы когда-нибудь сталкивались с проблемами при сборке или запуске вашего Flutter-приложения из-за неправильной конфигурации? Давайте разберемся, какие ошибки в файле pubspec.yaml могут привести к этим проблемам и как их исправить.
В этой статье рассматриваются 7 распространенных ошибок, которые допускают разработчики при настройке pubspec.yaml, и их влияние на приложение. Вы узнаете, как правильно управлять версиями зависимостей, настраивать платформо-зависимые зависимости, управлять ресурсами, конфигурировать окружение и плагины, а также оптимизировать сборку. Авторы статьи делятся реальными примерами того, как исправление этих ошибок может улучшить производительность и стабильность приложения.
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, чтобы подписчики оценили рубрику.
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programmingtips
💩2👍1
20 полезных расширений Flutter, которые сэкономят вам часы каждый день
Хотите упростить свой код и повысить производительность? Dart extensions помогут вам добавить кастомные методы к существующим классам без изменения исходного кода!
В этой статье мы рассмотрим 20 реальных примеров Flutter расширений, которые сделают ваш код чище, быстрее и более удобным. Вот некоторые из них:
✅ String — проверка на пустоту или пробелы
✅ Валидация email-адресов
✅ Безопасное преобразование String в Int
✅ Форматирование валюты и даты
✅ Добавление отступов и жестов к виджетам
✅ Расширения для работы с List, Bool, Double и Color
Эти расширения — настоящие "суперспособности" для вашего Flutter-кода. Они делают его чище, более читаемым и легче поддерживаемым. Вы можете сгруппировать их в один файл и импортировать везде, где нужно.
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, чтобы подписчики оценили рубрику.
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programmingtips
Хотите упростить свой код и повысить производительность? Dart extensions помогут вам добавить кастомные методы к существующим классам без изменения исходного кода!
В этой статье мы рассмотрим 20 реальных примеров Flutter расширений, которые сделают ваш код чище, быстрее и более удобным. Вот некоторые из них:
✅ String — проверка на пустоту или пробелы
✅ Валидация email-адресов
✅ Безопасное преобразование String в Int
✅ Форматирование валюты и даты
✅ Добавление отступов и жестов к виджетам
✅ Расширения для работы с List, Bool, Double и Color
Эти расширения — настоящие "суперспособности" для вашего Flutter-кода. Они делают его чище, более читаемым и легче поддерживаемым. Вы можете сгруппировать их в один файл и импортировать везде, где нужно.
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, чтобы подписчики оценили рубрику.
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appdevelopment #programmingtips
Почему ваше Flutter-приложение перегревает телефоны
Вы когда-нибудь задумывались, почему пользователи удаляют ваше приложение, жалуясь на перегрев телефона? Всё дело в том, как вы пишете код для своего Flutter-приложения.
В этой статье мы раскроем основные причины перегрева телефонов и дадим практические советы, как исправить эти проблемы без полного переписывания приложения. 🔥
✅ Основные причины перегрева:
👉 Чрезмерная перестройка виджетов
🔹 Использование анимаций без перерыва
⚙️ Неоптимальный сетевой слой
📌 Большие изображения и видео, перегружающие GPU
✅ Фоновые задачи, которые никогда не останавливаются
🔹 Streams и listeners, вызывающие постоянные обновления
⚙️ Тестирование приложения в режиме отладки
✅ Решения:
👉 Используйте умное управление состоянием и разбивайте UI на более мелкие виджеты
🔹 Останавливайте анимации, когда они не видны
⚙️ Оптимизируйте сетевой слой и используйте кэширование
📌 Сжимайте и изменяйте размер изображений
✅ Переносите тяжелые вычисления в изоляты и используйте debouncing
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, чтобы подписчики оценили рубрику.
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appperformance #optimization #programmingtips
Вы когда-нибудь задумывались, почему пользователи удаляют ваше приложение, жалуясь на перегрев телефона? Всё дело в том, как вы пишете код для своего Flutter-приложения.
В этой статье мы раскроем основные причины перегрева телефонов и дадим практические советы, как исправить эти проблемы без полного переписывания приложения. 🔥
✅ Основные причины перегрева:
👉 Чрезмерная перестройка виджетов
🔹 Использование анимаций без перерыва
⚙️ Неоптимальный сетевой слой
📌 Большие изображения и видео, перегружающие GPU
✅ Фоновые задачи, которые никогда не останавливаются
🔹 Streams и listeners, вызывающие постоянные обновления
⚙️ Тестирование приложения в режиме отладки
✅ Решения:
👉 Используйте умное управление состоянием и разбивайте UI на более мелкие виджеты
🔹 Останавливайте анимации, когда они не видны
⚙️ Оптимизируйте сетевой слой и используйте кэширование
📌 Сжимайте и изменяйте размер изображений
✅ Переносите тяжелые вычисления в изоляты и используйте debouncing
🇷🇺 Читать статью на русском
🇬🇧 Read the article in English
🌐 Читать оригинал
Все подобные новости ищите по хэштегу #FlutterPulseMedium ✨ Напишите, чтобы подписчики оценили рубрику.
FlutterPulse — канал о мире Flutter!
#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appperformance #optimization #programmingtips
👍1