Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何重置颤振选择器并强制设定值和位置?_Flutter_Dart_Input_Flutter Layout_User Input - Fatal编程技术网

Flutter 如何重置颤振选择器并强制设定值和位置?

Flutter 如何重置颤振选择器并强制设定值和位置?,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个空白选项,

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

我的布局(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),
      ),
    );
  }
导入“包装:颤振/材料.省道”;
进口“包装:颤振/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很好!祝你好运