flutterdarttexteditingcontroller

type 'TextEditingController' is not a subtype of type 'int' in type cast


I am trying to take 4 inputs from the user to show the minimum, maximum values and to show mid 1 value and mid 2 value. Now the fact is that whenever I try to take input to perform an action on it to display my answer. It shows "type 'TextEditingController' is not a subtype of type 'int' in typecast". I used the int.parse() method to convert it into a string but still didn't work. This is my code:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:inputtext/convert.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  int min, max, mid1, mid2, temp;
  String output = '';
  TextEditingController inputvalue1 = new TextEditingController();
  TextEditingController inputvalue2 = new TextEditingController();
  TextEditingController inputvalue3 = new TextEditingController();
  TextEditingController inputvalue4 = new TextEditingController();
  // @override
  // void initState() {
  //   super.initState();
  //   inputvalues = new TextEditingController();
  //   inputvalues.text = '';
  // }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          'InputValue',
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
      body: Container(
        color: Colors.blueAccent[50],
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            SizedBox(
              height: 5,
            ),
            Flexible(
              flex: 1,
              child: TextFormField(
                autofocus: true,
                controller: inputvalue1,
                keyboardType: TextInputType.number,
                inputFormatters: <TextInputFormatter>[
                  WhitelistingTextInputFormatter.digitsOnly,
                ],
                decoration: InputDecoration(
                  hoverColor: Colors.blueGrey,
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.all(
                      Radius.circular(4.0),
                    ),
                  ),
                  labelText: 'Enter Values',
                ),
              ),
            ),
            SizedBox(height: 10),
            Center(
              child: TextFormField(
                autofocus: true,
                controller: inputvalue2,
                keyboardType: TextInputType.number,
                inputFormatters: <TextInputFormatter>[
                  WhitelistingTextInputFormatter.digitsOnly,
                ],
                decoration: InputDecoration(
                  hoverColor: Colors.blueGrey,
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.all(
                      Radius.circular(4.0),
                    ),
                  ),
                  labelText: 'Enter Values',
                ),
              ),
            ),
            SizedBox(height: 10),
            Center(
              child: TextFormField(
                autofocus: true,
                controller: inputvalue3,
                keyboardType: TextInputType.number,
                inputFormatters: <TextInputFormatter>[
                  WhitelistingTextInputFormatter.digitsOnly,
                ],
                decoration: InputDecoration(
                  hoverColor: Colors.blueGrey,
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.all(
                      Radius.circular(4.0),
                    ),
                  ),
                  labelText: 'Enter Values',
                ),
              ),
            ),
            SizedBox(height: 10),
            Center(
              child: TextFormField(
                //validator: (),
                autofocus: true,
                controller: inputvalue4,

                keyboardType: TextInputType.number,
                inputFormatters: <TextInputFormatter>[
                  WhitelistingTextInputFormatter.digitsOnly,
                ],
                decoration: InputDecoration(
                  hoverColor: Colors.blueGrey,
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.all(
                      Radius.circular(4.0),
                    ),
                  ),
                  labelText: 'Enter Values',
                ),
              ),
            ),
            SizedBox(height: 10),

            RaisedButton(
              child: Text(
                'Submit',
                style: TextStyle(color: Colors.blue),
              ),
              onPressed: () {
                comp();
              },
            ),
            SizedBox(
              height: 10,
            ),
            RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => Convert()),
                );
              },
              child: Text(
                'Next',
                style: TextStyle(color: Colors.blue),
              ),
            ),

            //Text(result),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          return showDialog(
            context: context,
            barrierDismissible: true,
            builder: (context) {
              return SimpleDialog(
                title: Text("Values"),
                // content: TextField(controller: inputvalue1),
                children: <Widget>[
                  SimpleDialogOption(
                    onPressed: () {
                      setState(() {
                        print('Minimum Value= ' + min.toString());
                      });
                    },
                  ),
                ],
              );
            },
          );

          // setState(() {
          //   print('Minimum Value=' + min.toString());
          //   print('Maximum Value=' + max.toString());
          //   print('Mid1=' + mid1.toString());
          //   print('Mid2 =' + mid2.toString());
          // });
          // Navigator.of(context).pop();
        },
      ),
    );
  }

  void comp() {
    if (inputvalue1.text.toString() == inputvalue2.text.toString() ||
        inputvalue1.text.toString() == inputvalue3.text.toString() ||
        inputvalue1.text.toString() == inputvalue4.text.toString()) {
      print('Please input different number');
    } else if (inputvalue2.text.toString() == inputvalue3.text.toString() ||
        inputvalue2.text.toString() == inputvalue4.text.toString()) {
      print('Please input different number');
    } else if (inputvalue3.text.toString() == inputvalue4.text.toString()) {
      print('Please enter differet vlaues');
    }
    //Finding minimum value
    if (int.parse(inputvalue1.text) <= int.parse(inputvalue2.text) &&
        int.parse(inputvalue1.text) <= int.parse(inputvalue3.text) &&
        int.parse(inputvalue1.text) <= int.parse(inputvalue4.text)) {
      min = inputvalue1 as int;
    } else if (int.parse(inputvalue2.text) <= int.parse(inputvalue3.text) &&
        int.parse(inputvalue2.text) <= int.parse(inputvalue4.text)) {
      min = inputvalue2 as int;
    } else if (int.parse(inputvalue3.text) <= int.parse(inputvalue4.text)) {
      min = inputvalue3 as int;
    } else {
      min = inputvalue4 as int;
    }
    //finding maximum number
    if (int.parse(inputvalue1.text) >= int.parse(inputvalue2.text) &&
        int.parse(inputvalue1.text) >= int.parse(inputvalue2.text) &&
        int.parse(inputvalue1.text) >= int.parse(inputvalue3.text) &&
        int.parse(inputvalue1.text) >= int.parse(inputvalue4.text)) {
      max = inputvalue1 as int;
    } else if (int.parse(inputvalue2.text) >= int.parse(inputvalue3.text) &&
        int.parse(inputvalue2.text) >= int.parse(inputvalue4.text)) {
      max = inputvalue2 as int;
    } else if (int.parse(inputvalue3.text) >= int.parse(inputvalue4.text)) {
      max = inputvalue3 as int;
    } else {
      max = inputvalue4 as int;
    }
    //finding mid1
    if (int.parse(inputvalue1.text) != min &&
        int.parse(inputvalue1.text) != max) {
      mid1 = inputvalue1 as int;
    } else if (int.parse(inputvalue2.text) != min &&
        int.parse(inputvalue2.text) != max) {
      mid1 = inputvalue2 as int;
    } else if (int.parse(inputvalue3.text) != min &&
        int.parse(inputvalue3.text) != max) {
      mid1 = inputvalue3 as int;
    } else if (int.parse(inputvalue4.text) != min &&
        int.parse(inputvalue4.text) != max) {
      mid1 = inputvalue4 as int;
    }

    //finding mid2
    if (int.parse(inputvalue1.text) != mid1 &&
        int.parse(inputvalue1.text) != min &&
        int.parse(inputvalue1.text) != max) {
      mid2 = inputvalue1 as int;
    } else if (int.parse(inputvalue2.text) != mid1 &&
        int.parse(inputvalue2.text) != min &&
        int.parse(inputvalue2.text) != max) {
      mid2 = inputvalue2 as int;
    } else if (int.parse(inputvalue3.text) != mid1 &&
        int.parse(inputvalue3.text) != min &&
        int.parse(inputvalue3.text) != max) {
      mid2 = inputvalue3 as int;
    } else if (int.parse(inputvalue4.text) != mid1 &&
        int.parse(inputvalue4.text) != min &&
        int.parse(inputvalue4.text) != max) {
      mid2 = inputvalue4 as int;
    }
    if (mid1 > mid2) {
      temp = mid1;
      mid1 = mid2;
      mid2 = temp;
    }
  }
}

Appreciate your answer

Error log

══╡ EXCEPTION CAUGHT BY FOUNDATION LIBRARY ╞════════════════════════════════════════════════════════
I/flutter ( 5462): The following assertion was thrown while dispatching notifications for FocusNode:
I/flutter ( 5462): RenderBox was not laid out: RenderEditable#cd6b6 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5462): 'package:flutter/src/rendering/box.dart':
I/flutter ( 5462): Failed assertion: line 1687 pos 12: 'hasSize'
I/flutter ( 5462):
I/flutter ( 5462): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter ( 5462): more information in this error message to help you determine and fix the underlying cause.
I/flutter ( 5462): In either case, please report this assertion by filing a bug on GitHub:
I/flutter ( 5462):   https://github.com/flutter/flutter/issues/new?template=BUG.md
I/flutter ( 5462):
I/flutter ( 5462): When the exception was thrown, this was the stack:
I/flutter ( 5462): #2      RenderBox.size 
package:flutter/…/rendering/box.dart:1687
I/flutter ( 5462): #3      EditableTextState._updateSizeAndTransform 
package:flutter/…/widgets/editable_text.dart:1729
I/flutter ( 5462): #4      EditableTextState._openInputConnection 
package:flutter/…/widgets/editable_text.dart:1415
I/flutter ( 5462): #5      EditableTextState._openOrCloseInputConnectionIfNeeded 
package:flutter/…/widgets/editable_text.dart:1441
I/flutter ( 5462): #6      EditableTextState._handleFocusChanged 
package:flutter/…/widgets/editable_text.dart:1707
I/flutter ( 5462): #7      ChangeNotifier.notifyListeners 
package:flutter/…/foundation/change_notifier.dart:206
I/flutter ( 5462): #8      FocusNode._notify 
package:flutter/…/widgets/focus_manager.dart:825
I/flutter ( 5462): #9      FocusManager._applyFocusChange 
package:flutter/…/widgets/focus_manager.dart:1456
I/flutter ( 5462): (elided 12 frames from class _AssertionError and package dart:async)
I/flutter ( 5462):
I/flutter ( 5462): The FocusNode sending notification was:
I/flutter ( 5462):   FocusNode#bbc92
I/flutter ( 5462): ════════════════════════════════════════════════════════════════════════════════════════════════════

 Exception caught by gesture ═══════════════════════════════════════════
The following _CastError was thrown while handling a gesture:
type 'TextEditingController' is not a subtype of type 'int' in type cast

When the exception was thrown, this was the stack
#0      _HomePageState.comp 
package:inputtext/homepage.dart:213
#1      _HomePageState.build.<anonymous closure> 
package:inputtext/homepage.dart:133
#2      _InkResponseState._handleTap 
package:flutter/…/material/ink_well.dart:706
#3      _InkResponseState.build.<anonymous closure> 
package:flutter/…/material/ink_well.dart:789
#4      GestureRecognizer.invokeCallback 
package:flutter/…/gestures/recognizer.dart:182
...
Handler: "onTap"
Recognizer: TapGestureRecognizer#e5be9
    debugOwner: GestureDetector
    state: possible
    won arena
    finalPosition: Offset(212.6, 351.2)
    finalLocalPosition: Offset(50.8, 5.9)
    button: 1
    sent tap down
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by gesture ═══════════════════════════════════════════
type 'TextEditingController' is not a subtype of type 'int' in type cast
════════════════════════════════════════════════════════════════════════════════
Reloaded 2 of 480 libraries in 585ms.
Reloaded 2 of 480 libraries in 262ms.

════════ Exception caught by gesture ═══════════════════════════════════════════
The following _CastError was thrown while handling a gesture:
type 'TextEditingController' is not a subtype of type 'int' in type cast

When the exception was thrown, this was the stack
#0      _HomePageState.comp 
package:inputtext/homepage.dart:210
#1      _HomePageState.build.<anonymous closure> 
package:inputtext/homepage.dart:133
#2      _InkResponseState._handleTap 
package:flutter/…/material/ink_well.dart:706
#3      _InkResponseState.build.<anonymous closure> 
package:flutter/…/material/ink_well.dart:789
#4      GestureRecognizer.invokeCallback                         package:flutter/…/gestures/recognizer.dart:182
...
Handler: "onTap"
Recognizer: TapGestureRecognizer#e5be9
    debugOwner: GestureDetector
    state: possible
    won arena
    finalPosition: Offset(201.1, 369.1)
    finalLocalPosition: Offset(39.4, 23.8)
    button: 1
    sent tap down
════════════════════════════════════════════════════════════════════════════════
Reloaded 2 of 480 libraries in 2,487ms.

════════ Exception caught by gesture ═══════════════════════════════════════════
The following _CastError was thrown while handling a gesture:
type 'TextEditingController' is not a subtype of type 'int' in type cast

When the exception was thrown, this was the stack
#0      _HomePageState.comp 
package:inputtext/homepage.dart:210
#1      _HomePageState.build.<anonymous closure> 
package:inputtext/homepage.dart:133
#2      _InkResponseState._handleTap 
package:flutter/…/material/ink_well.dart:706
#3      _InkResponseState.build.<anonymous closure> 
package:flutter/…/material/ink_well.dart:789
#4      GestureRecognizer.invokeCallback 
package:flutter/…/gestures/recognizer.dart:182
...
Handler: "onTap"
Recognizer: TapGestureRecognizer#e5be9
    debugOwner: GestureDetector
    state: possible
    won arena
    finalPosition: Offset(220.2, 368.0)
    finalLocalPosition: Offset(58.5, 22.6)
    button: 1
    sent tap down
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by gesture ═══════════════════════════════════════════
type 'TextEditingController' is not a subtype of type 'int' in type cast
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by gesture ═══════════════════════════════════════════
type 'TextEditingController' is not a subtype of type 'int' in type cast
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by gesture ═══════════════════════════════════════════
type 'TextEditingController' is not a subtype of type 'int' in type cast

Solution

  • Just check this example below

    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    
    void main() => runApp(HomePage());
    
    class HomePage extends StatefulWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<HomePage> {
      int min, max, mid1, mid2, temp;
      String output = '';
      TextEditingController inputvalue1 = new TextEditingController();
      TextEditingController inputvalue2 = new TextEditingController();
      TextEditingController inputvalue3 = new TextEditingController();
      TextEditingController inputvalue4 = new TextEditingController();
      // @override
      // void initState() {
      //   super.initState();
      //   inputvalues = new TextEditingController();
      //   inputvalues.text = '';
      // }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
              home: Scaffold(
            appBar: AppBar(
              title: Text(
                'InputValue',
                style: TextStyle(
                  color: Colors.white,
                ),
              ),
            ),
            body: Container(
              color: Colors.blueAccent[50],
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  SizedBox(
                    height: 5,
                  ),
                  Flexible(
                    flex: 1,
                    child: TextFormField(
                      autofocus: true,
                      controller: inputvalue1,
                      keyboardType: TextInputType.number,
                      inputFormatters: <TextInputFormatter>[
                        WhitelistingTextInputFormatter.digitsOnly,
                      ],
                      decoration: InputDecoration(
                        hoverColor: Colors.blueGrey,
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.all(
                            Radius.circular(4.0),
                          ),
                        ),
                        labelText: 'Enter Values',
                      ),
                    ),
                  ),
                  SizedBox(height: 10),
                  Center(
                    child: TextFormField(
                      autofocus: true,
                      controller: inputvalue2,
                      keyboardType: TextInputType.number,
                      inputFormatters: <TextInputFormatter>[
                        WhitelistingTextInputFormatter.digitsOnly,
                      ],
                      decoration: InputDecoration(
                        hoverColor: Colors.blueGrey,
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.all(
                            Radius.circular(4.0),
                          ),
                        ),
                        labelText: 'Enter Values',
                      ),
                    ),
                  ),
                  SizedBox(height: 10),
                  Center(
                    child: TextFormField(
                      autofocus: true,
                      controller: inputvalue3,
                      keyboardType: TextInputType.number,
                      inputFormatters: <TextInputFormatter>[
                        WhitelistingTextInputFormatter.digitsOnly,
                      ],
                      decoration: InputDecoration(
                        hoverColor: Colors.blueGrey,
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.all(
                            Radius.circular(4.0),
                          ),
                        ),
                        labelText: 'Enter Values',
                      ),
                    ),
                  ),
                  SizedBox(height: 10),
                  Center(
                    child: TextFormField(
                      //validator: (),
                      autofocus: true,
                      controller: inputvalue4,
    
                      keyboardType: TextInputType.number,
                      inputFormatters: <TextInputFormatter>[
                        WhitelistingTextInputFormatter.digitsOnly,
                      ],
                      decoration: InputDecoration(
                        hoverColor: Colors.blueGrey,
                        border: OutlineInputBorder(
                          borderRadius: BorderRadius.all(
                            Radius.circular(4.0),
                          ),
                        ),
                        labelText: 'Enter Values',
                      ),
                    ),
                  ),
                  SizedBox(height: 10),
    
                  RaisedButton(
                    child: Text(
                      'Submit',
                      style: TextStyle(color: Colors.blue),
                    ),
                    onPressed: () {
                      comp();
                    },
                  ),
                  SizedBox(
                    height: 10,
                  ),
                  RaisedButton(
                    onPressed: () {
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context) => Convert()),
                      );
                    },
                    child: Text(
                      'Next',
                      style: TextStyle(color: Colors.blue),
                    ),
                  ),
    
                  //Text(result),
                ],
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: () {
                return showDialog(
                  context: context,
                  barrierDismissible: true,
                  builder: (context) {
                    return SimpleDialog(
                      title: Text("Values"),
                      // content: TextField(controller: inputvalue1),
                      children: <Widget>[
                        SimpleDialogOption(
                          onPressed: () {
                            setState(() {
                              print('Minimum Value= ' + min.toString());
                            });
                          },
                        ),
                      ],
                    );
                  },
                );
    
                // setState(() {
                //   print('Minimum Value=' + min.toString());
                //   print('Maximum Value=' + max.toString());
                //   print('Mid1=' + mid1.toString());
                //   print('Mid2 =' + mid2.toString());
                // });
                // Navigator.of(context).pop();
              },
            ),
          ),
        );
      }
    
      void comp() {
          int value1 =int.parse(inputvalue1.text);
          int value2 =int.parse(inputvalue2.text);
          int value3 = int.parse(inputvalue3.text);
          int value4 =int.parse(inputvalue4.text);
    
        if (value1 == value2||
            value1 == value3||
            value1 == value4) {
          print('Please input different number');
        } else if (value2 == value3 ||
            value2 == value4) {
          print('Please input different number');
        } else if (value3== value4) {
          print('Please enter differet vlaues');
        }
        //Finding minimum value
        if (value1 <= value2 &&
            value1 <= value3 &&
            value1 <= value4) {
          min = value1;
        } else if (value2 <= value3 &&
            value2 <= value4) {
          min = value2;
        } else if (value3 <= value4) {
          min = value3;
        } else {
          min = value4;
        }
    
        print('Print the minimun number  : $min');
        //finding maximum number
        if (value1 >= value2&&
            value1 >= value2 &&
            value1 >= value3 &&
            value1 >= value4) {
          max = value1;
        } else if (value2 >= value3 &&
            value2 >= value4) {
          max = value2;
        } else if (value3 >= value4) {
          max = value3;
        } else {
          max = value4;
        }
        print('this is the max number : $max');
    
        //finding mid1
        if (value1 != min &&
            value1!= max) {
          mid1 = value1;
        } else if (value2 != min &&
            value2 != max) {
          mid1 = value2;
        } else if (value3!= min &&
            value3 != max) {
          mid1 = value3;
        } else if (value4 != min &&
            value4 != max) {
          mid1 = value4;
        }
        print('This is the mid value  $mid1');
    
        //finding mid2
        if (value1 != mid1 &&
            value1 != min &&
            value1 != max) {
          mid2 = value1;
        } else if (value2 != mid1 &&
            value2 != min &&
            value2!= max) {
          mid2 =value2;
        } else if (value3 != mid1 &&
            value3 != min &&
            value3 != max) {
          mid2 = value3;
        } else if (value4 != mid1 &&
            value4 != min &&
            value4 != max) {
          mid2 = value4;
        }
        print('This is the mid 2 $mid2');
    
        if (mid1 > mid2) {
          temp = mid1;
          mid1 = mid2;
          mid2 = temp;
        }
      }
    }
    
    
    
    

    Let me know if it works