flutter - 类型 'TextEditingController' 不是类型转换中类型 'int' 的子类型

标签 flutter dart texteditingcontroller

我正在尝试从用户那里获取 4 个输入以显示最小值、最大值并显示中间值 1 和中间值 2。现在的事实是,每当我尝试输入以对其执行操作以显示我的答案时。它显示“类型'TextEditingController'不是类型转换中类型'int'的子类型”。我使用 int.parse() 方法将其转换为字符串,但仍然没有用。 这是我的代码:

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

感谢您的回答

错误日志

══╡ 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

最佳答案

只需检查下面的示例

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



如果有用请告诉我

关于flutter - 类型 'TextEditingController' 不是类型转换中类型 'int' 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60785956/

相关文章:

Flutter Web 因无法打开文件 client.js 而崩溃

flutter - 如何在下面的代码中使用 systemNavigator.pop 在 flutter 中退出应用程序

flutter - 在TextEditingController的初始值设定项中只能访问静态成员

Flutter Google 登录 - 此应用程序未验证错误

Flutter,Visual Studio 代码项目卡在分析中

android - Flutter WebView window.close()不起作用(Android)

flutter - float 位置 float 按钮中的文字?

flutter - 找不到符号 public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine)

Flutter:TextFormField:调用 setState() 后光标重置为开始

使用 TextEditingController 设置初始值后,Flutter 在 TextField 中编辑值