0

すべてが正常に機能しています。ユーザーは作成されていますが、状態は変化していません。

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];
}

4

0 に答える 0