feat:增加轮播图组件

This commit is contained in:
2025-07-24 23:00:37 +08:00
parent 502bb9df52
commit a2ed0f3d98
8 changed files with 287 additions and 221 deletions

View File

@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:food_hub_app/config/app_config.dart';
import 'package:food_hub_app/models/moment.dart';
import 'package:food_hub_app/widgets/common/image_preview.dart';
import 'package:food_hub_app/widgets/common/image.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';
class MomentCard extends StatelessWidget {
@@ -50,17 +50,19 @@ class MomentCard extends StatelessWidget {
Widget _buildAvatar(BuildContext context) {
if (moment.avatar!.isEmpty) {
return TDAvatar(
size: TDAvatarSize.medium,
type: TDAvatarType.customText,
shape: TDAvatarShape.circle,
backgroundColor: Theme.of(context).primaryColor,
text: moment.username?[0]);
size: TDAvatarSize.medium,
type: TDAvatarType.customText,
shape: TDAvatarShape.circle,
backgroundColor: Theme.of(context).primaryColor,
text: moment.username?[0],
);
} else {
return TDAvatar(
size: TDAvatarSize.medium,
type: TDAvatarType.normal,
fit: BoxFit.contain,
avatarUrl: '${AppConfig.baseApiUrl}/${moment.avatar}');
size: TDAvatarSize.medium,
type: TDAvatarType.normal,
fit: BoxFit.contain,
avatarUrl: '${AppConfig.baseApiUrl}/${moment.avatar}',
);
}
}
@@ -68,10 +70,7 @@ class MomentCard extends StatelessWidget {
Widget _buildNickname() {
return Text(
moment.username ?? "",
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w600,
),
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
);
}
@@ -104,9 +103,21 @@ class MomentCard extends StatelessWidget {
}
// 生成图片URL列表用于预览时切换
final List<String> imageUrls = moment.imageList
.map((path) => '${AppConfig.baseApiUrl}/$path')
.toList();
final List<String> imageUrls =
moment.imageList
.map((path) => '${AppConfig.baseApiUrl}/$path')
.toList();
void imageTapClick(int index) {
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) =>
ImagePreviewPage(images: imageUrls, initialIndex: index),
),
);
}
return GridView.count(
shrinkWrap: true,
@@ -119,32 +130,9 @@ class MomentCard extends StatelessWidget {
// 单个图片项:添加点击事件
return GestureDetector(
// 点击图片时,跳转到预览页面
onTap: () {
// 导航到全屏预览页面传入所有图片URL和当前点击的索引
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ImagePreviewPage(
images: imageUrls,
initialIndex: index,
),
),
);
},
onTap: () => imageTapClick(index),
// 原图片组件
child: ClipRRect(
borderRadius: BorderRadius.circular(8),
child: Image.network(
imageUrls[index],
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return Container(
color: Colors.grey[200],
child: const Icon(Icons.image, color: Colors.grey, size: 30),
);
},
),
),
child: networkImage(imageUrls[index]),
);
}),
);