refactor(mobile): riverpod codegen + riverpod lint (#4836)

* build(mobile): add riverpod_lint

* refactor(mobile): riverpod_generator for providers

* test(mobile): fix integration test helper

* refactor: ApiService to riverpod codegen

* refactor(mobile): return curatedcontent instead of people dto

* refactor: person provider to asyncnotifier

* mobile: update service providers to use lambda

* mobile: update scaffoldbody default error icon

* remove logger mixin

---------

Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong
2023-11-19 16:04:44 +00:00
committed by GitHub
parent bfab86b70d
commit 983473261b
22 changed files with 732 additions and 175 deletions

View File

@@ -2,11 +2,13 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/extensions/asyncvalue_extensions.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
import 'package:immich_mobile/modules/search/providers/people.provider.dart';
import 'package:immich_mobile/modules/search/ui/person_name_edit_form.dart';
import 'package:immich_mobile/shared/models/store.dart' as isar_store;
import 'package:immich_mobile/shared/ui/scaffold_error_body.dart';
import 'package:immich_mobile/utils/image_url_builder.dart';
class PersonResultPage extends HookConsumerWidget {
@@ -24,12 +26,12 @@ class PersonResultPage extends HookConsumerWidget {
final name = useState(personName);
showEditNameDialog() {
showDialog<PersonNameEditFormResult>(
showDialog(
context: context,
builder: (BuildContext context) {
return PersonNameEditForm(
personId: personId,
personName: personName,
personName: name.value,
);
},
).then((result) {
@@ -66,35 +68,33 @@ class PersonResultPage extends HookConsumerWidget {
}
buildTitleBlock() {
if (name.value == "") {
return GestureDetector(
onTap: showEditNameDialog,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'search_page_person_add_name_title',
style: context.textTheme.titleSmall?.copyWith(
color: context.themeData.colorScheme.secondary,
),
).tr(),
Text(
'search_page_person_add_name_subtitle',
style: context.textTheme.labelSmall,
).tr(),
],
),
);
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
name.value,
style: context.textTheme.titleLarge,
),
],
return GestureDetector(
onTap: showEditNameDialog,
child: name.value.isEmpty
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'search_page_person_add_name_title',
style: context.textTheme.titleSmall?.copyWith(
color: context.themeData.colorScheme.secondary,
),
).tr(),
Text(
'search_page_person_add_name_subtitle',
style: context.textTheme.labelSmall,
).tr(),
],
)
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
name.value,
style: context.textTheme.titleLarge,
),
],
),
);
}
@@ -112,41 +112,32 @@ class PersonResultPage extends HookConsumerWidget {
),
],
),
body: ref.watch(personAssetsProvider(personId)).when(
loading: () => const Center(child: CircularProgressIndicator()),
error: (error, stackTrace) => Center(
child: Text(
error.toString(),
),
),
data: (data) => data.isEmpty
? const Center(
child: Text('Opps'),
)
: ImmichAssetGrid(
renderList: data,
topWidget: Padding(
padding: const EdgeInsets.only(left: 8.0, top: 24),
child: Row(
children: [
CircleAvatar(
radius: 36,
backgroundImage: NetworkImage(
getFaceThumbnailUrl(personId),
headers: {
"Authorization":
"Bearer ${isar_store.Store.get(isar_store.StoreKey.accessToken)}",
},
),
),
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: buildTitleBlock(),
),
],
body: ref.watch(personAssetsProvider(personId)).scaffoldBodyWhen(
onData: (renderList) => ImmichAssetGrid(
renderList: renderList,
topWidget: Padding(
padding: const EdgeInsets.only(left: 8.0, top: 24),
child: Row(
children: [
CircleAvatar(
radius: 36,
backgroundImage: NetworkImage(
getFaceThumbnailUrl(personId),
headers: {
"Authorization":
"Bearer ${isar_store.Store.get(isar_store.StoreKey.accessToken)}",
},
),
),
),
Padding(
padding: const EdgeInsets.only(left: 16.0),
child: buildTitleBlock(),
),
],
),
),
),
onError: const ScaffoldErrorBody(icon: Icons.person_off_outlined),
),
);
}