Get rid of home page state provider

This commit is contained in:
Matthias Rupp 2022-10-06 22:41:56 +02:00
parent a117e897ca
commit 6b84534632
12 changed files with 72 additions and 354 deletions

View file

@ -1,8 +1,6 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/modules/home/providers/home_page_state.provider.dart';
import 'package:openapi/api.dart';
class DailyTitleText extends ConsumerWidget {
const DailyTitleText({

View file

@ -14,12 +14,13 @@ import 'daily_title_text.dart';
import 'disable_multi_select_button.dart';
import 'draggable_scrollbar_custom.dart';
typedef ImmichAssetGridSelectionListener = void Function(bool);
typedef ImmichAssetGridSelectionListener = void Function(
bool, Set<AssetResponseDto>);
class ImmichAssetGridState extends State<ImmichAssetGrid> {
final ItemScrollController _itemScrollController = ItemScrollController();
final ItemPositionsListener _itemPositionsListener =
ItemPositionsListener.create();
ItemPositionsListener.create();
bool _scrolling = false;
bool _multiselect = false;
@ -37,18 +38,26 @@ class ImmichAssetGridState extends State<ImmichAssetGrid> {
.flattened
.toList();
}
Set<AssetResponseDto> _getSelectedAssets() {
return _selectedAssets
.map((e) => _assets.firstWhereOrNull((a) => a.id == e))
.whereNotNull()
.toSet();
}
void _callSelectionListener() {
widget.listener?.call(_multiselect, _getSelectedAssets());
}
void _selectAssets(List<AssetResponseDto> assets) {
setState(() {
if (!_multiselect) {
_multiselect = true;
widget.listener?.call(true);
}
for (var e in assets) {
_selectedAssets.add(e.id);
}
_multiselect = true;
_callSelectionListener();
});
}
@ -60,8 +69,9 @@ class ImmichAssetGridState extends State<ImmichAssetGrid> {
if (_selectedAssets.isEmpty) {
_multiselect = false;
widget.listener?.call(false);
}
_callSelectionListener();
});
}
@ -70,11 +80,13 @@ class ImmichAssetGridState extends State<ImmichAssetGrid> {
_multiselect = false;
_selectedAssets.clear();
});
widget.listener?.call(false);
_callSelectionListener();
}
bool _allAssetsSelected(List<AssetResponseDto> assets) {
return _multiselect && assets.firstWhereOrNull((e) => !_selectedAssets.contains(e.id)) == null;
return _multiselect &&
assets.firstWhereOrNull((e) => !_selectedAssets.contains(e.id)) == null;
}
double _getItemSize(BuildContext context) {
@ -113,7 +125,8 @@ class ImmichAssetGridState extends State<ImmichAssetGrid> {
key: Key("asset-${asset.id}"),
width: size,
height: size,
margin: EdgeInsets.only(top: widget.margin, right: last ? 0.0 : widget.margin),
margin: EdgeInsets.only(
top: widget.margin, right: last ? 0.0 : widget.margin),
child: _buildThumbnailOrPlaceholder(asset, scrolling),
);
}).toList(),
@ -165,7 +178,8 @@ class ImmichAssetGridState extends State<ImmichAssetGrid> {
Text _labelBuilder(int pos) {
final date = widget.renderList[pos].date;
return Text(DateFormat.yMMMd().format(date),
return Text(
DateFormat.yMMMd().format(date),
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
@ -231,7 +245,6 @@ class ImmichAssetGrid extends StatefulWidget {
final bool showStorageIndicator;
final ImmichAssetGridSelectionListener? listener;
ImmichAssetGrid({
super.key,
required this.renderList,
@ -245,4 +258,4 @@ class ImmichAssetGrid extends StatefulWidget {
State<StatefulWidget> createState() {
return ImmichAssetGridState();
}
}
}

View file

@ -0,0 +1,31 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
class MonthlyTitleText extends StatelessWidget {
const MonthlyTitleText({
Key? key,
required this.isoDate,
}) : super(key: key);
final String isoDate;
@override
Widget build(BuildContext context) {
var monthTitleText = DateFormat("monthly_title_text_date_format".tr())
.format(DateTime.parse(isoDate).toLocal());
return SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.only(left: 12.0, top: 32),
child: Text(
monthTitleText,
style: TextStyle(
fontSize: 26,
fontWeight: FontWeight.bold,
color: Theme.of(context).textTheme.headline1?.color,
),
),
),
);
}
}

View file

@ -1,12 +1,10 @@
import 'package:auto_route/auto_route.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/constants/hive_box.dart';
import 'package:immich_mobile/modules/home/providers/home_page_state.provider.dart';
import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/utils/image_url_builder.dart';