Flutter卡片图片添加CircularProgressIndicator及类型错误解决
解决CachedNetworkImage类型不兼容问题并实现图片加载进度提示
这个错误的原因很明确:CachedNetworkImage是一个独立的Widget组件,而Ink.image的image参数要求的是ImageProvider<Object>类型的图片提供者,两者类型完全不匹配,直接赋值就会触发类型错误。
你要实现的图片加载进度提示完全可行,只需要调整布局结构,直接使用CachedNetworkImage作为布局的一部分即可,它自带的placeholder参数正好用来显示CircularProgressIndicator。
修改后的完整代码如下:
Card buildCard() { var heading = 'Existence'; var subheading = '11/11/2022'; var supportingText = 'Chapitre 18'; return Card( elevation: 5.0, child: Column( children: [ ListTile( title: Text(heading), subtitle: Text(subheading), trailing: Icon(Icons.favorite_outline), ), // 直接使用CachedNetworkImage作为容器子组件,替代原来的Ink.image Container( height: 350.0, child: CachedNetworkImage( imageUrl: "https://source.unsplash.com/random/800x600?existence", fit: BoxFit.cover, // 直接设置图片适配方式 placeholder: (context, url) => Container( alignment: Alignment.center, child: CircularProgressIndicator(), ), errorWidget: (context, url, error) => Icon(Icons.error), // 可选:添加错误状态提示 ), ), Container( padding: EdgeInsets.all(16.0), alignment: Alignment.centerLeft, child: Text(supportingText), ), ], ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.black45, title: Text(widget.title), ), body: Container( padding: EdgeInsets.all(25.0), child: SingleChildScrollView( scrollDirection: Axis.vertical, child: Column( children: [ buildCard(), ], ), ), ), ); }
关键调整点:
- 移除了原来的
Ink.image,直接将CachedNetworkImage放入高度为350的Container中,保持原布局的高度一致 - 给
CachedNetworkImage设置fit: BoxFit.cover,替代原来DecorationImage的适配效果 - 保留
placeholder配置,加载过程中会显示居中的CircularProgressIndicator - 可选添加了
errorWidget,用来处理图片加载失败的情况
内容的提问来源于stack exchange,提问作者Medivh
相关产品推荐
相关产品推荐

