2

我正在尝试使用 FlutterSlider (another_xlider)。IDE 中的以下代码将 lowerValue 和 upperValue 标记为Missing parameter type。系统提示我尝试添加显式类型,或从分析选项文件中删除隐式动态。后者我讨厌做。我已经尝试过前者,但显然我弄错了。

这是我当前的代码。

                            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)' can't be assigned to the parameter type '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(() {});
  },
)

到目前为止,谷歌搜索没有帮助。我错过了什么?

更新 我使用非常好的 Cli 创建了我的项目(请参阅https://verygood.ventures/blog/flutter-starter-app-very-good-core-cli)。在尝试调试时,我拉下了 another_xlider 项目并且问题没有出现。我使用 Very Good Cli 创建了一个全新的项目,复制了 MyApp 类,问题又出现了。因此,我将“非常好”项目中的所有依赖项复制到我的非 VGC 项目中并进行了更新。没问题。似乎 VGC 项目的创建方式存在一些基本问题,导致了问题。但是,由于时间至关重要,同时发现内置的 Flutter RangeSlider 满足了我的需求,我不再关心这个。也就是说,我想知道非常好的 Cli 是什么导致了这个问题。下次可能没有简单的替代方案。

4

2 回答 2

1

我只是看了看它看起来像onDragging回调指示lowerValue并且upperValue属于类型dynamichttps://github.com/loonix/another_xlider/blob/7fa4c15a4362d25ecf8e2552e27e5799024c715f/lib/another_xlider.dart#L27)。因此,您既需要明确指定动态类型以避免该implicit_dynamic问题,也需要将值转换为 a double(如果您确定它应该是 a double)。以下代码报告最新版本没有分析错误very_good_cli

onDragging: (
  handlerIndex,
  dynamic lowerValue,
  dynamic upperValue,
) {
  setState(() {
    _lowerValue = lowerValue as double;
    _upperValue = upperValue as double;
  });
},
于 2021-09-18T01:14:17.803 回答
0

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

从3.4.0-dev.3版本开始,step type不再是double,它的FlutterSliderStep

似乎最新的开发更新仍未公开,因此lowerValue仍然upperValuedouble类型。因此,只需在创建滑块之前定义两个属性并在函数内部使用它onDragging:

double _lowerValue;
double _upperValue;
...
FlutterSlider(
      ...
      onDragging: (handlerIndex, lowerValue, upperValue) {
        _lowerValue = lowerValue;
        _upperValue = upperValue;
        setState(() {});
      },
      ...
    );
于 2021-09-17T13:51:33.377 回答