Flutter Pulse
523 subscribers
338 photos
742 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
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
Как протестировать дизайн виджета?

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

Используйте метод 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