From 1cdf930910a2a74496cfbd153b91078d806b50f6 Mon Sep 17 00:00:00 2001 From: Vitaliy Zarubin Date: Fri, 7 Jul 2023 16:05:32 +0300 Subject: [PATCH] [packages] Add equatable --- example/lib/l10n/app_en.arb | 5 +++ example/lib/l10n/app_ru.arb | 5 +++ example/lib/packages/equatable/model.dart | 14 ++++++ example/lib/packages/equatable/page.dart | 33 ++++++++++++++ .../lib/packages/equatable/user_entity.dart | 45 +++++++++++++++++++ .../equatable/user_entity_equatable.dart | 25 +++++++++++ 6 files changed, 127 insertions(+) create mode 100644 example/lib/packages/equatable/user_entity.dart create mode 100644 example/lib/packages/equatable/user_entity_equatable.dart diff --git a/example/lib/l10n/app_en.arb b/example/lib/l10n/app_en.arb index a51d44c..07c1fd2 100644 --- a/example/lib/l10n/app_en.arb +++ b/example/lib/l10n/app_en.arb @@ -1,4 +1,9 @@ { + "@_EQUATABLE": {}, + "equatableTitleDefault": "It's default class, 46 of lines", + "equatableTitleFreezed": "It's equatable class, 26 of lines", + "equatableSubtitle": "Methods: toString, operator ==, hashCode.", + "@_FREEZED": {}, "freezedTitleDefault": "It's default class, 74 of lines", "freezedTitleFreezed": "It's freezed class, 21 of lines", diff --git a/example/lib/l10n/app_ru.arb b/example/lib/l10n/app_ru.arb index cde7dd7..7c0f59a 100644 --- a/example/lib/l10n/app_ru.arb +++ b/example/lib/l10n/app_ru.arb @@ -1,4 +1,9 @@ { + "@_EQUATABLE": {}, + "equatableTitleDefault": "Класс по умолчанию, 46 строки", + "equatableTitleFreezed": "Класс c freezed, 26 строк", + "equatableSubtitle": "Методы: toString, operator ==, hashCode.", + "@_FREEZED": {}, "freezedTitleDefault": "Класс по умолчанию, 74 строки", "freezedTitleFreezed": "Класс c freezed, 21 строка", diff --git a/example/lib/packages/equatable/model.dart b/example/lib/packages/equatable/model.dart index 1f22fb0..42d7c4b 100644 --- a/example/lib/packages/equatable/model.dart +++ b/example/lib/packages/equatable/model.dart @@ -3,6 +3,8 @@ * License: Proprietary. */ import 'package:flutter/widgets.dart'; +import 'package:flutter_example_packages/packages/equatable/user_entity.dart'; +import 'package:flutter_example_packages/packages/equatable/user_entity_equatable.dart'; import 'package:scoped_model/scoped_model.dart'; /// Model for [EquatablePage] @@ -10,4 +12,16 @@ class EquatableModel extends Model { /// Get [ScopedModel] static EquatableModel of(BuildContext context) => ScopedModel.of(context); + + UserEntity userEntity = const UserEntity( + name: 'Default', + email: 'default@yandex.ru', + age: 12, + ); + + UserEntityEquatable userEntityEquatable= const UserEntityEquatable( + name: 'Equatable', + email: 'default@yandex.ru', + age: 12, + ); } diff --git a/example/lib/packages/equatable/page.dart b/example/lib/packages/equatable/page.dart index 63c452b..1df6614 100644 --- a/example/lib/packages/equatable/page.dart +++ b/example/lib/packages/equatable/page.dart @@ -5,9 +5,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_example_packages/base/di/app_di.dart'; import 'package:flutter_example_packages/base/package/package.dart'; +import 'package:flutter_example_packages/theme/radius.dart'; import 'package:flutter_example_packages/widgets/base/export.dart'; import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; +import 'package:flutter_example_packages/widgets/texts/export.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'model.dart'; @@ -42,6 +44,37 @@ class _EquatablePageState extends AppState { crossAxisAlignment: CrossAxisAlignment.start, children: [ BlockInfoPackage(widget.package), + TextTitleLarge(l10n.equatableTitleDefault), + const SizedBox(height: 8), + TextBodyMedium(l10n.equatableSubtitle), + const SizedBox(height: 14), + Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.blue.shade50, + borderRadius: AppRadius.small, + ), + child: Padding( + padding: const EdgeInsets.all(10), + child: TextBodyMedium(model.userEntity.toString()), + ), + ), + const SizedBox(height: 20), + TextTitleLarge(l10n.equatableTitleFreezed), + const SizedBox(height: 8), + TextBodyMedium(l10n.equatableSubtitle), + const SizedBox(height: 14), + Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.blue.shade50, + borderRadius: AppRadius.small, + ), + child: Padding( + padding: const EdgeInsets.all(10), + child: TextBodyMedium(model.userEntityEquatable.toString()), + ), + ), ], ), ), diff --git a/example/lib/packages/equatable/user_entity.dart b/example/lib/packages/equatable/user_entity.dart new file mode 100644 index 0000000..28877f3 --- /dev/null +++ b/example/lib/packages/equatable/user_entity.dart @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:flutter/foundation.dart'; + +@immutable +class UserEntity { + const UserEntity({ + required this.name, + required this.email, + required this.age, + }); + + final String name; + final String email; + final int age; + + @override + String toString() { + return 'UserEntity(' + '$name,' + '$email,' + '$age' + ')'; + } + + @override + bool operator ==(dynamic other) { + return other is UserEntity && + other.name == name && + other.email == email && + other.age == age; + } + + @override + int get hashCode { + return Object.hash( + runtimeType, + name, + email, + age, + ); + } +} diff --git a/example/lib/packages/equatable/user_entity_equatable.dart b/example/lib/packages/equatable/user_entity_equatable.dart new file mode 100644 index 0000000..950203c --- /dev/null +++ b/example/lib/packages/equatable/user_entity_equatable.dart @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:equatable/equatable.dart'; +import 'package:flutter/foundation.dart'; + +@immutable +class UserEntityEquatable extends Equatable { + const UserEntityEquatable({ + required this.name, + required this.email, + required this.age, + }); + + final String name; + final String email; + final int age; + + @override + List get props => [name, email, age]; + + @override + bool get stringify => true; +}