From c81d1e4cbe1d2fc24a9fc525ee55c70142955f83 Mon Sep 17 00:00:00 2001 From: LiggMax Date: Tue, 21 Apr 2026 23:46:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(bbcode=5Fwidget):=20bbcode=5Fwidget?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=B7=BB=E5=8A=A0imageRadius=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 BBCodeWidget 添加 imageRadius 参数实现图片圆角效果,默认值为BorderRadius.all(Radius.circular(8)) --- lib/bbcode/bbcode_widget.dart | 82 +++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 33 deletions(-) diff --git a/lib/bbcode/bbcode_widget.dart b/lib/bbcode/bbcode_widget.dart index 50818eb46..98edc67a8 100644 --- a/lib/bbcode/bbcode_widget.dart +++ b/lib/bbcode/bbcode_widget.dart @@ -11,9 +11,13 @@ import 'generated/BBCodeParser.dart'; import 'generated/BBCodeLexer.dart'; class BBCodeWidget extends StatefulWidget { - const BBCodeWidget({super.key, required this.bbcode}); + const BBCodeWidget({ + super.key, required this.bbcode, + this.imageRadius = const BorderRadius.all(Radius.circular(8)) + }); final String bbcode; + final BorderRadiusGeometry imageRadius; @override State createState() => _BBCodeWidgetState(); @@ -120,13 +124,16 @@ class _BBCodeWidgetState extends State { ); } else if (e is BBCodeImg) { return WidgetSpan( - child: CachedNetworkImage( - imageUrl: e.imageUrl, - placeholder: (context, url) => - const SizedBox(width: 1, height: 1), - errorWidget: (context, error, stackTrace) { - return const Text('.'); - }, + child:ClipRRect( + borderRadius: widget.imageRadius, + child: CachedNetworkImage( + imageUrl: e.imageUrl, + placeholder: (context, url) => + const SizedBox(width: 1, height: 1), + errorWidget: (context, error, stackTrace) { + return const Text('.'); + }, + ), ), ); } else if (e is BBCodeBgm) { @@ -142,38 +149,47 @@ class _BBCodeWidgetState extends State { } url = 'https://bangumi.tv/img/smiles/tv/${e.id - 23}.gif'; return WidgetSpan( - child: CachedNetworkImage( - imageUrl: url, - placeholder: (context, url) => - const SizedBox(width: 1, height: 1), - errorWidget: (context, error, stackTrace) { - return const Text('.'); - }, + child: ClipRRect( + borderRadius: widget.imageRadius, + child: CachedNetworkImage( + imageUrl: url, + placeholder: (context, url) => + const SizedBox(width: 1, height: 1), + errorWidget: (context, error, stackTrace) { + return const Text('.'); + }, + ), ), ); } else if (e is BBCodeMusume) { return WidgetSpan( - child: CachedNetworkImage( - imageUrl: 'https://lain.bgm.tv/img/smiles/musume/musume_${e.id}.gif', - placeholder: (context, url) => - const SizedBox(width: 1, height: 1), - errorWidget: (context, error, stackTrace) { - return const Text('.'); - }, - width: 50, - height: 50, - ), + child: ClipRRect( + borderRadius: widget.imageRadius, + child: CachedNetworkImage( + imageUrl: 'https://lain.bgm.tv/img/smiles/musume/musume_${e.id}.gif', + placeholder: (context, url) => + const SizedBox(width: 1, height: 1), + errorWidget: (context, error, stackTrace) { + return const Text('.'); + }, + width: 50, + height: 50, + ), + ) , ); } else if (e is BBCodeSticker) { return WidgetSpan( - child: CachedNetworkImage( - imageUrl: 'https://bangumi.tv/img/smiles/${e.id}.gif', - placeholder: (context, url) => - const SizedBox(width: 1, height: 1), - errorWidget: (context, error, stackTrace) { - return const Text('.'); - }, - ), + child: ClipRRect( + borderRadius: widget.imageRadius, + child: CachedNetworkImage( + imageUrl: 'https://bangumi.tv/img/smiles/${e.id}.gif', + placeholder: (context, url) => + const SizedBox(width: 1, height: 1), + errorWidget: (context, error, stackTrace) { + return const Text('.'); + }, + ), + ) , ); } else { // e is Icon