-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FEATURE: add news page #28
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Некорректное название файла
lib/presentation/widgets/widgets.dart
. Файл виджета должен называться так же, как и сам виджет. - Два абсолютно одинаковых виджета:
lib/presentation/widgets/loader.dart
иlib/presentation/widgets/loader.dart
- Необходимо использовать пакет Dio, а не встроенный http. Мы используем в проекте Dio.
- Необходимо реализовать интерфейс для NewsService (remote datasource).
- Необходимо реализовать кэширование новостей и тегов с помощью Local Datasource.
- Необходимо в репозитории проверять соединение с интернетом и в зависимости от этого выдавать данные из разных источников данных.
- Сущности, имеющие логику работы с данными, называются моделями и находятся в слое с данными.
- Необходимо выполнить внедрение зависимостей для bloc, usecase, repository, datasource.
- bloc должен получать доступ к возможностям репозиториев через юзкейсы.
- Все usecases должны быть унаследованы от класса UseCase.
@@ -0,0 +1,24 @@ | |||
import 'package:rtu_mirea_app/domain/entities/news.dart'; | |||
import 'package:http/http.dart' as http; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мы не используем пакет http
, а используем http-клиент Dio.
import 'package:rtu_mirea_app/domain/entities/tag.dart'; | ||
import 'dart:convert'; | ||
|
||
class NewsService { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Если NewsService используется как Remote Datasource, то ему необходим интерфейс в виде абстрактного класса, который будет описывать его поведение. Также необходимо внедрить зависимости, а то есть в данном случае http-клиент.
_MyHomeState createState() => _MyHomeState(); | ||
} | ||
|
||
class _MyHomeState extends State<NewsScreen> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Некорректное название у класса-состояния NewsScreen. Название должно быть _NewsScreenState
late ScrollController controller; | ||
late NewsDataRepository newsUsecase; | ||
late NewsBloc _news_bloc; | ||
static const int tags_in_general = 4; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Почему поля состояния публичны? Кто и зачем должен получать к ним доступ?
|
||
class _MyHomeState extends State<NewsScreen> { | ||
late ScrollController controller; | ||
late NewsDataRepository newsUsecase; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Presentation слой не имеет права обращаться к репозиториям. Для этого существуют Usecases.
} | ||
|
||
@override | ||
Future<List<Tag>> getTags() async { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Необходимо добавить проверку на соединение с интернетом, а также кэширование тегов.
lib/domain/entities/image.dart
Outdated
@@ -0,0 +1,16 @@ | |||
import 'package:equatable/equatable.dart'; | |||
|
|||
class ImageModel extends Equatable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Модели должны находиться в слое данных, а не в domain. Сущности не должны содержать бизнес-логики.
lib/domain/entities/news.dart
Outdated
import 'package:rtu_mirea_app/domain/entities/image.dart'; | ||
import 'package:rtu_mirea_app/domain/entities/tag.dart'; | ||
|
||
class NewsModel extends Equatable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Модели должны находиться в слое данных, а не в domain. Сущности не должны содержать бизнес-логики.
lib/domain/entities/tag.dart
Outdated
|
||
Tag({required this.id, required this.name}); | ||
|
||
factory Tag.from_json(Map<String, dynamic> json) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Сущности не должны содержать логики для обработки чистых данных. Для этого существуют модели в уровне с данными.
lib/service_locator.dart
Outdated
@@ -35,7 +36,7 @@ Future<void> setup() async { | |||
getIt.registerFactory(() => HomeNavigatorBloc()); | |||
getIt.registerFactory(() => OnboardingCubit()); | |||
getIt.registerFactory(() => MapCubit()); | |||
|
|||
getIt.registerFactory(() => NewsBloc()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Есть внедрение зависимостей для bloc, но нет для usecase, repository, datasource
Create news screen.