【问题标题】:why the named parameter 'inputdataint' isn't defined and how to fix it in flutter为什么未定义命名参数“inputdataint”以及如何在颤动中修复它
【发布时间】:2021-06-06 13:15:20
【问题描述】:

我是新来的颤振。最近正在构建一个计时器应用程序的项目。好的,主页是用户打开应用程序的时候。它将输入他们想要倒计时的小时、分钟和秒的数字。那么这三个数字将在此处的代码行中发送到另一个页面

@override
  void initState() {
    super.initState();
    controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: inputdataint),//inputdataint means the constructor i build. don't know correct or not
    );
  }

所以这里的问题是,当我想发送用户输入的三个数字并将其发送到第二个屏幕,即 Countdowntimer 屏幕时,它会给我一个错误,即 inputdataint 未定义。但我已经在类中定义了 inputdataint。谁能帮忙。 这是错误部分

Navigator.push(context,MaterialPageRoute(builder: (context)=>CountDownTimer(inputdataint:hourController.text )));

这是我的全部代码。我不知道是我的代码有问题还是...

class inputdatacountdown extends StatefulWidget {
  @override
  _inputdatacountdownState createState() => _inputdatacountdownState();
}

class _inputdatacountdownState extends State<inputdatacountdown> {

  final hourController = TextEditingController();
  final minuteController = TextEditingController();
  final secondController = TextEditingController();
  final _key = GlobalKey<FormState>();

  int inputdata;
  _inputdatacountdownState(){
    inputdata=int.parse(hourController.text);
  }

  @override
  Widget build(BuildContext context) {
    ThemeData themeData = Theme.of(context);
    final nametext =
    MediaQuery.of(context).platformBrightness == Brightness.dark
        ? Colors.white
        : Colors.black;
    final nametextonbutton =
    MediaQuery.of(context).platformBrightness == Brightness.dark
        ? Colors.black
        : Colors.white;
    return Scaffold(
      body: Center(
        child: Container(
          child: Form(
              key: _key,
              child: Column(
                children: [
                  TextFormField(
                      controller: hourController,
                      decoration: InputDecoration(
                        hintText: 'e.g 1',
                        labelText: 'hours',
                        border:
                        OutlineInputBorder(),
                        suffixIcon: IconButton(
                          icon: Icon(Icons.close),
                          onPressed: () =>
                              hourController
                                  .clear(),
                        ),
                      ),
                      keyboardType:
                      TextInputType.number,
                      textInputAction:
                      TextInputAction.done,
                      validator: (value) {
                        if (value.isEmpty) {
                          return 'hours cannot be empty';
                        } else
                          return null;
                      }),
                  TextFormField(
                      controller: minuteController,
                      decoration: InputDecoration(
                        hintText: 'e.g 1',
                        labelText: 'minutes',
                        border:
                        OutlineInputBorder(),
                        suffixIcon: IconButton(
                          icon: Icon(Icons.close),
                          onPressed: () =>
                              minuteController
                                  .clear(),
                        ),
                      ),
                      keyboardType:
                      TextInputType.number,
                      textInputAction:
                      TextInputAction.done,
                      validator: (value) {
                        if (value.isEmpty) {
                          return 'minutes cannot be empty';
                        } else
                          return null;
                      }),
                  TextFormField(
                      controller: secondController,
                      decoration: InputDecoration(
                        hintText: 'e.g 1',
                        labelText: 'second',
                        border:
                        OutlineInputBorder(),
                        suffixIcon: IconButton(
                          icon: Icon(Icons.close),
                          onPressed: () =>
                              secondController
                                  .clear(),
                        ),
                      ),
                      keyboardType:
                      TextInputType.number,
                      textInputAction:
                      TextInputAction.done,
                      validator: (value) {
                        if (value.isEmpty) {
                          return 'second cannot be empty';
                        } else
                          return null;
                      }),
                  FlatButton(
                      color: nametext,
                      onPressed: () {
                        if (_key.currentState
                            .validate()) {
                          print(
                              'hour: ${hourController.text}');
                          print(
                              'minutes: ${minuteController.text}');
                          print(
                              'second: ${secondController.text}');
                          
                          Navigator.push(context,MaterialPageRoute(builder: (context)=>CountDownTimer(inputdataint:hourController.text )));
                        }
                      },
                      child: Text(
                        'submit ',
                        style: TextStyle(
                            color:
                            nametextonbutton),
                      ))
                ],
              )),
        ),
      ),
    );
  }

}

class CountDownTimer extends StatefulWidget {

  @override
  _CountDownTimerState createState() => _CountDownTimerState();
}

class _CountDownTimerState extends State<CountDownTimer>
    with TickerProviderStateMixin {
  AnimationController controller;

  String get timerString {
    Duration duration = controller.duration * controller.value;
    return '${duration.inMinutes}:${(duration.inSeconds % 60).toString().padLeft(2, '0')}';
  }
    int inputdataint;

  CountDownTimer(int inputdataint){
    this.inputdataint = inputdataint;
  }
  @override
  void initState() {
    super.initState();
    controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: inputdataint),//come back to you later
    );
  }

  @override
  Widget build(BuildContext context) {

    ThemeData themeData = Theme.of(context);
    final nametext =
    MediaQuery.of(context).platformBrightness == Brightness.dark
        ? Colors.white
        : Colors.black;
    final nametextonbutton =
    MediaQuery.of(context).platformBrightness == Brightness.dark
        ? Colors.black
        : Colors.white;



    return Scaffold(
      backgroundColor: Colors.white10,
      body: AnimatedBuilder(
          animation: controller,
          builder: (context, child) {
            return Stack(children: <Widget>[
              Padding(
                  padding: EdgeInsets.all(8.0),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Expanded(
                        child: Align(
                          alignment: FractionalOffset.center,
                          child: AspectRatio(
                            aspectRatio: 1.0,
                            child: Stack(
                              children: <Widget>[
                                Positioned.fill(
                                  child: CustomPaint(
                                      painter: CustomTimerPainter(
                                        animation: controller,
                                        backgroundColor: Colors.white,
                                        color: themeData.indicatorColor,
                                      )),
                                ),
                                Align(
                                  alignment: FractionalOffset.center,
                                  child: Column(
                                    mainAxisAlignment:
                                    MainAxisAlignment.spaceEvenly,
                                    crossAxisAlignment:
                                    CrossAxisAlignment.center,
                                    children: <Widget>[
                                      Text(
                                        "Count Down Timer",
                                        style: TextStyle(
                                            fontSize: 20.0, color: nametext),
                                      ),
                                      Text(
                                        timerString,
                                        style: TextStyle(
                                            fontSize: 112.0, color: nametext),
                                      ),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                      ),
                      AnimatedBuilder(
                          animation: controller,
                          builder: (context, child) {
                            return FloatingActionButton.extended(
                                onPressed: () {
                                  if (controller.isAnimating)
                                    controller.stop();
                                  else {
                                    controller.reverse(
                                        from: controller.value == 0.0
                                            ? 1.0
                                            : controller.value);
                                  }
                                },
                                icon: Icon(controller.isAnimating
                                    ? Icons.pause
                                    : Icons.play_arrow),
                                label: Text(
                                    controller.isAnimating ? "Pause" : "Play"));
                          }),
                    ],
                  ))
            ]);
          }),
    );
  }


}

【问题讨论】:

    标签: flutter dart input navigator


    【解决方案1】:

    发生的情况是,您通过这样做向您的小部件CountDownTimer 发送了一个名为inputdataint 的参数:

    Navigator.push(context,MaterialPageRoute(builder: (context)=>CountDownTimer(inputdataint:hourController.text )));
    

    您可以在那里看到您将值 hourController.text 作为称为 inputdataint 的参数发送到 CountDownTimer

    错误来自您的CountDownTimer 小部件定义。 您没有声明参数 inputdataint,但您正在尝试使用此值。

    为此,您需要像这样更新您的代码:

    class CountDownTimer extends StatefulWidget {
      final String inputdataint;
    
      const CountDownTimer({this.inputdataint});
    
      @override
      _CountDownTimerState createState() => _CountDownTimerState();
    }
    
    class _CountDownTimerState extends State<CountDownTimer>
        with TickerProviderStateMixin {
        // Your widget there...
        // Use widget.inputdataint to use the data your passed to this widget.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2021-06-26
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多