You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何配置CupertinoPicker初始化选项?默认选中第二项的方法

Flutter CupertinoPicker 默认选中第二项的两种实现方式

要让CupertinoPicker默认选中第二项(索引为1,列表索引从0开始计数),主要有两种实现方式:


方式一:直接使用selectedItem参数

这是最简洁的实现方式,直接给CupertinoPicker添加selectedItem属性并设置为1即可:

showCupertinoModalPopup(
  context: context,
  builder: (c) {
    return SizedBox(
      height: 300,
      child: Material(
        child: CupertinoPicker(
          itemExtent: 60,
          selectedItem: 1, // 默认选中第二项(索引1)
          onSelectedItemChanged: (index) {},
          children: List.generate(
            30,
            (v) {
              return ListTile(
                title: const Text('data'),
                subtitle: Text('$v'), // 修正原代码变量名错误,用生成器参数v显示索引
              );
            },
          ),
        ),
      ),
    );
  },
);

方式二:使用FixedExtentScrollController

如果需要后续手动控制选中项、监听滚动状态等更灵活的操作,可以用FixedExtentScrollController初始化时指定初始选中索引:

showCupertinoModalPopup(
  context: context,
  builder: (c) {
    // 创建控制器,指定初始选中第二项(索引1)
    final pickerController = FixedExtentScrollController(initialItem: 1);
    return SizedBox(
      height: 300,
      child: Material(
        child: CupertinoPicker(
          itemExtent: 60,
          controller: pickerController, // 绑定控制器
          onSelectedItemChanged: (index) {},
          children: List.generate(
            30,
            (v) {
              return ListTile(
                title: const Text('data'),
                subtitle: Text('$v'),
              );
            },
          ),
        ),
      ),
    );
  },
);

补充说明:

  • 原代码中subtitle: Text('$c')存在变量名错误,c是builder的上下文参数,应该用列表生成器里的v来展示索引值。
  • 若在StatefulWidget中使用控制器,需在dispose()方法中调用pickerController.dispose()释放资源;但弹窗builder内创建的控制器会随弹窗关闭自动销毁,无需手动处理。

内容的提问来源于stack exchange,提问作者laterday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:08:15