Flutter中的圆形缓存网络图像

f2uvfpb9  于 2022-12-19  发布在  Flutter
关注(0)|答案(9)|浏览(228)
new Container(

                  width: 80.0,
                  height: 80.0,
                  decoration: new BoxDecoration(

                      shape: BoxShape.circle,
                      image: new DecorationImage(
                          fit: BoxFit.fill,
                          image: new NetworkImage(widget.profile_picture)))),

目前我有一个网络图像,但我想有一个圆形的缓存网络图像代替。

vktxenjb

vktxenjb1#

您可以使用

ClipRRect(borderRadius: BorderRadius.circular(10000.0),
child: CachedNetworkImage(...))

因为CachedNetworkImageProvider不是一个小部件,所以它不能代替CachedNetworkImage工作,这意味着它没有占位符小部件选项。

4bbkushb

4bbkushb2#

可以像这样使用CachedNetworkImageProvider

new Container(
    width: 80.0,
    height: 80.0,
    decoration: new BoxDecoration(
        shape: BoxShape.circle,
        image: new DecorationImage(
            fit: BoxFit.fill,
            image: new CachedNetworkImageProvider(widget.profile_picture),
            ),
          ),
        ),
q35jwt9p

q35jwt9p3#

您可以使用CachedNetworkImageimageBuilder

CachedNetworkImage(
    imageUrl: imageUrl,
    imageBuilder: (context, imageProvider) => Container(
        height: 100,
        width: 100,
        decoration: BoxDecoration(
            borderRadius: BorderRadius.all(Radius.circular(50)),
            image: DecorationImage(
                image: imageProvider,
                fit: BoxFit.cover,
            ),
        ),
    ),
    placeholder: (context, url) => placeholder,
    errorWidget: (context, url, error) => errorWidget,
)

为了获得圆形图像,请将宽度和高度设置为相同值,并将borderRadius设置为高度的一半。

l7wslrjt

l7wslrjt4#

你应该试试

ClipOval(
   child: CachedNetworkImage(
       imageUrl: url,
       fit: BoxFit.cover
   ),
)
dtcbnfnu

dtcbnfnu5#

边框半径和边框颜色
第一种方法

Container(
   decoration: BoxDecoration(
     border: Border.all(color: Palette.greyTextColor),
     borderRadius: BorderRadius.all(Radius.circular(8.0)),),
                  child:  ClipRRect(
                    borderRadius: BorderRadius.all(Radius.circular(8.0)),
                    child: CachedNetworkImage(

第二种方法

CachedNetworkImage(
                       imageBuilder: (context, imageProvider) => Container(
                         width: width,
                         decoration: BoxDecoration(
                           border: Border.all(color: Palette.greyTextColor),
                           borderRadius: BorderRadius.all(Radius.circular(8.0)),
                           image: DecorationImage(image: imageProvider),
                         ),
                       ),
r1zk6ea1

r1zk6ea16#

我用它来创建一个带有边框颜色的圆形缓存图像网络

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';

class CircularCachedNetworkImage extends StatelessWidget {
  final String imageURL;
  final double size;
  final Color borderColor;
  final BoxFit fit;
  final double borderWidth;

  const CircularCachedNetworkImage({
    required this.imageURL,
    required this.size,
    required this.borderColor,
    this.fit = BoxFit.fill,
    this.borderWidth = 2,
  });

  @override
  Widget build(BuildContext context) {
    return Container(
      width: size,
      height: size,
      decoration: BoxDecoration(
        color: borderColor,
        shape: BoxShape.circle,
      ),
      child: Padding(
        padding: EdgeInsets.all(borderWidth),
        child: Container(
          decoration: BoxDecoration(
            shape: BoxShape.circle,
            color: Colors.white, // inner circle color
          ),
          child: ClipRRect(
            borderRadius: BorderRadius.all(Radius.circular(300.0)),
            child: CachedNetworkImage(
              imageUrl: imageURL,
              fit: fit,
            ),
          ),
        ),
      ),
    );
  }
}

用法

CircularCachedNetworkImage(
   imageURL: "your image URL in here",
   size: 100,
   borderColor: Colors.green,
)
irtuqstp

irtuqstp7#

您只需要添加clipBehavior:裁剪。抗锯齿,

rkkpypqq

rkkpypqq8#

可以使用ClipOval代替ClipRRect

child: ClipOval(
          child: CachedNetworkImage(imageUrl : url),
 fit: BoxFit.cover,
        ),
z2acfund

z2acfund9#

我需要一个化身小部件,无论CachedNetworkImage是否为正方形,它都能保持圆形,并且不固定为一个大小,而是使用可用空间。

CircleAvatar(
    child: AspectRatio(
      aspectRatio: 1,
      child: ClipOval(
        child: CachedNetworkImage(
          imageUrl: imgUrl,
          fit: BoxFit.fill,
        ),
      ),
    ),
  )

相关问题