Search code examples
flutterdarttextbloc

I am not able to access TextEditingController using bloc in Flutter


How to access TextEditingController(); using bloc . here my code :- after i use

BlocProvider.of<UsernameupdateCubit>(context).nameUpdate(userUpdateController.text);

I got an error which is BlocProvider.of() called with a context that does not contain a UsernameupdateCubit.

Please check : I use

final userUpdateController = TextEditingController();

then

TextFormField(
          controller: userUpdateController,
          decoration: InputDecoration(
            labelText: "Full Name",
            border: OutlineInputBorder(),
            prefixIcon: Icon(FeatherIcons.user, size: 24),
          ),
        ),

after that use a button to save/sent/access anywhere or display in list view : button is :

Container(
          margin: EdgeInsets.only(top: 10),
          alignment: AlignmentDirectional.centerEnd,
          child: ElevatedButton(
            style: ElevatedButton.styleFrom(
              elevation: 1,
              primary: Color(0xff34495e),
            ),
            onPressed: () {
              // BlocProvider.of<UsernameupdateCubit>(context).nameUpdate();
              // BlocProvider.of<WeatherBloc>(context)
              BlocProvider.of<UsernameupdateCubit>(context)
                  .nameUpdate(userUpdateController.text);
            },
            child: Text(
              "Continue",
            ),
          ),
        ),

My Cubit :

class UsernameupdateCubit extends Cubit<UsernameupdateState> {
  UsernameupdateCubit() : super(UsernameupdateState(userUpdateName: ''));

  void nameUpdate(userUpdateController) =>
      emit(UsernameupdateState(userUpdateName: userUpdateController.text));
}

and state is :

    class UsernameupdateState {
  String userUpdateName;
  UsernameupdateState({
    required this.userUpdateName,
  });
}

Solution

  • all are same but I include BlocProvider in : using multibloc:

        BlocProvider(
              create: (context) => UsernameupdateCubit(),
        ),
    

    after that I changed my cubit :

        void nameUpdate(userUpdateController) =>
          emit(UsernameupdateState(userUpdateName: userUpdateController));
    

    and yes that's it . thank you – @nvoigt #nvoigt