initalizing the mobile apps
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import 'package:krow_data_connect/krow_data_connect.dart';
|
||||
import 'package:krow_domain/krow_domain.dart';
|
||||
import '../../domain/repositories/template_repository_interface.dart';
|
||||
|
||||
class TemplateRepositoryImpl implements TemplateRepositoryInterface {
|
||||
// In a real scenario, you might inject a specific DataSource here.
|
||||
// For now, we can use the static/singleton mocks from krow_data_connect or inject them.
|
||||
final AuthRepositoryMock _authMock;
|
||||
|
||||
TemplateRepositoryImpl({AuthRepositoryMock? authMock})
|
||||
: _authMock = authMock ?? AuthRepositoryMock();
|
||||
|
||||
@override
|
||||
Future<User?> getData() async {
|
||||
// Mapping from DataConnect models to Domain models happens here if needed.
|
||||
// For the mock stage, we just return the entity.
|
||||
final result = await _authMock.currentUser.first;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import 'package:krow_domain/krow_domain.dart';
|
||||
|
||||
/// Abstract interface for data access.
|
||||
/// Must be implemented in the Data layer.
|
||||
abstract interface class TemplateRepositoryInterface {
|
||||
Future<User?> getData();
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:krow_core/krow_core.dart'; // Assuming Result/UseCases might be here later
|
||||
import 'package:krow_domain/krow_domain.dart';
|
||||
import '../repositories/template_repository_interface.dart';
|
||||
|
||||
class GetTemplateDataUseCase {
|
||||
final TemplateRepositoryInterface _repository;
|
||||
|
||||
GetTemplateDataUseCase(this._repository);
|
||||
|
||||
Future<User?> call() async {
|
||||
return _repository.getData();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:krow_domain/krow_domain.dart';
|
||||
import '../../domain/usecases/get_template_data_usecase.dart';
|
||||
|
||||
// Events
|
||||
abstract class TemplateEvent extends Equatable {
|
||||
const TemplateEvent();
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
class TemplateStarted extends TemplateEvent {}
|
||||
|
||||
// States
|
||||
abstract class TemplateState extends Equatable {
|
||||
const TemplateState();
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class TemplateInitial extends TemplateState {}
|
||||
class TemplateLoading extends TemplateState {}
|
||||
class TemplateLoaded extends TemplateState {
|
||||
final User user;
|
||||
const TemplateLoaded(this.user);
|
||||
@override
|
||||
List<Object?> get props => [user];
|
||||
}
|
||||
class TemplateError extends TemplateState {
|
||||
final String message;
|
||||
const TemplateError(this.message);
|
||||
@override
|
||||
List<Object?> get props => [message];
|
||||
}
|
||||
|
||||
// BLoC
|
||||
class TemplateBloc extends Bloc<TemplateEvent, TemplateState> {
|
||||
final GetTemplateDataUseCase _getDataUseCase;
|
||||
|
||||
TemplateBloc({required GetTemplateDataUseCase getDataUseCase})
|
||||
: _getDataUseCase = getDataUseCase,
|
||||
super(TemplateInitial()) {
|
||||
on<TemplateStarted>(_onStarted);
|
||||
}
|
||||
|
||||
Future<void> _onStarted(TemplateStarted event, Emitter<TemplateState> emit) async {
|
||||
emit(TemplateLoading());
|
||||
try {
|
||||
final user = await _getDataUseCase();
|
||||
if (user != null) {
|
||||
emit(TemplateLoaded(user));
|
||||
} else {
|
||||
emit(const TemplateError('No data found'));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(TemplateError(e.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_modular/flutter_modular.dart';
|
||||
import 'package:design_system/design_system.dart'; // Import Design System
|
||||
import '../blocs/template_bloc.dart';
|
||||
|
||||
class TemplatePage extends StatelessWidget {
|
||||
const TemplatePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocProvider(
|
||||
create: (_) => Modular.get<TemplateBloc>()..add(TemplateStarted()),
|
||||
child: Scaffold(
|
||||
appBar: AppBar(title: const Text('Template Feature')),
|
||||
body: BlocBuilder<TemplateBloc, TemplateState>(
|
||||
builder: (context, state) {
|
||||
if (state is TemplateLoading) {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
} else if (state is TemplateLoaded) {
|
||||
return Center(child: Text('User: ${state.user.email}'));
|
||||
} else if (state is TemplateError) {
|
||||
return Center(child: Text('Error: ${state.message}'));
|
||||
}
|
||||
return const Center(child: Text('Welcome'));
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user