すべてが正常に機能しています。ユーザーは作成されていますが、状態は変化していません。
registerlazysingleton (get_it) を使用しています。
状態変化で問題に直面しています。考えられる理由は何ですか。その理由は、キュービットを初期化した方法でしょうか?
create.user.dart
Widget _addUserStateManagement() {
return BlocProvider<AddUserCubit>(
create: (context) => featureServiceLocator<AddUserCubit>()..call(),
child: BlocBuilder<AddUserCubit, AddUserState>(
builder: (context, state) {
/// [AddUserOnProgressState]: User adding on progress
if (state is AddUserOnProgressState) {
return _cardBuilder(enableButton: false, roles: _roles!);
} else if (state is AddUserInitial) {
return _cardBuilder(enableButton: false, roles: _roles!);
} else if (state is AddUserNetworkFailureState) {
return _cardBuilder(enableButton: true, roles: _roles!);
} else if (state is AddUserValidationState) {
return _cardBuilder(
enableButton: state.enableButton, roles: state.updatedRoles);
}
return _cardBuilder(enableButton: false, roles: _roles!);
},
),
);
}
Feature.service.locator.dart
// [Add new user page Cubit]
featureServiceLocator.registerLazySingleton<AddUserCubit>(
() => AddUserCubit(userManagementUseCase: featureServiceLocator()));
add.user.cubit.dart
import 'package:bloc/bloc.dart';
import 'package:dartz/dartz.dart';
import 'package:equatable/equatable.dart';
import 'package:flutter/cupertino.dart';
import '../../../../../core/error/failures.dart';
import '../../../../../injection.containers/features.injector.dart';
import '../../../domain/user.mgmt.usecase.dart';
import '../user.management/user.management.cubit.dart';
part 'add.user.state.dart';
class AddUserCubit extends Cubit<AddUserState> {
// usermanagement usecase interface
final UserManagementUseCase userManagementUseCase;
AddUserCubit({required this.userManagementUseCase}) : super(AddUserInitial());
/// Initialize cubit
Future<void> call() async {
emit(AddUserInitial());
}
///
/// Add new user cubit function
///
Future<void> addUser(
{required TextEditingController username,
required TextEditingController password,
required TextEditingController salary,
required List<String> role}) async {
///
/// convert salary String value to int
///
final int _salary = int.parse(salary.text);
/// Extract username from usernameController
String _username = username.text;
/// Extract password from passwordController
String _password = password.text;
if (_username.isNotEmpty && _password.isNotEmpty && role.isNotEmpty) {
Either<Failure, bool> response =
await userManagementUseCase.createNewUser(
username: _username,
password: _password,
role: role,
salary: _salary);
//
/// Loading state...
///
emit(AddUserOnProgressState());
//
/// check response and emit state accordingly
///
response.fold((error) async {
///
/// user creation Network Error state
///
/// possible reason [No/Slow Internet Connection]
///
emit(AddUserNetworkFailureState());
}, (success) async {
///
/// user creation success state
///
emit(AddUserSuccessfulState(
username: _username,
password: _password,
salary: _salary,
roles: role));
});
}
}
** create.user.state.dart **
part of 'add.user.cubit.dart';
abstract class AddUserState extends Equatable {
const AddUserState();
@override
List<Object> get props => [];
}
class AddUserInitial extends AddUserState {}
class AddUserNetworkFailureState extends AddUserState {}
class AddUserOnProgressState extends AddUserState {}
class AddUserValidationState extends AddUserState {
final bool enableButton;
final List<String> updatedRoles;
const AddUserValidationState(
{required this.enableButton, required this.updatedRoles});
@override
List<Object> get props => [enableButton, updatedRoles];
}
class AddUserSuccessfulState extends AddUserState {
final String username;
final String password;
final int salary;
final List<String> roles;
const AddUserSuccessfulState(
{required this.username,
required this.password,
required this.salary,
required this.roles});
@override
List<Object> get props => [username, password, salary, roles];
}