嗨,我是新来的,我有一些问题需要帮助。。
我的布局中有两个拾取器(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
中,调用第二个选取器FixedExtentScrollController
的jumpToItem(...)
。
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;
}
}