如何重置颤动选择器并强制值和位置



嗨,我是新来的,我有一些问题需要帮助。。

我的布局中有两个拾取器(A(&(B( ,用户从选择器(A(中进行选择,并根据其选择调用自定义函数,以根据其选择获取选择器(B(的值。

一个问题是,当用户更改(A(时,(B(的值得到更新,但其位置没有更新,如果新数组更短,B甚至将上次用户输入的位置保持为空。

例如:如果用户从B中选择了第10个选项,然后没有找到他想要的,所以他回来更改了A,现在B中的数组只有8,我在屏幕上发现选择器(B(保持在空白单元格上的第10个位置,直到用户翻起2个空白选项,第8个选项开始出现,现在空白选项消失了。。我希望选择器B的位置在每次值更改后都变为0。

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class CasingDataScreen extends StatefulWidget {
@override
_CasingDataScreenState createState() => _CasingDataScreenState();
}
class _CasingDataScreenState extends State<CasingDataScreen> {
int pickerIndexA;
int pickerIndexB;
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView(
children: [
Row(
children: [
CupertinoPicker(
onSelectedItemChanged: (i) {
setState(() {
pickerIndexA = i;
});
},
children: _getPicker(['a', 'b', 'c']),
),
CupertinoPicker(
onSelectedItemChanged: (j) {},
children: _getPicker(myCustomFunction(pickerIndexA)),
),
],
),
],
),
),
);
}
}

List<Container> _getPicker(List<String> data) {
List<Container> pickerWidgets = [];
for (String item in data) {
pickerWidgets.add(
Container(
child: Text(item),
),
);
}

return pickerWidgets;}

这个怎么样。。。

在第一个选取器的onSelectedItemChanged中,调用第二个选取器FixedExtentScrollControllerjumpToItem(...)

class _CasingDataScreenState extends State<CasingDataScreen> {
final List<List<String>> _test = <List<String>>[
<String>['a1', 'a2', 'a3'],
<String>['b1', 'b2', 'b3', 'b4'],
<String>['c1', 'c2', 'c3', 'c4', 'c5'],
];
final FixedExtentScrollController _controller =
FixedExtentScrollController(initialItem: 0);
int pickerIndexA = 0;
int? pickerIndexB;
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView(
children: [
Row(
children: [
Expanded(
child: CupertinoPicker(
itemExtent: 50,
onSelectedItemChanged: (i) {
setState(() {
print('>>> pickerIndexA $i');
pickerIndexA = i;
});
_controller.jumpToItem(0);
},
children: _getPicker(['a', 'b', 'c']),
),
),
Expanded(
child: CupertinoPicker(
itemExtent: 50,
onSelectedItemChanged: (j) {},
children: _getPicker(
_test[pickerIndexA],
),
scrollController: _controller,
),
),
],
),
],
),
),
);
}
List<Container> _getPicker(List<String> data) {
print('>>>>> $data');
List<Container> pickerWidgets = [];
for (String item in data) {
pickerWidgets.add(
Container(
child: Text(item),
),
);
}
return pickerWidgets;
}
}

相关内容

  • 没有找到相关文章

最新更新