惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
V
Visual Studio Blog
C
Check Point Blog
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
量子位
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
M
MIT News - Artificial intelligence
爱范儿
爱范儿
B
Blog RSS Feed
MyScale Blog
MyScale Blog
H
Help Net Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
L
LangChain Blog
D
Docker

zodream梦想开源/个人编程日记

文件解析笔记-zodream梦想开源/个人编程日记 密码本开发笔记之读写与保存-zodream梦想开源/个人编程日记 SkiaSharp 把 pixel byte[] 转成 SKBitmap-zodream梦想开源/个人编程日记 nas 使用 Docker 安装 gogs-zodream梦想开源/个人编程日记 复制 android 手机中的文件到电脑-zodream梦想开源/个人编程日记 周报:寻找优质的周刊-zodream梦想开源/个人编程日记 开发日志:对Markdown的代码块新增引用来源支持-zodream梦想开源/个人编程日记 周报:怎么写技术类的教程文章-zodream梦想开源/个人编程日记 css display:flex 布局尺寸超出问题-zodream梦想开源/个人编程日记 周报:SEO优化的思考-zodream梦想开源/个人编程日记 Edge 浏览器不适用 Edge Image Viewer 打开图片 -zodream梦想开源/个人编程日记 SEO 学习笔记(一) 内容来源-zodream梦想开源/个人编程日记 PHP 实现双因素身份认证(2FA)-zodream梦想开源/个人编程日记 WPF MVVM 获取List 多选数据-zodream梦想开源/个人编程日记 Burp Suite 抓包-zodream梦想开源/个人编程日记 使用 indexnow 注意事项-zodream梦想开源/个人编程日记 Godot 使用字体图标 例如: Iconfont、FontAwesome-zodream梦想开源/个人编程日记 angular 15 对指定页面进行访问限制-zodream梦想开源/个人编程日记 CSS 使用 column-count 实现瀑布流出现内容分割的解决办法-zodream梦想开源/个人编程日记 input 确认按键事件在手机端不生效-zodream梦想开源/个人编程日记 C# 使用socket 进行通讯-zodream梦想开源/个人编程日记 Maui开发中Windows应用开启管理员权限-zodream梦想开源/个人编程日记 Maui 中自定义控件-zodream梦想开源/个人编程日记 angular 14 使用 ng-template 实现tree 结构显示-zodream梦想开源/个人编程日记 c# 动态安装和卸载dll-zodream梦想开源/个人编程日记 慎用 CompositionTarget.Rendering-zodream梦想开源/个人编程日记 c# 重写 c++ 程序笔记:数据初始化-zodream梦想开源/个人编程日记 源码编译 aseprite-zodream梦想开源/个人编程日记 记录一下字符串分隔split各语言之间的不同-zodream梦想开源/个人编程日记 c# Gzip解码无头内容-zodream梦想开源/个人编程日记
flutter CupertinoPicker 使用不显示-zodream梦想开源/个人编...
zodream · 2020-09-02 · via zodream梦想开源/个人编程日记

CupertinoPicker是一个ios风格的齿轮滚动的选择器

CupertinoPicker.builder(
    itemExtent: 40,
    scrollController: FixedExtentScrollController(initialItem: 0),
    backgroundColor: Colors.white,
    onSelectedItemChanged: (index) {
        // 选择
    },
    itemBuilder: (context, index) =>
        // items[index] 返回一个部件显示每一项的内容,
    childCount: items.length,
)

1234567891011

注意事项

在使用 CupertinoPicker 写地区选择器时,发现数据显示不出来,但使用 r 更新就能正常显示。

查找原因:

  1. 数据分为三列:即省、市、区,
  2. 数据都是网络请求的,因此第一次初始化的时候,数据长度是零。

刚开始,以为是没有setState(() {}); 更新,但多次设定也没用。

然后发现是因为 CupertinoPicker 接受数据长度为零的数据就没办法正常显示。

因此通过判断直接把数据长度为零的不生成CupertinoPicker,具体原因不知。

最终解决方案:

  List<List<Region>> regionItems = [];
  List<int> regionIndex = [];
  List<FixedExtentScrollController> regionController = [];

  Widget buildPickers() {
    var items = <Widget>[];
    for (var i = 0; i < regionController.length; i++) {
        // 判断是数据的长度,小于1的那一列就不显示
      if (regionItems[i].length < 1) {
        continue;
      }
      items.add(Expanded(
        child: CupertinoPicker.builder(
          itemExtent: 40,
          scrollController: regionController[i],
          backgroundColor: Colors.white,
          onSelectedItemChanged: (index) {
            changeRegion(i, index);
          },
          itemBuilder: (context, index) =>
              buildTextItem(regionItems[i][index].name),
          childCount: regionItems[i].length,
        ),
      ));
    }

    return Expanded(
      child: Row(
        children: items,
      ),
    );
  }

  Widget buildTextItem(String text) {
    return Container(
      color: Colors.white,
      alignment: Alignment.center,
      padding: const EdgeInsets.symmetric(horizontal: 5.0),
      child: Text(
        text,
        textAlign: TextAlign.center,
        style: const TextStyle(fontSize: 14.0),
      ),
    );
  }

123456789101112131415161718192021222324252627282930313233343536373839404142434445

转载请保留原文链接: https://zodream.cn/blog/id/183.html