首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未处理异常中的下拉按钮用法:类型“double”不是“value”的“int”类型的子类型

未处理异常中的下拉按钮用法:类型“double”不是“value”的“int”类型的子类型
EN

Stack Overflow用户
提问于 2022-03-17 19:04:22
回答 1查看 98关注 0票数 0

我试图使用下拉按钮来更改一些值,然后使用这些值来更改对象属性和调用对象方法,但是当我尝试这样做时,我会得到以下错误:

代码语言:javascript
复制
num glute_mev = 2;
num glute_mv = 2;
num glute_mrv_2x = 12;
num glute_mrv_3x = 18;
num glute_mrv_4x = 25;

class Mesocycle {

  late num duration;
  late String mode;
  late num freq;

// would prefer to not initialize but it gives an error if i dont
  late num gluteFreq;
  late String gluteMode = 'MAX'; 
  late num gluteIncrement = 1.0;

  List gluteExercises = <String>[];
  List gluteVolume = <int>[];

  generateGluteVolume() {
    //4 week mesocycle
    if (duration == 4 && gluteMode != 'off') {
      gluteVolume.add(glute_mev);
      gluteVolume.add(glute_mev + gluteIncrement * 2);
      gluteVolume.add(glute_mev + gluteIncrement * 3);
      gluteVolume.add(glute_mev + (gluteIncrement * 3) / 3); //deload
    }
    //8 week mesocycle
    if (duration == 8 && gluteMode != 'off') {
      gluteVolume.add(glute_mev);
      gluteVolume.add(glute_mev + gluteIncrement * 2);
      gluteVolume.add(glute_mev + gluteIncrement * 3);
      gluteVolume.add(glute_mev + gluteIncrement * 4);
      gluteVolume.add(glute_mev + gluteIncrement * 5);
      gluteVolume.add(glute_mev + gluteIncrement * 6);
      gluteVolume.add(glute_mev + gluteIncrement * 7);
      gluteVolume.add(glute_mev + (gluteIncrement * 7) / 3); //deload
    }
  }

  set_Freq(String group, num _freq) {
    if (group == 'glutes') {
      gluteFreq = _freq;
    }
  }

  set_Mode(String group, String _mode) {
    if (group == 'glutes') {
      gluteMode = _mode;
    }
  }

  set_gluteIncrement() {
    if (gluteFreq == 2) {
      gluteIncrement = (glute_mrv_2x - glute_mev) / (duration - 1);
    }
    if (gluteFreq == 3) {
      gluteIncrement = (glute_mrv_3x - glute_mev) / (duration - 1);
    }
    if (gluteFreq == 4) {
      gluteIncrement = (glute_mrv_4x - glute_mev) / (duration - 1);
    }
  }

  Mesocycle({
    required this.duration,
    required this.freq,
    required this.mode,
  });
}

void main() {
  runApp(MaterialApp(home: MesocycleView()));
}
// #endregion

class MesocycleView extends StatefulWidget {
  const MesocycleView({Key? key}) : super(key: key);

  @override
  State<MesocycleView> createState() => _MesocycleViewState();
}

class _MesocycleViewState extends State<MesocycleView> {
  late String _gluteMode = 'MAX';
  var _gluteFreq;
  var _fontSize = 20.0;

  
  List<String> frequency = ['1', '2', '3', '4'];


  Mesocycle Meso1 = Mesocycle(
    duration: 8,
    freq: 2,
    mode: 'mass',
  );
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.grey,
        appBar: AppBar(
          title: Text('Mesocycle View'),
          centerTitle: true,
          backgroundColor: Colors.amber,
        ),
        // #region Grid
        body: Center(
          child: Container(
            //margin: EdgeInsets.fromLTRB(100.0, 10.0, 10.0, 10.0),
            child: GridView(
              children: [
                
                Container(
                    child: DropdownButton(
                  hint: _gluteMode == null
                      ? Center(child: Text('Mode'))
                      : Center(
                          child: Text(
                            _gluteMode,
                            style: TextStyle(
                                color: Colors.black, fontSize: _fontSize),
                          ),
                        ),
                  isExpanded: true,
                  iconSize: 30.0,
                  style: TextStyle(color: Colors.black, fontSize: _fontSize),
                  items: ['Max', 'Min', 'Maintain', 'Off'].map(
                    (val) {
                      return DropdownMenuItem<String>(
                        value: val,
                        child: Text(val),
                      );
                    },
                  ).toList(),
                  onChanged: (val) {
                    setState(
                      () {
                        _gluteMode = val.toString();
                        Meso1.set_Mode('glutes', _gluteMode);
                        Meso1.generateGluteVolume();
                      },
                    );
                  },
                )),
                Container(
                    child: DropdownButton(
                  hint: _gluteFreq == null
                      ? Center(child: Text('Freq.'))
                      : Center(
                          child: Text(
                            _gluteFreq,
                            style: TextStyle(
                              color: Colors.black,
                              fontSize: _fontSize,
                            ),
                          ),
                        ),
                  isExpanded: true,
                  iconSize: 30.0,
                  style: TextStyle(color: Colors.black, fontSize: _fontSize),
                  items: ['2', '3', '4'].map(
                    (val) {
                      return DropdownMenuItem<String>(
                        value: val,
                        child: Text(val),
                      );
                    },
                  ).toList(),
                  onChanged: (val) {
                    setState(
                      () {
                        _gluteFreq = val;
                        Meso1.set_Freq('glutes', _gluteFreq);
                        Meso1.generateGluteVolume();
                      },
                    );
                  },
                )),
... etc

E/颤振(11519):错误:flutter/lib/ui/ui_dart_state.cc(209)未处理的异常:类型'double‘不是'int’的‘int’类型'value‘的子类型

E/颤振(11519):#0 List.add (飞镖:核心-补丁/可生长的_array.dart)

E/颤振(11519):#1 Mesocycle.generateGluteVolume

E/颤振(11519):#2 _MesocycleViewState.build.

E/颤振(11519):#3 State.setState

E/颤振(11519):#4 _MesocycleViewState.build。

E/颤振(11519):#5 _DropdownButtonState._handleTap。

E/颤振(11519):#6 _rootRunUnary (飞镖:异步/zone.dart:1434:47)

E/颤振(11519):#7 _CustomZone.runUnary (飞镖:异步/zone.dart:1335:19)

E/颤振(11519):异步悬挂

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 19:23:27

Mesocycle类中,将gluteVolume列表初始化为<int>[]。但是,稍后您将尝试执行以下操作:

代码语言:javascript
复制
gluteVolume.add(glute_mev + (gluteIncrement * 3) / 3);

基于Dart文件/操作符(除法)的结果类型是double。因此,您正在尝试将double类型值添加到int列表中-您将得到错误。

解决问题的最简单方法是将gluteVolume列表初始化为<double>[]

代码语言:javascript
复制
final gluteVolume = <double>[];

如果希望将gluteVolume列表保持为<int>[],则可以使用截断除法(~/),其中小数结果被转换为整数,其四舍五入为零:

代码语言:javascript
复制
gluteVolume.add(glute_mev + (gluteIncrement * 3) ~/ 3);

或者您可以使用round()/floor()函数(根据您期望的结果):

代码语言:javascript
复制
gluteVolume.add((glute_mev + (gluteIncrement * 3) / 3).round());
// OR
gluteVolume.add((glute_mev + (gluteIncrement * 3) / 3).round());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71517737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档