sample project

This commit is contained in:
Phuoc Nguyen
2025-11-28 15:01:51 +07:00
parent ed6cc4cebc
commit 440b474504
11 changed files with 1071 additions and 343 deletions

View File

@@ -0,0 +1,58 @@
/// Providers: Sample Project
///
/// Riverpod providers for managing sample/model house projects state.
library;
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:worker/core/network/dio_client.dart';
import 'package:worker/features/showrooms/data/datasources/sample_project_remote_datasource.dart';
import 'package:worker/features/showrooms/data/repositories/sample_project_repository_impl.dart';
import 'package:worker/features/showrooms/domain/entities/sample_project.dart';
import 'package:worker/features/showrooms/domain/repositories/sample_project_repository.dart';
part 'sample_project_provider.g.dart';
/// Sample Project Remote Data Source Provider
@riverpod
Future<SampleProjectRemoteDataSource> sampleProjectRemoteDataSource(Ref ref) async {
final dioClient = await ref.watch(dioClientProvider.future);
return SampleProjectRemoteDataSourceImpl(dioClient);
}
/// Sample Project Repository Provider
@riverpod
Future<SampleProjectRepository> sampleProjectRepository(Ref ref) async {
final remoteDataSource = await ref.watch(sampleProjectRemoteDataSourceProvider.future);
return SampleProjectRepositoryImpl(remoteDataSource);
}
/// Sample Projects List Provider
///
/// Fetches and manages sample/model house projects from API.
@riverpod
class SampleProjectsList extends _$SampleProjectsList {
@override
Future<List<SampleProject>> build() async {
final repository = await ref.watch(sampleProjectRepositoryProvider.future);
return repository.getSampleProjects();
}
/// Refresh sample projects from remote
Future<void> refresh() async {
state = const AsyncValue.loading();
state = await AsyncValue.guard(() async {
final repository = await ref.read(sampleProjectRepositoryProvider.future);
return repository.getSampleProjects();
});
}
}
/// Sample Project Detail Provider
///
/// Fetches detail of a specific sample project by name.
/// Uses family modifier to cache by project name.
@riverpod
Future<SampleProject> sampleProjectDetail(Ref ref, String name) async {
final repository = await ref.watch(sampleProjectRepositoryProvider.future);
return repository.getSampleProjectDetail(name);
}

View File

@@ -0,0 +1,266 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'sample_project_provider.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Sample Project Remote Data Source Provider
@ProviderFor(sampleProjectRemoteDataSource)
const sampleProjectRemoteDataSourceProvider =
SampleProjectRemoteDataSourceProvider._();
/// Sample Project Remote Data Source Provider
final class SampleProjectRemoteDataSourceProvider
extends
$FunctionalProvider<
AsyncValue<SampleProjectRemoteDataSource>,
SampleProjectRemoteDataSource,
FutureOr<SampleProjectRemoteDataSource>
>
with
$FutureModifier<SampleProjectRemoteDataSource>,
$FutureProvider<SampleProjectRemoteDataSource> {
/// Sample Project Remote Data Source Provider
const SampleProjectRemoteDataSourceProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'sampleProjectRemoteDataSourceProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$sampleProjectRemoteDataSourceHash();
@$internal
@override
$FutureProviderElement<SampleProjectRemoteDataSource> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SampleProjectRemoteDataSource> create(Ref ref) {
return sampleProjectRemoteDataSource(ref);
}
}
String _$sampleProjectRemoteDataSourceHash() =>
r'551677016d2d5d5185537f4871b161456370158e';
/// Sample Project Repository Provider
@ProviderFor(sampleProjectRepository)
const sampleProjectRepositoryProvider = SampleProjectRepositoryProvider._();
/// Sample Project Repository Provider
final class SampleProjectRepositoryProvider
extends
$FunctionalProvider<
AsyncValue<SampleProjectRepository>,
SampleProjectRepository,
FutureOr<SampleProjectRepository>
>
with
$FutureModifier<SampleProjectRepository>,
$FutureProvider<SampleProjectRepository> {
/// Sample Project Repository Provider
const SampleProjectRepositoryProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'sampleProjectRepositoryProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$sampleProjectRepositoryHash();
@$internal
@override
$FutureProviderElement<SampleProjectRepository> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SampleProjectRepository> create(Ref ref) {
return sampleProjectRepository(ref);
}
}
String _$sampleProjectRepositoryHash() =>
r'a675cd70c32a2d9331992a1db3d5646a38e0c953';
/// Sample Projects List Provider
///
/// Fetches and manages sample/model house projects from API.
@ProviderFor(SampleProjectsList)
const sampleProjectsListProvider = SampleProjectsListProvider._();
/// Sample Projects List Provider
///
/// Fetches and manages sample/model house projects from API.
final class SampleProjectsListProvider
extends $AsyncNotifierProvider<SampleProjectsList, List<SampleProject>> {
/// Sample Projects List Provider
///
/// Fetches and manages sample/model house projects from API.
const SampleProjectsListProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'sampleProjectsListProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$sampleProjectsListHash();
@$internal
@override
SampleProjectsList create() => SampleProjectsList();
}
String _$sampleProjectsListHash() =>
r'1255814621d429e09c8e0cdec38fbc91bacc1c77';
/// Sample Projects List Provider
///
/// Fetches and manages sample/model house projects from API.
abstract class _$SampleProjectsList
extends $AsyncNotifier<List<SampleProject>> {
FutureOr<List<SampleProject>> build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref =
this.ref as $Ref<AsyncValue<List<SampleProject>>, List<SampleProject>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<List<SampleProject>>, List<SampleProject>>,
AsyncValue<List<SampleProject>>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
/// Sample Project Detail Provider
///
/// Fetches detail of a specific sample project by name.
/// Uses family modifier to cache by project name.
@ProviderFor(sampleProjectDetail)
const sampleProjectDetailProvider = SampleProjectDetailFamily._();
/// Sample Project Detail Provider
///
/// Fetches detail of a specific sample project by name.
/// Uses family modifier to cache by project name.
final class SampleProjectDetailProvider
extends
$FunctionalProvider<
AsyncValue<SampleProject>,
SampleProject,
FutureOr<SampleProject>
>
with $FutureModifier<SampleProject>, $FutureProvider<SampleProject> {
/// Sample Project Detail Provider
///
/// Fetches detail of a specific sample project by name.
/// Uses family modifier to cache by project name.
const SampleProjectDetailProvider._({
required SampleProjectDetailFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'sampleProjectDetailProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$sampleProjectDetailHash();
@override
String toString() {
return r'sampleProjectDetailProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SampleProject> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SampleProject> create(Ref ref) {
final argument = this.argument as String;
return sampleProjectDetail(ref, argument);
}
@override
bool operator ==(Object other) {
return other is SampleProjectDetailProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$sampleProjectDetailHash() =>
r'6ea1bf329f69e0274df7f072ef1494ed04c3238d';
/// Sample Project Detail Provider
///
/// Fetches detail of a specific sample project by name.
/// Uses family modifier to cache by project name.
final class SampleProjectDetailFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SampleProject>, String> {
const SampleProjectDetailFamily._()
: super(
retry: null,
name: r'sampleProjectDetailProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// Sample Project Detail Provider
///
/// Fetches detail of a specific sample project by name.
/// Uses family modifier to cache by project name.
SampleProjectDetailProvider call(String name) =>
SampleProjectDetailProvider._(argument: name, from: this);
@override
String toString() => r'sampleProjectDetailProvider';
}