FlutterSlider range on拖动缺少参数类型



我正在尝试使用FlutterSlider (another_xlider)。IDE中的以下代码用标记lowerValue和upperValue缺少参数类型。系统提示我尝试添加显式类型,或者从分析选项文件中删除隐式动态类型。后者我是不愿意做的。我试过前者,但显然是错的。

这是我当前的代码。

values: const [1000, 4000],
rangeSlider: true,
max: 10000,
min: 500,
onDragging: (handlerIndex, lowerValue, upperValue) {
_lowerValue = lowerValue is int ? lowerValue : 0;
_upperValue = upperValue is int ? upperValue : 0;
setState(() {});
},
)

如果我尝试设置显式类型如下,我得到参数类型'Null Function(int, int, int)'不能分配给参数类型'dynamic Function(int*, dynamic, dynamic)

_lowerValue = lowerValue;
_upperValue = upperValue;
setState(() {});
},
)

功能签名为dynamic Function(int*, dynamic, dynamic)*。我需要研究这些星号是什么意思-只在yield语句中使用它们-所以我认为这是问题的一部分。

FWIW -这几乎与https://pub.dev/packages/another_xlider/example上another_xlider文档中的示例相同(示例如下)。

values: [30, 420],
rangeSlider: true,
max: 500,
min: 0,
onDragging: (handlerIndex, lowerValue, upperValue) {
_lowerValue = lowerValue;
_upperValue = upperValue;
setState(() {});
},
)

到目前为止,谷歌没有帮助。我错过了什么?我使用Very Good Cli(参见https://verygood.ventures/blog/flutter-starter-app-very-good-core-cli)创建了我的项目。在尝试调试时,我拉下了another_xlider项目,问题没有出现。我使用Very Good Cli创建了一个全新的项目,复制了MyApp类,问题又出现了。因此,我将Very Good项目中的所有依赖项复制到我的非vgc项目并更新。没有问题。似乎是VGC项目创建方式的一些基本问题导致了这个问题。然而,由于时间是至关重要的,同时发现内置的颤振范围滑块满足我的需求,我不再担心这一点。也就是说,我想知道是什么与Very Good Cli导致这个问题。下次可能就没有别的选择了。

我刚刚看了一下,看起来onDragging回调表明lowerValueupperValuedynamic类型(https://github.com/loonix/another_xlider/blob/7fa4c15a4362d25ecf8e2552e27e5799024c715f/lib/another_xlider.dart#L27)。因此,您需要显式地指定动态类型以避免implicit_dynamic问题,并将值强制转换为double(如果您确定它应该是double)。以下代码报告最新版本的very_good_cli没有分析错误:

onDragging: (
handlerIndex,
dynamic lowerValue,
dynamic upperValue,
) {
setState(() {
_lowerValue = lowerValue as double;
_upperValue = upperValue as double;
});
},

尽管在3.4.0版本的文档中提到

从3.4.0-dev版本开始。3、step类型不再是double,其FlutterSliderStep

似乎最新的开发更新仍然没有公开,所以lowerValueupperValue仍然是double类型。在创建滑块之前先定义两个属性并在onDragging:函数中使用:

double _lowerValue;
double _upperValue;
...
FlutterSlider(
...
onDragging: (handlerIndex, lowerValue, upperValue) {
_lowerValue = lowerValue;
_upperValue = upperValue;
setState(() {});
},
...
);

相关内容

最新更新