Flutter CircleAvatar-将Image对象用作(背景)图像/将其类型转换为ImageProvider

时间:2019-10-16 08:08:57

标签: image flutter dart avatar

我试图在我的应用程序主屏幕顶部显示一个CircleAvatar,但是我遇到了一个很愚蠢的问题。我无法弄清楚如何提供类Image(这是用户的属性)的对象作为ImageProvider,即CircleAvatar expects。是否有一种简单的方法可以在此处进行“类型转换”或人们已解决此问题的其他方法?

class _HomePageState extends State<PictureShowcaseHome>{
  Appuser appuser = new Appuser();
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: InkWell(          
          child: CircleAvatar(                               
                  backgroundImage: appuser.img, 
                  child: Text(appuser.name.substring(0,1).toUpperCase()),
                ) ,
        ),

...

为简化起见,假设Appuser仅具有以下属性:

class Appuser{
  String name;
  Image img;  
  Appuser(){
    this.name = "Unknown user";
    this.img = Image.asset('assets/imgs/default1.jpg');        
  }
}

我的想法是,资产中包含一个默认图像,但用户可以用自己的图像替换它(似乎是一个相当标准的想法)。我考虑过在AssetImage img;的构造函数中切换到img = new AssetImage('assets/imgs/default1.jpg');Appuser,但是这种情况似乎倒退了。当我在用户信息详细信息页面上显示用户图像时(我想到只是有一个ListTile( title: appuser.img,),),或者当我让用户使用相机拍摄新的用户图片时,这也使我陷入“对立”的问题。为此,最简单的方法是直接使用类Image的对象,而不是AssetImage的对象。

还是我以某种错误的方式看待这个问题?

2 个答案:

答案 0 :(得分:1)

Image.asset('assets/imgs/default1.jpg').image 

应该工作。

为清楚起见,Image类具有ImageProvider属性。只要将.image与任何给定的Image类一起使用,即可获取ImageProvider。这适用于Image.asset,.file,.network和.memory

答案 1 :(得分:1)

.image将为您提供所需的ImageProvider。

CircleAvatar(
        backgroundColor: Colors.red,
        radius: radius,
        child: CircleAvatar(
            radius: radius - 5,
            backgroundImage: Image.file(
              profileImage,
              fit: BoxFit.cover,
            ).image,
        ),
)