Flutter'da Yuvarlatılmış Köşeler Görüntüsü


123

Filmler hakkında bilgi listesi yapmak için Flutter kullanıyorum. Şimdi soldaki kapak resminin yuvarlak köşeli bir resim olmasını istiyorum. Aşağıdakileri yaptım ama işe yaramadı. Teşekkürler!

    getItem(var subject) {
    var row = Container(
      margin: EdgeInsets.all(8.0),
      child: Row(
        children: <Widget>[
          Container(
            width: 100.0,
            height: 150.0,
            decoration: BoxDecoration(
              borderRadius: BorderRadius.all(Radius.circular(8.0)),
              color: Colors.redAccent,
            ),
            child: Image.network(
              subject['images']['large'],
              height: 150.0,
              width: 100.0,
            ),
          ),
        ],
      ),
    );
    return Card(
      color: Colors.blueGrey,
      child: row,
    );
  }

aşağıdaki gibi

görüntü açıklamasını buraya girin


Bu yöntemin neden işe yaramadığını anladınız mı?
Martin

Yanıtlar:


357

Kullanın ClipRRectmükemmel çalışacak

ClipRRect(
    borderRadius: BorderRadius.circular(8.0),
    child: Image.network(
        subject['images']['large'],
        height: 150.0,
        width: 100.0,
    ),
)

9
Teşekkürler ! Dediğin gibi yaptım ve sonra ekledi fit: BoxFit.fill, oldukça iyi görünüyor.
Liu Silong

2
Teşekkürler - clipRect'ed görüntüye nasıl renkli bir kenarlık oluşturacağınıza dair herhangi bir fikriniz var mı?
iKK

3
@iKK - Uygun kenarlıklı bir BoxDecoration ile kapsayıcı Wrap it / borderRadius şekilde sahne: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(3.0), border: Border.all(color: Colors.grey[300])), child: ClipRRect( borderRadius: BorderRadius.circular(3.0), child: Image.network( uri, fit: BoxFit.fill, width: imageDimension, height: imageDimension, ), ), )
Daniel Allen

1
teşekkürler, bir ipucu: yalnızca aynı genişlik ve yükseklikte çalışır
Álvaro Agüero

50

Ayrıca kullanabilirsiniz CircleAvatarflutter'la geldiği,

CircleAvatar(
  radius: 20,
  backgroundImage: NetworkImage('https://via.placeholder.com/140x100')
)

2
Bu en iyi cevap. Ekstra yaptımbackgroundImage: member[index].picture == null ? Image(image: AssetImage('assests/no-image.png')) : NetworkImage( member[index].picture,
saviour123

@ saviour123 yuvarlatılmış köşeli her resim bir 'avatar' değildir. Kabul edilen, genel cevaptır.
nipunasudha

Sorunlu olan bu widget ile yükseklik veya genişlik ayarlanamıyor.
papillon

38

Kullanarak ClipRRectkod yazmanız gerekir BorderRadius, bu nedenle tam döngüsel şeylere ihtiyacınız varsa, ClipOvalbunun yerine kullanın.

ClipOval(
  child: Image.network(
    "image_url",
    height: 100,
    width: 100,
    fit: BoxFit.cover,
  ),
),

2
En basit cevap!
Alvin Konda

1
alt resim kare değilse, bu çözümde eliptik olacaktır.
Bilal Şimşek

29

Bunun yerine şunu deneyin, benim için çalıştı:

Container(
  width: 100.0,
  height: 150.0,
  decoration: BoxDecoration(
    image: DecorationImage(
        fit: BoxFit.cover, image: NetworkImage('Path to your image')),
    borderRadius: BorderRadius.all(Radius.circular(8.0)),
    color: Colors.redAccent,
  ),
),

Aswerınız kesinlikle yardımcı oluyor, teşekkürler! Peki ya bir kabın içeriği sadece bir görüntü değil, aynı zamanda bir widget ise? Herhangi bir fikir?
Oleksandr

13
   Container(
      width: 48.0,
      height: 48.0,
      decoration: new BoxDecoration(
        shape: BoxShape.circle,
        image: new DecorationImage(
            fit: BoxFit.fill,
            image: NetworkImage("path to your image")
        )
    )),

5

Görüntü için bunu kullanın

ClipOval(
    child: Image.network(
        'https://url to your image',
        fit: BoxFit.fill,
    ),
);

Varlık Resmi için bunu kullanın

ClipOval(
    child: Image.asset(
        'Path to your image',
        fit: BoxFit.cover,
    ),
)

1
Bunu zaten cevap olarak kullandım, yararlı hiçbir şey sağlamadınız. -1 benden.
CopsOnRoad

4

Flutter ve malzeme temasının yeni sürümü ile, kabını doldurmayan bir görüntüye sahip olmak için "Padding" widget'ını da kullanmanız gerekir.

Örneğin, AppBar'a yuvarlak bir görüntü eklemek istiyorsanız, dolgu kullanmalısınız, aksi takdirde görüntünüz her zaman AppBar kadar yüksek olacaktır.

Umarım bu birine yardımcı olur

InkWell(
        onTap: () {
            print ('Click Profile Pic');
        },
        child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: ClipOval(
                child: Image.asset(
                    'assets/images/profile1.jpg',
                ),
            ),
        ),
    ),

3

ClipRRect'i şu şekilde kullanabilirsiniz:

  Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: ClipRRect(
                    borderRadius: BorderRadius.circular(25),
                    child: Image.asset(
                      'assets/images/pic13.jpeg',
                      fit: BoxFit.cover,
                    ),
                  ),
                )

Yarıçapınızı veya kullanıcıyı yalnızca topLeft veya alt sol için aşağıdaki gibi ayarlayabilirsiniz:

Padding(
              padding: const EdgeInsets.all(8.0),
              child: ClipRRect(
                borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(25)
                ,bottomLeft: Radius.circular(25)),
                child: Image.asset(
                  'assets/images/pic13.jpeg',
                  fit: BoxFit.cover,
                ),
              ),
            )

2

ClipRRect'i fit görüntü özelliği ile kullanın: BoxFit.fill

ClipRRect(
          borderRadius: new BorderRadius.circular(10.0),
          child: Image(
            fit: BoxFit.fill,
            image: AssetImage('images/image.png'),
            width: 100.0,
            height: 100.0,
          ),
        ),

1

ClipRRect'i kullanın, sorununuzu çözecektir.

      ClipRRect(
              borderRadius: BorderRadius.all(Radius.circular(10.0)),
              child: Image.network(
                Constant.SERVER_LINK + model.userProfilePic,
                fit: BoxFit.cover,
              ),
            ),

0

Bu daire içinde Bu Yolu kullanın resim de çalışıyor + ayrıca ağ görüntüsü için ön yükleyiciniz var:

new ClipRRect(
     borderRadius: new BorderRadius.circular(30.0),
     child: FadeInImage.assetNetwork(
          placeholder:'asset/loader.gif',
          image: 'Your Image Path',
      ),
    )

0

Bunu deneyin, iyi çalışıyor.

Container(
  height: 220.0,
  width: double.infinity,
  decoration: BoxDecoration(
    borderRadius: new BorderRadius.only(
      topLeft: Radius.circular(10),
       topRight: Radius.circular(10),
    ),
    image: DecorationImage(
      fit: BoxFit.fill,
      image: NetworkImage(
        photoUrl,
      ),
     ),
   ),
);

-1

Kullanıcı dekorasyonu Bir kap için resim.

  @override
  Widget build(BuildContext context) {
    final alucard = Container(
        decoration: new BoxDecoration(
        borderRadius: BorderRadius.circular(10),
          image: new DecorationImage(
              image: new AssetImage("images/logo.png"),
              fit: BoxFit.fill,
          )
        )
    );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.