Flutter Pulse
1.01K subscribers
580 photos
1 file
1.58K links
На канале будут новости про flutter с сайтов, информация об обновлении пакетов, а также авторский контент.
Download Telegram
Имитация вызовов REST API
Привет, разработчики Flutter! 👋 Сегодня мы рассмотрим важный аспект тестирования приложений — имитацию вызовов REST API. 📱💻

Имитация вызовов API позволяет тестировать ваше приложение без фактического обращения к серверу, что делает процесс тестирования более быстрым и надежным. ⚡️

Как это работает?
1. Импортируйте пакет mocktail:
import 'package:mocktail/mocktail.dart';


2. Создайте класс HttpClientMock, который имитирует поведение HttpClient:
class HttpClientMock extends Mock implements HttpClient {}
final httpClientMock = HttpClientMock();


3. Используйте when для определения поведения имитированного клиента:
when(() => httpClientMock
.get(Uri.parse('myapi/...')))
.thenAnswer((_) async => Response('''
{"id":"testId","route":"myPage"}
''', 200));


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

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

Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileAppDevelopment #AppTesting #MockingAPI #FlutterTips
👍5
Базовый Dart (Часть №1) 🚀💻
Привет, программисты! 👋 Сегодня мы поговорим о базовом Dart и о том, что нужно знать до перехода к объектно-ориентированному программированию 🤔.
Узнаем, что такое runtime и compile-time, и как они отличаются 🕒. Также разберемся с типами данных и их важностью в программировании 📊.
Учимся работать с переменными: присваивание, арифметические операции, конкатенация и логические операции 📝. А также изучаем условные операторы if, else if и else, чтобы принимать решения в программах 🤖.
Узнайте о условных операторах, циклах и функциях в программировании 🔄. Эти инструменты помогут вам создавать гибкие и эффективные программы 🚀.
Функции в программировании - это блоки кода, которые выполняют определенные задачи и могут быть вызваны несколько раз 📈. Они помогают повторно использовать код, организовывать программы и облегчают отладку 🐜.
И, конечно, не забудем про Null Safety - мощный инструмент для безопасного кода 🛡. Узнайте, как избегать ошибок и писать более надежный код с помощью Null Safety 📚.
Читайте статью и начинайте свое путешествие в мир программирования 🌟!
#flutter #dart #flutterpulse #programmirovanie #nullsafety #basics #programming #development #coders #learndart #dartlang #flutterdev #mobileappdevelopment 🚀💻
Тестирование с навигацией GoRouter
Как запускать тесты с навигацией GoRouter

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

Пример теста:



testWidgets('условие защиты возвращает false => переход на ошибочный url',
(WidgetTester tester) async {
final app = MaterialApp.router(
routerConfig: GoRouter(
initialLocation: '/page1',
routes: [
GoRoute(
path: '/page1',
builder: (context, state) => Guard(
canActivate: future.value(false),
fallbackRoute: '/page2',
),
child: const FakePage(msg: 'page1'),
),
GoRoute(
path: '/page2',
builder: (context, state) => const FakePage(msg: 'page2'),
),
],
),
);

await tester.pumpWidget(app);
await tester.pumpAndSettle(const Duration(milliseconds: 100));

expect(find.text('page2'), findsOneWidget);
});



Дополнительный совет:
Вы можете использовать ваш app router, чтобы получить точно такое же поведение маршрутизации, как и в вашем приложении.
Таким образом, вы действительно можете проверить, работает ли навигация корректно.
Встройте создание GoRouter в функцию с параметром initialLocation, чтобы ваш тест мог начинаться прямо с того места, которое вам нужно.



GoRouter createRouter(final String initialLocation) {
return GoRouter(
initialLocation: initialLocation,
routes: [
GoRoute(
path: '/page1',
builder: (context, state) => const FakePage(msg: 'page1'),
),
GoRoute(
path: '/page2',
builder: (context, state) => const FakePage(msg: 'page2'),
),
],
);
}



Оцените новую рубрику по тестированию Flutter-приложений! 👍
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileAppDevelopment #FlutterTips #Testing #GoRouter
2👍2
Создание последовательных анимаций
Создайте пользовательскую цепочку эффектов, чтобы повторно использовать ее во всем приложении с помощью flutter_animate.

Создайте виджет с Animate и списком эффектов


import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';

class MoveFadeAnim extends StatelessWidget {
final int? delayInMs;
final Widget child;

const MoveFadeAnim({
super.key,
required this.child,
this.delayInMs,
});

@override
Widget build(BuildContext context) {
return Animate(
effects: [
// Эффект затухания с задержкой и продолжительностью 700 мс
FadeEffect(
delay: Duration(milliseconds: delayInMs ?? 0), // Задержка перед началом анимации
duration: const Duration(milliseconds: 700), // Продолжительность анимации
curve: Curves.easeIn, // Кривая анимации для эффекта затухания
),
// Эффект перемещения с задержкой и продолжительностью 450 мс
MoveEffect(
delay: Duration(milliseconds: delayInMs ?? 0), // Задержка перед началом анимации
duration: const Duration(milliseconds: 450), // Продолжительность анимации
curve: Curves.easeOut, // Кривая анимации для эффекта перемещения
begin: const Offset(0, 50), // Начальное смещение
end: Offset.zero, // Конечное смещение (нет смещения)
),
],
child: child, // Дочерний виджет, к которому применяются эффекты
);
}
}


Повторно используйте свою анимацию везде в приложении для последовательного поведения анимации


return MoveFadeAnim(
delayInMs: index * 150 + 50, // Вычисление задержки на основе индекса элемента
child: MenuCard(
height: 130, // Высота карточки меню
),
);


Оцените новую рубрику! 👍💡
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileAppDevelopment #Animation #UIUX #FlutterTips
👍2
A/B тестирование иконок приложения в Apple Store

Иконка приложения действительно важна. Хорошая иконка может удвоить количество загрузок. И лучший способ это выяснить? Протестировать иконку и увидеть результаты.

Шаги для A/B тестирования иконок приложения:

1 - Откройте Xcode и создайте несколько иконок.
2 - Выберите этот пункт, обратите внимание, что имя иконки по умолчанию - это имя, которое мы предоставляем в активах.
3 - Отправьте новую сборку и дождитесь ее валидации.
4 - Создайте новую "оптимизацию страницы продукта".


# Пример кода для создания альтернативных иконок
// Создание альтернативных иконок в Xcode
// Шаг 1: Откройте Xcode и перейдите в раздел Assets
// Шаг 2: Создайте новые наборы иконок
// Шаг 3: Настройте Info.plist для использования альтернативных иконок
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>MyAlternateIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>alternate-icon</string>
</array>
</dict>
</dict>
</dict>


Теперь вам нужно отправить этот тест на валидацию (снова).

Советы:
- Предпочитайте делать только одно изменение за тест.
- Не меняйте скриншоты при смене иконки. Так вы будете знать, что отвечает за новые данные.

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

Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileAppDevelopment #AppStoreOptimization #ABTesting #UIUX #AppDesign #FlutterTips
Реализация доступности клавиатуры в Flutter
🚀 Хотите сделать свое приложение более доступным и удобным для пользователей? 🤔 Тогда вам обязательно нужно узнать о реализации доступности клавиатуры в Flutter!

В этой статье вы найдете подробное руководство о том, как сделать свое приложение доступным для пользователей, которые полагаются на клавиатуру. Вы узнаете о Flutter-классах и виджетах, которые помогут вам добиться этого, а также о том, на что следует обратить внимание. 📚

В статье рассматриваются такие темы, как управление фокусом и навигацией, порядок навигации, управление прокручиваемым контентом и создание пользовательских клавиатурных сокращений. Вы узнаете, как использовать виджеты Focus, FocusTraversalGroup, Shortcuts и Actions, чтобы создать бесшовный и доступный опыт навигации с помощью клавиатуры. 💻

🇷🇺 Читать статью на русском
🇬🇧 Читать статью на английском
🌐 Оригинальная статья

Все подобные новости ищите по хэштегу #FlutterPulseMedium Оцените новую рубрику! 👍
#flutter #dart #flutterpulse #FlutterPulseMedium #accessibility #keyboardnavigation #mobileappdevelopment
👍1🔥1
Автоматизируйте свои сборки Flutter: CI/CD Pipeline для Dev/Staging/Prod за 30 минут (GitHub Actions + Fastlane)
Настройте автоматизированные CI/CD-пайплайны для вашего Flutter-приложения с несколькими средами и развертывайте в TestFlight и Play Store одним коммитом!
В этой статье вы узнаете, как настроить полный CI/CD-пайплайн, который будет автоматически собирать и тестировать ваше приложение при пуше кода, разворачивать dev-сборки для внутренних тестировщиков, отправлять staging-сборки бета-тестерам и выкладывать production-сборки в app store с одобрения.

Основные возможности, которые вы получите:
🔹 Автоматическая сборка приложения при пуше кода
🔹 Запуск тестов перед сборкой
🔹 Развертывание dev-сборок для внутренних тестировщиков
🔹 Отправка staging-сборок бета-тестерам
🔹 Выкладка production-сборок в app store с одобрения

Вы научитесь настраивать GitHub Actions, Fastlane и другие инструменты для автоматизации процесса разработки и развертывания Flutter-приложений.

🇷🇺 Читать статью на русском:
Часть 1
Часть 2

🇬🇧 Read the article in English:
Part 1 → https://telegra.ph/Automate-Your-Flutter-Builds-CICD-Pipeline-for-DevStagingProd-in-30-Minutes-GitHub-Actions--Part-1-01-21
Part 2 → https://telegra.ph/Automate-Your-Flutter-Builds-CICD-Pipeline-for-DevStagingProd-in-30-Minutes-GitHub-Actions--Part-2-01-21

🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам эта рубрика?

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #CICD #GitHubActions #Fastlane #DevOps #FlutterDevelopment #MobileDevOps #TestFlight #PlayStore #AndroidDevelopment #iOSDevelopment #Automation #FlutterDeployment #ContinuousIntegration #ContinuousDeployment #MobileAppDevelopment #FlutterTips #AppDeployment
💩1
Flutter Apple Sign-In: Кроссплатформенный секрет, который увеличил загрузки приложения на 340%

Представьте, что всего за 30 дней количество загрузок вашего Flutter-приложения выросло с 2 000 до 8 800, а процент завершения регистрации увеличился с 31% до 84%! 🔥 Всё это стало возможным благодаря правильной реализации Apple Sign-In для iOS и Android в Flutter.

В этой статье вы узнаете, как реализовать кроссплатформенную аутентификацию Apple Sign-In в вашем Flutter-приложении, используя URL-схемы. Вы получите подробное руководство по настройке Apple Developer Portal, созданию бэкэнд-сервера и реализации аутентификации в Flutter. 🔹 Вы узнаете, как использовать пакет sign_in_with_apple для iOS, Android и веб-платформ. 🔹 Поймёте, как настроить бэкэнд-сервер для обработки аутентификации Apple. 🔹 Научитесь реализовывать кроссплатформенную аутентификацию в Flutter.

🇷🇺 Читать статью на русском:
Часть 1 Часть 2

🇬🇧 Read the article in English:
Part 1 → https://telegra.ph/Flutter-Apple-Sign-In-The-Cross-Platform-Secret-That-Increased-My-App-Downloads-by-340-Part-1-02-19
Part 2 → https://telegra.ph/Flutter-Apple-Sign-In-The-Cross-Platform-Secret-That-Increased-My-App-Downloads-by-340-Part-2-02-19

🌐 Читать оригинал

Все подобные новости ищите по хэштегу #FlutterPulseMedium Напишите, понравилась ли вам эта рубрика?

FlutterPulse — канал о мире Flutter!

#flutter #dart #flutterpulse #FlutterPulseMedium #mobiledevelopment #appauth #oauth2 #signinwithapple #crossplatform #iosdevelopment #androiddevelopment #flutterapp #mobileappdevelopment #dartprogramming #flutterui #appauthentication #flutertutorial
👍2