微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果选择器未滚动,则 Flutter Cupertino Picker 在第一个项目上出错

如何解决如果选择器未滚动,则 Flutter Cupertino Picker 在第一个项目上出错

我正在构建的应用程序使用 Cupertino Picker 显示要选择的项目列表,在本例中为美国各州的名称。第一个项目认为列表中的第一个项目('ak'),当按下选择项目的按钮时,应用程序出错。 This only happens with the first item,when the picker isn't scrolled.如果滚动选择器并且用户返回到第一项,则它工作正常。

class StateSelectScreen extends StatefulWidget {
  static const String id = 'state_select_screen';

  @override
  _StateSelectScreenState createState() => _StateSelectScreenState();
}

class _StateSelectScreenState extends State<StateSelectScreen> {

  String selectedState = 'ak';
  bool showSpinner = false;

 DropdownButton<String> androidDropdown() {
    List<DropdownMenuItem<String>> dropdownItems = [];
    for (String state in statesList) {
      var newItem = DropdownMenuItem(
        child: Text(
          Usstates.getName(state).toupperCase(),textAlign: TextAlign.center,),value: state,);
      dropdownItems.add(newItem);
    }
    return DropdownButton<String>(
      dropdownColor: Colors.black26,autofocus: true,focusColor: Colors.black26,style: TextStyle(
        fontSize: k30PointFont,value: selectedState,items: dropdownItems,onChanged: (value) {
        setState(() {
          selectedState = value;
          getStateData();
        });
      },);
  }

  Cupertinopicker iOSPicker() {
    List<Text> pickerItems = [];
    for (String state in statesList) {
      pickerItems.add(Text(Usstates.getName(state.toupperCase())));
    }

    return Cupertinopicker(
      backgroundColor: kCupertinopickerBackgroundColor,itemExtent: kCupertinopickerItemExtent,onselecteditemchanged: (selectedindex) {
        setState(() {
          selectedState = Usstates.getName(statesList[selectedindex]);
          getStateData();
        });
      },children: pickerItems,);
  }

Map<String,dynamic> selectedStateData = {};
  bool isWaiting = false;

  void getStateData() async {
    isWaiting = true;
    try {
      var stateData = await GetData().getStateData(selectedState);
      isWaiting = false;
      setState(() {
        selectedStateData = stateData;
      });
    } catch (e) {
      print(e);
    }
  }

  @override
  void initState() {
    super.initState();
    getStateData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(kAppBarTitle),body: SafeArea(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,children: <Widget>[
            Flexible(
              child: Padding(
                padding: EdgeInsets.only(top: kStateSelectScreenFlexEdgeInsetsTop,bottom: kStateSelectScreenFlexEdgeBottom),child: Hero(
                  tag: kHeroTag,child: Container(
                    height: 200.0,child: Image.asset(kHeroImageAsset),Container(
              child: Column(
                children: <Widget>[
                  Container(
                    height: kStateSelectScreenContainerHeight,alignment: Alignment.center,padding: EdgeInsets.only(bottom: kStateSelectScreenContainerPaddingBottom),child: Platform.isIOS ? iOSPicker() : androidDropdown(),BottomButton(
                    onpressed: () {
                      Navigator.push(
                        context,MaterialPageRoute(
                          builder: (context) {
                            return ResultsScreen(
                              covidData: selectedStateData,location: selectedState,);
                          },);
                    },buttonTitle: kCheckStateResultsButtonTitle,SizedBox(
                    height: kHeight15,BottomButton(
                    onpressed: () {
                      Navigator.pushNamed(context,MenuScreen.id);
                    },buttonTitle: kMainMenuButtonTitle,],);
  }
}

解决方法

我重新创建了您的问题,但没有看到任何错误。 https://codepen.io/flakerimi/pen/poRywLZ

你说when the button to select the item is pressed,the app errors out.

哪个按钮?没看到

我已经添加了 scrollController: FixedExtentScrollController(initialItem: 1),,但我认为情况并非如此。

return CupertinoPicker(
      scrollController: FixedExtentScrollController(initialItem: 1),backgroundColor: Colors.white,itemExtent: 30,onSelectedItemChanged: (selectedIndex) {
        setState(() {
          selectedState = statesList[selectedIndex];
          print(selectedState);
        });
      },children: pickerItems,);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?