1
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import '../../core/media/cover_cache.dart';
|
||||
import '../../core/theme/app_theme.dart';
|
||||
import '../../providers/auth_provider.dart';
|
||||
import '../../providers/notification_provider.dart';
|
||||
@@ -47,7 +48,7 @@ class _MineScreenState extends ConsumerState<MineScreen> {
|
||||
radius: 32,
|
||||
backgroundColor: AppColors.surface,
|
||||
backgroundImage: user.avatarUrl.isNotEmpty
|
||||
? CachedNetworkImageProvider(user.avatarUrl)
|
||||
? CachedNetworkImageProvider(user.avatarUrl, cacheManager: CoverCacheManager.I)
|
||||
: null,
|
||||
child: user.avatarUrl.isEmpty
|
||||
? Text(
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
|
||||
import '../../core/media/cover_cache.dart';
|
||||
import '../../core/network/api_exception.dart';
|
||||
import '../../core/theme/app_theme.dart';
|
||||
import '../../providers/auth_provider.dart';
|
||||
@@ -150,7 +151,7 @@ class _ProfileEditScreenState extends ConsumerState<ProfileEditScreen> {
|
||||
radius: 44,
|
||||
backgroundColor: AppColors.surface,
|
||||
backgroundImage: _avatarUrl.isNotEmpty
|
||||
? CachedNetworkImageProvider(_avatarUrl)
|
||||
? CachedNetworkImageProvider(_avatarUrl, cacheManager: CoverCacheManager.I)
|
||||
: null,
|
||||
child: _avatarUrl.isEmpty
|
||||
? const Icon(Icons.person_outline,
|
||||
|
||||
@@ -3,8 +3,10 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import '../../core/media/cover_cache.dart';
|
||||
import '../../core/theme/app_theme.dart';
|
||||
import '../../models/video_item.dart';
|
||||
import '../../providers/feed_provider.dart';
|
||||
import '../../providers/profile_provider.dart';
|
||||
|
||||
/// 他人公开主页(《03-接口文档》4.7/4.8,游客可看):
|
||||
@@ -88,7 +90,7 @@ class _ProfileHeader extends StatelessWidget {
|
||||
radius: 40,
|
||||
backgroundColor: AppColors.surface,
|
||||
backgroundImage: profile.avatarUrl.isNotEmpty
|
||||
? CachedNetworkImageProvider(profile.avatarUrl)
|
||||
? CachedNetworkImageProvider(profile.avatarUrl, cacheManager: CoverCacheManager.I)
|
||||
: null,
|
||||
child: profile.avatarUrl.isEmpty
|
||||
? Text(
|
||||
@@ -155,15 +157,20 @@ class _Stat extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _WorkCard extends StatelessWidget {
|
||||
class _WorkCard extends ConsumerWidget {
|
||||
const _WorkCard({required this.item});
|
||||
|
||||
final VideoItem item;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return GestureDetector(
|
||||
onTap: () => context.push('/search/play', extra: item),
|
||||
// 挂起首页池(保存断点 + 停所有槽位),恢复由 FeedScreen.didPopNext 统一处理
|
||||
onTap: () {
|
||||
final strategy = ref.read(activeFeedStrategyProvider);
|
||||
ref.read(feedProvider(strategy).notifier).pool.suspend();
|
||||
context.push('/search/play', extra: item);
|
||||
},
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
child: Stack(
|
||||
@@ -174,6 +181,7 @@ class _WorkCard extends StatelessWidget {
|
||||
child: item.coverUrl.isNotEmpty
|
||||
? CachedNetworkImage(
|
||||
imageUrl: item.coverUrl,
|
||||
cacheManager: CoverCacheManager.I,
|
||||
fit: BoxFit.cover,
|
||||
errorWidget: (_, __, ___) => const Icon(
|
||||
Icons.play_circle_outline,
|
||||
|
||||
@@ -3,10 +3,12 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
import '../../core/media/cover_cache.dart';
|
||||
import '../../core/network/api_exception.dart';
|
||||
import '../../core/theme/app_theme.dart';
|
||||
import '../../models/user_profile.dart';
|
||||
import '../../models/video_item.dart';
|
||||
import '../../providers/feed_provider.dart';
|
||||
import '../../providers/profile_provider.dart';
|
||||
import '../../services/user_service.dart';
|
||||
import '../../services/video_service.dart';
|
||||
@@ -77,8 +79,11 @@ class _GridCard extends ConsumerWidget {
|
||||
final bool editable;
|
||||
|
||||
/// 我的作品卡片点击:仅已发布可播放,其余状态提示原因
|
||||
void _onTap(BuildContext context) {
|
||||
void _onTap(BuildContext context, WidgetRef ref) {
|
||||
if (item.status == -1 || item.status == 2) {
|
||||
// 挂起首页池(保存断点 + 停所有槽位),恢复由 FeedScreen.didPopNext 统一处理
|
||||
final strategy = ref.read(activeFeedStrategyProvider);
|
||||
ref.read(feedProvider(strategy).notifier).pool.suspend();
|
||||
context.push('/search/play', extra: item);
|
||||
return;
|
||||
}
|
||||
@@ -158,7 +163,7 @@ class _GridCard extends ConsumerWidget {
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return GestureDetector(
|
||||
onTap: () => _onTap(context),
|
||||
onTap: () => _onTap(context, ref),
|
||||
onLongPress: editable ? () => _showManageSheet(context, ref) : null,
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
@@ -170,6 +175,7 @@ class _GridCard extends ConsumerWidget {
|
||||
child: item.coverUrl.isNotEmpty
|
||||
? CachedNetworkImage(
|
||||
imageUrl: item.coverUrl,
|
||||
cacheManager: CoverCacheManager.I,
|
||||
fit: BoxFit.cover,
|
||||
errorWidget: (_, __, ___) => const Icon(
|
||||
Icons.play_circle_outline,
|
||||
@@ -265,15 +271,20 @@ class HistoryScreen extends ConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class _HistoryTile extends StatelessWidget {
|
||||
class _HistoryTile extends ConsumerWidget {
|
||||
const _HistoryTile({required this.item});
|
||||
|
||||
final HistoryItem item;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
return ListTile(
|
||||
onTap: () => context.push('/search/play', extra: item.video),
|
||||
// 挂起首页池(保存断点 + 停所有槽位),恢复由 FeedScreen.didPopNext 统一处理
|
||||
onTap: () {
|
||||
final strategy = ref.read(activeFeedStrategyProvider);
|
||||
ref.read(feedProvider(strategy).notifier).pool.suspend();
|
||||
context.push('/search/play', extra: item.video);
|
||||
},
|
||||
leading: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(6),
|
||||
child: Container(
|
||||
@@ -283,6 +294,7 @@ class _HistoryTile extends StatelessWidget {
|
||||
child: item.video.coverUrl.isNotEmpty
|
||||
? CachedNetworkImage(
|
||||
imageUrl: item.video.coverUrl,
|
||||
cacheManager: CoverCacheManager.I,
|
||||
fit: BoxFit.cover,
|
||||
errorWidget: (_, __, ___) =>
|
||||
const Icon(Icons.play_circle_outline, size: 24),
|
||||
|
||||
Reference in New Issue
Block a user