63 lines
1.7 KiB
Dart
63 lines
1.7 KiB
Dart
import 'package:bloc/bloc.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
import 'package:remever/components/notifiers/home_screen_data.dart';
|
|
import 'package:remever/database/database.dart';
|
|
import 'package:remever/inject.dart';
|
|
|
|
part 'collection_state.dart';
|
|
part 'collection_cubit.freezed.dart';
|
|
|
|
class CollectionCubit extends Cubit<CollectionState> {
|
|
CollectionCubit() : super(CollectionState.data());
|
|
|
|
/// Нотифаер домашнего экрана
|
|
CollectionData get _cd => getIt<CollectionData>();
|
|
|
|
/// Контроллер скролла для коллекции
|
|
final ScrollController collectionController = ScrollController();
|
|
|
|
/// Позиция скролле
|
|
double _previousScrollOffset = 0.0;
|
|
|
|
/// Индекс выбранной фильтрации коллекции
|
|
int collectionFiltersIndex = 0;
|
|
|
|
void initScrollListener() {
|
|
collectionController.addListener(() {
|
|
final double currentScrollOffset = collectionController.offset;
|
|
final bool isScrollingDown = currentScrollOffset > _previousScrollOffset;
|
|
|
|
if (isScrollingDown) {
|
|
_cd.showFab(false);
|
|
} else {
|
|
_cd.showFab(true);
|
|
}
|
|
|
|
_previousScrollOffset = currentScrollOffset;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Future<void> close() {
|
|
collectionController.dispose();
|
|
return super.close();
|
|
}
|
|
|
|
Future<void> toLoadingState() async {
|
|
emit(CollectionState.loading());
|
|
}
|
|
|
|
Future<void> toDataState() async {
|
|
emit(CollectionState.data());
|
|
}
|
|
|
|
Future<void> toEmptyState() async {
|
|
emit(CollectionState.empty());
|
|
}
|
|
|
|
Future<void> toErrorState() async {
|
|
emit(CollectionState.error());
|
|
}
|
|
}
|