mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
Get rid of home page state provider
This commit is contained in:
parent
a117e897ca
commit
6b84534632
12 changed files with 72 additions and 354 deletions
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -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';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue