feat: appbar

This commit is contained in:
shenlong-tanwen
2024-10-27 23:43:58 +05:30
parent 5385d43c8c
commit 8450c8cc4f
40 changed files with 1150 additions and 211 deletions
@@ -3,17 +3,18 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_list_view/flutter_list_view.dart';
import 'package:immich_mobile/domain/models/render_list_element.model.dart';
import 'package:immich_mobile/i18n/strings.g.dart';
import 'package:immich_mobile/presentation/components/common/page_empty.widget.dart';
import 'package:immich_mobile/presentation/components/grid/asset_grid.state.dart';
import 'package:immich_mobile/presentation/components/grid/asset_render_grid.widget.dart';
import 'package:immich_mobile/presentation/components/grid/draggable_scrollbar.dart';
import 'package:immich_mobile/presentation/components/grid/immich_asset_grid.state.dart';
import 'package:immich_mobile/presentation/components/image/immich_image.widget.dart';
import 'package:immich_mobile/presentation/components/image/immich_thumbnail.widget.dart';
import 'package:immich_mobile/utils/extensions/async_snapshot.extension.dart';
import 'package:immich_mobile/utils/constants/size_constants.dart';
import 'package:immich_mobile/utils/extensions/build_context.extension.dart';
import 'package:immich_mobile/utils/extensions/color.extension.dart';
import 'package:intl/intl.dart';
import 'package:material_symbols_icons/symbols.dart';
part 'immich_asset_grid_header.widget.dart';
part 'immich_asset_render_grid.widget.dart';
part 'asset_grid_header.widget.dart';
class ImAssetGrid extends StatefulWidget {
/// The padding for the grid
@@ -66,6 +67,10 @@ class _ImAssetGridState extends State<ImAssetGrid> {
builder: (_, state) {
final elements = state.renderList.elements;
if (state.renderList.totalCount == 0) {
return const _ImGridEmpty();
}
// Append padding if required
if (widget.topPadding != null &&
elements.firstOrNull is! RenderListPaddingElement) {
@@ -94,7 +99,7 @@ class _ImAssetGridState extends State<ImAssetGrid> {
RenderListMonthHeaderElement() =>
_MonthHeader(text: section.header),
RenderListDayHeaderElement() => Text(section.header),
RenderListAssetElement() => _StaticGrid(
RenderListAssetElement() => ImStaticGrid(
section: section,
isDragging: state.isDragScrolling,
),
@@ -137,3 +142,21 @@ class _ImAssetGridState extends State<ImAssetGrid> {
.isAtSameMomentAs(current.renderList.modifiedTime),
);
}
class _ImGridEmpty extends StatelessWidget {
const _ImGridEmpty();
@override
Widget build(BuildContext context) {
return ImPageEmptyIndicator(
icon: Symbols.photo_camera_rounded,
subtitle: SizedBox(
width: context.width * RatioConstants.twoThird,
child: Text(
context.t.common.components.grid_empty_message,
textAlign: TextAlign.center,
),
),
);
}
}
@@ -1,4 +1,4 @@
part of 'immich_asset_grid.widget.dart';
part of 'asset_grid.widget.dart';
class _HeaderText extends StatelessWidget {
final String text;
@@ -22,7 +22,8 @@ class _HeaderText extends StatelessWidget {
const Spacer(),
Icon(
Symbols.check_circle_rounded,
color: context.colorScheme.onSurface,
color: context.colorScheme.onSurface
.darken(amount: RatioConstants.oneThird),
),
],
),
@@ -1,10 +1,20 @@
part of 'immich_asset_grid.widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:immich_mobile/domain/models/render_list_element.model.dart';
import 'package:immich_mobile/presentation/components/grid/asset_grid.state.dart';
import 'package:immich_mobile/presentation/components/image/immich_image.widget.dart';
import 'package:immich_mobile/presentation/components/image/immich_thumbnail.widget.dart';
import 'package:immich_mobile/utils/extensions/async_snapshot.extension.dart';
class _StaticGrid extends StatelessWidget {
class ImStaticGrid extends StatelessWidget {
final RenderListAssetElement section;
final bool isDragging;
const _StaticGrid({required this.section, required this.isDragging});
const ImStaticGrid({
super.key,
required this.section,
required this.isDragging,
});
@override
Widget build(BuildContext context) {