我想在我的Flutter应用程序上显示类似Instagram的故事,并希望通过使用用户头像周围的边框来显示用户上传的故事数量。
假设一个用户上传了3个故事,我将在头像图像周围显示3条圆形边框线,由相等数量的空格分隔&如果一个用户上传了80个故事,我将显示80条微小的圆形边框线,由相等数量的空格分隔。
我尝试使用pub.dev的插件来实现这一点,例如
仅举几个例子,但我似乎不能得到一个准确的计数空格和破折号,以满足上述要求。
下面是一个例子:
FDottedLine(
color: Colors.black,
strokeWidth: 2.0,
dottedLength: 30,
space: 4,
corner: FDottedLineCorner.all(100.0),
child: Padding(
padding: const EdgeInsets.all(3.0),
child: SizedBox.square(
dimension: 0.055.h,
child: ClipRRect(
borderRadius: BorderRadius.circular(100),
child: ImageBox.network(
photo: user.photo.getOrEmpty,
elevation: 2,
replacement: Image.asset(AppAssets.defaultUserImage(user.gender.getOrNull)),
borderRadius: BorderRadius.circular(100),
),
),
),
),
),
无论我如何调整dottedLength
和space
参数,我都不能得到相等数量的空格和破折号。
我也试过使用Path()
,CustomPainter()
,但我几乎不知道如何使用它。
任何想法,我可以实现这一点使用CustomPainter()
或插件?
3条答案
按热度按时间sbdsn5lh1#
感谢您发布所有尝试,因为它使我直接跳转到
CustomPaint
尝试可以工作(但测试不好)方法是drawArc
其逻辑是简单地根据楼层的数量画一个弧,并在留出一些空间后开始下一个弧
下面的代码是循环故事的数量,以绘制每个故事弧,并在添加一些值(故事之间的空间)到下一个弧位置的开始(在圆上)之后开始下一个故事弧(如果故事> 1)。
完整的代码和详细的解释:
lokaqttq2#
点击查看图片:
我们应该确定两件事
1.色宽
1.分离宽度
颜色宽度可通过以下功能测量
2 * PI * 半径>>圆的周长
SO >>周长减去所需的总分离像素,然后将结果除以总状态计数。
现在我们有每个状态的宽度相等,以适应圆边界
测量分离像素宽度
取决于状态编号,以更好地增强WhatsApp
现在我们将dotted_border包添加到我们的项目中并导入它
https://pub.dev/packages/dotted_border
假设我们上面有一些声明,它们是:
dashPattern:
我们有两种状态,一种状态或多种状态(多个状态)
完整代码:
ih99xse13#
您可以使用名为status_view的包:
友情链接:status_view
官方文档中的用法