skip to Main Content

I want to add textfield that has its own unique index. So I declared a list of TextFieldEditingController and call it in the Wrap(). controllers.add(TextEditingController()),. But I am getting this error while calling it. I am getting this error This expression has a type of 'void' so its value can't be used. Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void..

  List<TextEditingController> controllers = [];

 Wrap(
                      children: retrieveData.map((order) {
                    return Row(
                      children: [
                        Expanded(
                          child: Card(
                              child:
                                  SvgPicture.asset('assets/toiletpaper.svg')),
                        ),
                        Expanded(
                          flex: 2,
                          child: Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              mainAxisSize: MainAxisSize.min,
                              children: [
                                CustomText(
                                    text: order.commodityName.toString()),
                                CustomText(text: '60 rolls per pack'),
                                SizedBox(
                                  height: screenHeight(context) / 40,
                                ),
                                controllers.add(TextEditingController()), // this is the error
                                Flexible(
                                  child: TextFormValidator(
                                      fillColor: Colors.white,
                                      contentPadding:
                                          EdgeInsets.symmetric(vertical: 8),
                                      outlineInputBorder: OutlineInputBorder(),
                                      controller: description,
                                      textAlign: TextAlign.left),
                                )
                              ],
                            ),
                          ),
                        )
                      ],
                    );
                  }).toList()),

2

Answers


  1. The line causing the error is just an expression: controllers.add(...) returns void. You placed that line inside of the children: [...] list, which has the type List<Widget>.

    That’s why this doesn’t work:

    children: [CustomText(...), CustomText(...), controllers.add(...), Flexible(...)]
                ^ Widget         ^ Widget             ^ void             ^ Widget
    

    I don’t understand entirely what you are trying to achieve, that’s why I can’t give you a working solution, but maybe this will work:

    Wrap(
       children: retrieveData.map((order) {
           controllers.add(TextEditingController())   // move the line here
           return Row(
                 children: [
                     ...
                 ]
           );
        }).toList(),
    )
    
    Login or Signup to reply.
  2. the children property of the Column widget is just a List<Widget>, so it accepts only the actual flutter widget to be set inside of it, in your code, by doing the:

     SizedBox(
       height: screenHeight(context) / 40,
        ),
     controllers.add(TextEditingController()),
     //...
    

    you’re trying just to put another type than what is accepted from the children property, the add() method do just add elements to a List which is the controllers list and doesn’t really return a Widget, it has a type of void, so the error is thrown.

    you will need to take it and put it in a scope that accepts calling method (add()), like build() function scope, a lifecycle method such initState(), or even wrapping a widget with a Builder widget then call it inside the builder property.. :

    Widget build() {
     controllers.add(TextEditingController()),
    
    // Your widget here
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search