Flutter 如何重置颤振选择器并强制设定值和位置?
嗨,我是新来的,我有一些问题需要帮助 我的布局(A)和(B)中有两个选择器,用户从选择器(A)中选择,并根据他的选择调用一个自定义函数,以根据他的选择获取选择器(B)的值 一个问题是,当用户更改(A)时,(B)的值会更新,但其位置不会更新,如果新数组较短,则B会将最后一个用户输入位置保留为空 示例:如果用户从B中选择,比如说第10个选项,然后没有找到他想要的,所以他返回并更改了A,现在B中的数组只有8,我在屏幕上发现的是,选择器(B)将其第10个位置保留在空白单元格中,直到用户翻转2个空白选项,第8个选项开始出现,现在空白的选择已经不复存在了。我希望选择器B的位置在每次值更改后变为0Flutter 如何重置颤振选择器并强制设定值和位置?,flutter,dart,input,flutter-layout,user-input,Flutter,Dart,Input,Flutter Layout,User Input,嗨,我是新来的,我有一些问题需要帮助 我的布局(A)和(B)中有两个选择器,用户从选择器(A)中选择,并根据他的选择调用一个自定义函数,以根据他的选择获取选择器(B)的值 一个问题是,当用户更改(A)时,(B)的值会更新,但其位置不会更新,如果新数组较短,则B会将最后一个用户输入位置保留为空 示例:如果用户从B中选择,比如说第10个选项,然后没有找到他想要的,所以他返回并更改了A,现在B中的数组只有8,我在屏幕上发现的是,选择器(B)将其第10个位置保留在空白单元格中,直到用户翻转2个空白选项,
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),
),
);
}
导入“包装:颤振/材料.省道”;
进口“包装:颤振/cupertino.dart”;
类CasingDataScreen扩展StatefulWidget{
@凌驾
_CasingDataScreenState createState()=>\u CasingDataScreenState();
}
类_CasingDataScreenState扩展状态{
int pickerIndexA;
int pickerIndexB;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
子:ListView(
儿童:[
划船(
儿童:[
库珀提诺皮克(
onSelectedItemChanged:(i){
设置状态(){
pickerIndexA=i;
});
},
儿童:_getPicker(['a','b','c']),
),
库珀提诺皮克(
onSelectedItemChanged:(j){},
子项:_getPicker(myCustomFunction(PickerIndex)),
),
],
),
],
),
),
);
}
}
列表\u获取选择器(列表数据){
列表选择器Widgets=[];
for(数据中的字符串项){
pickerWidgets.add(
容器(
子项:文本(项),
),
);
}
返回pickerwidget;
}这个怎么样
在第一个选择器的选择项更改上的中,调用第二个选择器的修复扩展滚动控制器的跳转项(…)
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;
}
}
class\u CasingDataScreenState扩展状态{
最终列表_测试=[
['a1','a2','a3'],
['b1','b2','b3','b4'],
[c1',c2',c3',c4',c5'],
];
最终固定扩展滚动控制器\u控制器=
FixedExtentScrollController(初始项:0);
int pickerIndexA=0;
int?pickerIndexB;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
子:ListView(
儿童:[
划船(
儿童:[
扩大(
孩子:CupertinoPicker(
项目范围:50,
onSelectedItemChanged:(i){
设置状态(){
打印('>>>pickerIndexA$i');
pickerIndexA=i;
});
_控制器。跳线项(0);
},
儿童:_getPicker(['a','b','c']),
),
),
扩大(
孩子:CupertinoPicker(
项目范围:50,
onSelectedItemChanged:(j){},
儿童:_getPicker(
_测试[PickerIndex],
),
scrollController:\u控制器,
),
),
],
),
],
),
),
);
}
列表(列表数据){
打印(“>>>>$data”);
列表选择器Widgets=[];
for(数据中的字符串项){
pickerWidgets.add(
容器(
子项:文本(项),
),
);
}
返回pickerwidget;
}
}
< /代码>我添加到两个拾取器ScLoopDealth: FixedExtentScrollController(IngalIt: 0),但是没有任何解决办法,可以接受的是在任何时候删除B中的空白选项,并获取B的当前值。用户可以自由更改,而不必从0开始。问题在于选项为空。由于某些原因,它无法与我一起工作,我还将_controller.jumpToItem(0);在单独的功能中,但当线路到达_controller.jumpToItem(0)时;它不会执行并跳过函数的其余行!!终于成功了,只是从设备上删除了应用程序,并安装了一个干净的构建,它终于成功了。非常感谢,你太棒了。@KhaledMahmoud很好!祝你好运