天天看點

Flutter 圓形(頭像)圖檔的 4種實作圓角圖檔方案

測試圖檔:

var imgUrl =
    "https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1604650283&di=54b94bcbc1e70d6cbd16c65bbd563144&src=http://pic.51yuansu.com/pic/cover/00/23/77/57e1d8b92edba_610.jpg";
           

一、CircleAvatar

從widget名稱也可以看出來是實作圓形頭像的元件。

const CircleAvatar({
    Key key,
    this.child,
    this.backgroundColor,
    this.backgroundImage,
    this.onBackgroundImageError,
    this.foregroundColor,
    this.radius,
    this.minRadius,
    this.maxRadius,
  })
           
backgroundImage 為 ImageProvider,通過 AssetImage(本地圖檔)或 NetworkImage(網絡圖檔)擷取圖檔之後在背景顯示,進而形成圓形頭像
           

還有一個child,如果添加child 之後會覆寫顯示到圓形圖檔之上。

CircleAvatar(
              backgroundImage: AssetImage("images/default_img43.webp",),
            ),
            Padding(
              padding: EdgeInsets.only(left: 55),
              child: SizedBox(
                child: CircleAvatar(
                  radius: 15,
                  backgroundColor: Colors.red,
                  backgroundImage: AssetImage("images/default_img43.webp"),
                  child: Text("Test", style: styleBlack54Size16),
                ),
                width: 50,
                height: 50,
              ),
            ),
            Padding(
              padding: EdgeInsets.only(
                left: 120,
              ),
              child: SizedBox(
                child: CircleAvatar(
                  backgroundImage: NetworkImage(imgUrl),
                ),
                width: 55,
                height: 55,
              ),
            ),
           

效果圖

Flutter 圓形(頭像)圖檔的 4種實作圓角圖檔方案

二、Container + 内部屬性 DecorationImage

和 CircleAvatar 類似,也是通過背景加載圖檔形式顯示圖檔

Container(
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(100),
                  image: DecorationImage(
                    fit: BoxFit.cover,
                    image: NetworkImage(imgUrl),
                  ),
                ),
                width: 40,
                height: 40,
              )
           

注意:DecorationImage中 fit: BoxFit.cover 屬性要設定,沒有這個屬性設定圖檔如果不是長款等比,就不完全是圓形展示

DecorationImage 中的image也為ImageProvider,ImageProvider擷取通過AssetImage(本地圖檔)或 NetworkImage(網絡圖檔)得到

三、ClipOval +Image

Padding(
              padding: EdgeInsets.only(
                left: 180,
              ),
              child: ClipOval(
                child: Image.asset(
                  "images/default_img43.webp",
                  width: 55,
                  height: 55,
                ),
              ),
            ),
            Padding(
              padding: EdgeInsets.only(
                left: 240,
              ),
              child: ClipOval(
                child: Image.network(imgUrl,
                    width: 50, height: 50, fit: BoxFit.cover),
              ),
            ),
           

ClipOval  屬性child 通過 Image.asset 或者 Image.network添加圓形圖檔,fit 模式也要設定 為 fit: BoxFit.cover

四、ClipRRect 

從單詞意思是圓角矩形,可以通過計算圓角直徑和寬度相同實作圓形展示,實際和方法二實作類似,都是通過控制圓角實作圓形效果

ClipRRect(
                  borderRadius: BorderRadius.circular(30),
                  child: Image.network(imgUrl,
                      width: 60, height: 60, fit: BoxFit.cover))
           

圓角圖檔方案

上面四種圓形圖檔顯示實作中方法二和方法四是通過borderRadius 值 圓角大小實作圓形的,那麼圓角可以根據UI大小去設定即實作所要效果

Padding(
              padding: EdgeInsets.only(left: 300, top: 10),
              child: Container(
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(10),
                  image: DecorationImage(
                    fit: BoxFit.cover,
                    image: NetworkImage(imgUrl),
                  ),
                ),
                width: 50,
                height: 50,
              ),
            ),
            Padding(
              padding: EdgeInsets.only(left: 380, top: 10),
              child: ClipRRect(
                  borderRadius: BorderRadius.circular(10),
                  child: Image.network(imgUrl,
                      width: 60, height: 60, fit: BoxFit.cover)),
            ),
           

效果如下:

Flutter 圓形(頭像)圖檔的 4種實作圓角圖檔方案