Flutter Pulse
532 subscribers
354 photos
779 links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Простой доступ к виджету в тесте

Привет, разработчики Flutter! 👋 Сегодня мы хотим поделиться с вами полезным советом, который сделает ваши тесты более читаемыми и быстрыми в написании. 📈

Вы когда-нибудь сталкивались с ситуацией, когда вам нужно было получить доступ к конкретному виджету внутри теста? 🤔 Обычно для этого приходилось писать длинные цепочки методов, что делало код теста громоздким и трудночитаемым. 😩

Но есть решение! 💡 Вы можете создать свою собственную утилиту для прямого доступа к виджету. 📦


import 'package:flutter_test/flutter_test.dart';

// Вспомогательная функция для прямого доступа к виджету
T findWidget<T>() => find
.byType(T)
.evaluate()
.first
.widget as T;

// Вспомогательная функция для прямого доступа к N-му виджету типа T
T findNWidget<T>(int n) => find
.byType(T)
.evaluate()
.toList()
.elementAt(n)
.widget as T;


Теперь вы можете использовать эти функции, чтобы упростить свои тесты. Например, вместо того, чтобы писать:

// можно заменить это
final miniature = find.byType(VideoMiniature)
.evaluate()
.first
.widget as VideoMiniature;

// на это
final miniature = findWidget<VideoMiniature>();


Такой подход не только делает ваш код теста более читаемым, но и экономит время при написании новых тестов. ⏱️

Оцените нашу новую рубрику и оставьте свои отзывы! 🤗 Нам важно ваше мнение, чтобы мы могли делать наш контент лучше для вас.

Все подобные новости вы можете найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #FlutterTips #MobileDevelopment #Testing #CodeQuality
👍1🔥1
Документ Firebase как модель сущности

Привет, разработчики Flutter! 👋 Сегодня мы поделимся с вами полезным советом о том, как использовать документ Firebase в качестве модели сущности в вашем приложении Flutter. 📱💻

Вы когда-нибудь сталкивались с необходимостью внедрить идентификатор документа Firebase в вашу модель данных, не сохраняя его в самом документе? 🤔 Теперь это легко сделать с помощью пакета json_serializable! 🎉

Вот пример кода, который показывает, как это можно сделать:


@JsонSerializable()
class DogEntity {
// получаем id в нашу сущность
@JsонKey(toJsон: Converters.id, includeIfNull: false)
final String? id;
final String name;

// внедряем id в нашу сущность
factory DogEntity.fromJsон(String id, Map<String, dynamic> jsон) =>
_$DogEntityFromJsон(jsон..['id'] = id);

...
}

class Converters {
// предотвращаем сохранение id в документ
static String? id(String? id) => null;
}



В этом примере мы используем аннотацию @JsonKey для указания того, как должен быть сериализован идентификатор документа. Мы также используем фабричный конструктор fromJson для внедрения идентификатора документа в нашу модель данных. 📈

Оцените новую рубрику и напишите в комментариях, насколько она вам понравилась! 😊👍

Все подобные новости можно найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #Firebase #json_serializable #MobileDevelopment #FlutterTips
🔥 РАСШИРЯЕМ ВОЗМОЖНОСТИ FLUTTER С ПОМОЩЬЮ FFI! 🔥

Привет, Flutter-энтузиасты! Сегодня делимся крутым видео, которое откроет вам мир нативной интеграции в Dart. Автор подробно разбирает, как заставить Flutter общаться с кодом на C через FFI — и это только начало!

🎯 Что внутри?
👉 Автор начинает с основ: создание простой функции на C (сложение/умножение), её компиляция в динамическую библиотеку (.so) и вызов из Dart через dart:ffi. Никакой магии — только чёткие шаги!

⚙️ Главные фишки выпуска:
🔹 Зачем нужна кодогенерация ffigen и как она упрощает работу с заголовочными файлами (.h)
🔹 Как избежать ручного создания биндингов: автоматическая генерация Dart-интерфейсов для C-кода
🔹 Подробный разбор типов данных: почему int в Dart ≠ int в C и как это обойти
🔹 Рабочие примеры с репозиторием, где можно потрогать код руками

🚀 А вот что ждёт в следующих сериях:
▫️ Работа со строками — самые частые подводные камни!
▫️ Скрипты для автоматизации рутины
▫️ Вызов кода из Go, Rust, Python и C++

👉 Обязательно посмотрите, если хотите:
• Ускорить критичные операции через нативный код
• Интегрировать legacy-библиотеки в Flutter
• Понять, как устроен FFI изнутри

📹 Видео: Расширяем возможности Flutter с помощью FFI

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube #FFI #CleanCode #FlutterArchitecture
👉 Больше крутых туториалов ищите по тегу #FlutterPulseYoutube!
OverflowBar или Wrap?
В чем основные различия между этими двумя виджетами Flutter? 🤔

При создании адаптивных интерфейсов в Flutter часто возникает вопрос о том, какой виджет использовать для размещения дочерних элементов: OverflowBar или Wrap? Давайте разберемся в их основных различиях. 🔍



_buildTestA(BuildContext context) => OverflowBar(
children: [
Container(width: 300, height: 100, color: Colors.blue),
const Card(
margin: EdgeInsets.all(32),
child: Text('My Title lorem lorem lorem'),
),
Expanded(child: Container(height: 100, color: Colors.red)),
],
);

_buildTestB(BuildContext context) => Wrap(
children: [
Container(width: 300, height: 100, color: Colors.blue),
const Card(
margin: EdgeInsets.all(32),
child: Text('My Title lorem lorem lorem'),
),
Expanded(child: Container(height: 100, color: Colors.red)),
],
);



OverflowBar и Wrap имеют разные подходы к размещению дочерних элементов. OverflowBar предназначен для размещения элементов в одной строке и не переносит их на новую строку, если они не помещаются. Wrap, наоборот, переносит элементы на новую строку, если они не помещаются в доступное пространство. 🌟

Оцените новую рубрику и напишите в комментариях, насколько она вам полезна! 👍💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips. 🔍

#flutter #dart #flutterpulse #FlutterPulseTips #mobiledevelopment #appdevelopment #uiux #programmingtips
👍2🔥2
🔥 Запускаем код C, Rust или GO через FFI в Flutter! // Демо-занятие курса

Привет, Flutter-разработчики! Готовы вывести свои приложения на новый уровень производительности? 🚀 Сегодня делимся крутым видео, которое покажет, как интегрировать низкоуровневые языки в ваши проекты с помощью FFI (Foreign Function Interface).

👉 Смотреть демо-занятие от курса «Flutter Mobile Developer»

💡 Что внутри?
- Написание функций на C, Rust и GO для вызова из Dart/Flutter.
- Работа со сторонними библиотеками и FFI-плагинами.
- Компиляция кода под разные архитектуры процессоров (ARM, x86 и др.).
- Автоматизация сборки через Makefile и скрипты.
- Реальные кейсы: оптимизация обработки изображений, криптография и даже запуск Python-кода!

🎯 Результаты:
После просмотра вы научитесь:
- Компилировать C/Rust/Go под любые платформы.
- Вызывать нативный код из Flutter-приложений.
- Писать скрипты для упрощения сборки.
- Обходить подводные камни FFI.

👨‍🏫 Эксперт: Руслан Цицер — практикующий разработчик, который разжёвывает сложные темы на понятных примерах.

💬 P.S. Уже пробовали FFI? Делитесь опытом в комментариях! 👇
Если кому интересен Go могу порекомендовать курсы MadTeacher, который также является крутым flutter-разработчиком

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube
1
Как протестировать дизайн виджета?

Обеспечьте, чтобы обновления не влияли на то, как ваш виджет отображается для пользователя.

Используйте метод golden file. Это проверит, что дизайн остался таким же, как и на изображении.

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



testWidgets('Golden test', (WidgetTester tester) async {
await tester.pumpWidget(MyApp());
await expectLater(
find.byType(MyCard),
matchesGoldenFile('card.png')
);
});



Теперь запуск ваших тестов обеспечит неизменность дизайна. Например, вы создаете карту, используя некоторые аватары и другие виджеты. Если один из дочерних элементов будет изменен, ваша карта не останется прежней, и вы узнаете об этом.

Как сгенерировать Golden файлы?



flutter test --update-goldens



Это сгенерирует golden файлы для каждого вызова matchesGoldenFile в ваших тестах.

Оцените новую рубрику и напишите своё мнение! 👍💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #WidgetTesting #GoldenFiles #FlutterTips #DevelopmentTips
🚀 Flutter в автомобиле и не только: как создать приложение для бортового компьютера на Raspberry Pi!

Привет, комьюнити Flutter Pulse! 👋 Сегодня делимся крутым видео, которое перевернет ваше представление о возможностях Flutter. Речь о встраиваемых системах — от умных приборных панелей до IoT-устройств! 🔥

👉 Смотреть видео: "Flutter в Automotive & Embedded: создаём приложение для автомобиля (и не только)"

🤔 О чём это видео?
А может ли Flutter работать внутри автомобиля или, скажем, умного чайника? Спойлер: да! На открытом уроке от онлайн-курса «Flutter Mobile Developer» Дмитрий Золотов (Flutter-разработчик из Яндекса) разбирает, как выйти за рамки мобильных приложений. Вы увидите, как Flutter оживает на реальном железе! 💻🔧

🔍 Ключевые темы:
Yocto и embedded Linux — зачем нужны кастомные дистрибутивы и как собрать Flutter под ARM.
Запуск без X11/Wayland — работа с framebuffer для экономии ресурсов.
Multi-display интерфейсы — создание панелей для приборных кластеров, HUD и медиасистем.
Интеграция с CAN-шиной — как получать данные скорости, оборотов и температуры в реальном времени.
Практика — сборка Flutter-приложения для Raspberry Pi (бортовой компьютер или IoT-панель).

🎯 После вебинара вы сможете:
- Применять Flutter в automotive и embedded-проектах.
- Собирать Yocto-дистрибутивы для устройств.
- Запускать Flutter-приложения без оконных систем.
- Строить интерфейсы для нескольких экранов.
- Интегрироваться с автомобильной электроникой через CAN-шину.

👥 Кому будет полезно?
- Flutter-разработчикам, готовым к новым вызовам.
- Embedded-инженерам, ищущим современные UI-решения.
- Всем, кто мечтает создавать цифровые интерфейсы для авто и умной техники!

🔔 Подписывайтесь на Flutter Pulse, чтобы первыми получать лучшие материалы о Flutter! Исследуйте другие видео по хэштегу #FlutterPulseYoutube — у нас много эксклюзивов.

#Flutter #Dart #FlutterPulse #FlutterPulseTips #FlutterPulseYoutube
🔥21
Центрирование формы без скрытия полей при открытом клавиатуре

Привет, подписчики! 👋 Сегодня мы рассмотрим полезный совет по Flutter, который поможет вам улучшить пользовательский опыт в ваших приложениях. 📱💡

Проблема: Когда клавиатура открывается, поля формы могут быть скрыты, что затрудняет ввод данных пользователем. 😕

Решение: Использовать Scaffold с параметром resizeToAvoidBottomInset: true и обернуть форму в SingleChildScrollView. 📝



Scaffold(
resizeToAvoidBottomInset: true, // Изменяет размер при открытии клавиатуры
body: Form(
key: _formKey,
child: SingleChildScrollView( // Позволяет прокручивать содержимое
child: SizedBox(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center, // Центрирует содержимое
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Spacer(flex: 1), // Гибкое пространство сверху
TextFormField(...), // Поля формы
TextFormField(...),
const Spacer(flex: 1), // Гибкое пространство снизу
],
),
),
),
),
)



Как это работает:
- resizeToAvoidBottomInset: true заставляет Scaffold изменять размер при открытии клавиатуры. 🔄
- SingleChildScrollView позволяет прокручивать содержимое формы, если оно не помещается на экране. 🔄
- Spacer с гибким размером (flex: 1) обеспечивает равномерное распределение пространства сверху и снизу формы. ⚖️

👍 Оцените новую рубрику и напишите в комментариях, какие темы вам интересны! 💬

Все подобные новости можно найти по хэштегу #FlutterPulseTips. 🔍

#flutter #dart #flutterpulse #FlutterPulseTips #MobileDev #UIUX #AppDevelopment #CodingTips
👍41🔥1🤯1
Проверьте устаревшие зависимости
Flutter cli спешит на помощь!

Команда Flutter pub outdated



flutter pub outdated
# Показывает устаревшие пакеты.
# [*] указывает на версии, которые не являются последними доступными.

# Имя пакета Текущая Обновляемая Разрешимая Последняя
# прямые зависимости:
adaptive_dialog *1.3.0 1.4.0 1.4.0 1.4.0
cloud_firestore *3.1.6 3.1.10 3.1.10 3.1.10
cloud_functions *3.2.5 3.2.10 3.2.10 3.2.10



Совет по CI: Вы можете извлечь данные в формате json и использовать их в шаге CI. Запуск этого шага каждую неделю на вашей основной ветке (main) и уведомление по электронной почте, если доступна новая версия пакета.

Оцените новую рубрику! 👍💡
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #FlutterTips #MobileDevelopment #CI #DevTips
Круглый аватар с границей
Круглый аватар не имеет границы, но есть быстрый способ добавить её!

Если вы не хотите переписывать виджет CircleAvatar...
Просто оберните его ещё в один или используйте Container с градиентом.



CircleAvatar(
radius: radius + 2, // Увеличиваем радиус для границы
backgroundColor: borderColor, // Цвет границы
child: CircleAvatar(
radius: radius, // Радиус внутреннего аватара
backgroundImage: NetworkImage(url), // Изображение из сети
),
);



Оцените новую рубрику лайком 👍 и подпишитесь, чтобы не пропустить новые советы! 😉
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #mobiledev #appdevelopment #uiux #codingtips
👍3