feat(mobile-app): 为3个主导航页面添加下拉刷新功能
- TradingPage (兑换): 添加 RefreshIndicator,刷新时重新加载钱包和收益数据 - RankingPage (龙虎榜): 添加 RefreshIndicator,刷新时 invalidate leaderboardStatusProvider - 列表视图和待开启状态视图均支持下拉刷新 - MiningPage (监控): 使用 LayoutBuilder + IntrinsicHeight 模式实现 - 刷新时并行加载用户数据、授权数据和钱包状态 注:ProfilePage 已有完整的下拉刷新实现,无需修改 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
a1aba14ccf
commit
5bacd21840
|
|
@ -224,6 +224,16 @@ class _MiningPageState extends ConsumerState<MiningPage> {
|
|||
);
|
||||
}
|
||||
|
||||
/// 下拉刷新
|
||||
Future<void> _onRefresh() async {
|
||||
debugPrint('[MiningPage] 下拉刷新');
|
||||
await Future.wait([
|
||||
_loadUserData(),
|
||||
_loadAuthorizationData(),
|
||||
_checkWalletStatus(),
|
||||
]);
|
||||
}
|
||||
|
||||
/// 开启监控
|
||||
void _startMonitor() {
|
||||
setState(() {
|
||||
|
|
@ -268,6 +278,17 @@ class _MiningPageState extends ConsumerState<MiningPage> {
|
|||
),
|
||||
),
|
||||
child: SafeArea(
|
||||
child: RefreshIndicator(
|
||||
onRefresh: _onRefresh,
|
||||
color: const Color(0xFFD4AF37),
|
||||
backgroundColor: Colors.white,
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return SingleChildScrollView(
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(minHeight: constraints.maxHeight),
|
||||
child: IntrinsicHeight(
|
||||
child: Column(
|
||||
children: [
|
||||
// 顶部标题栏
|
||||
|
|
@ -284,6 +305,12 @@ class _MiningPageState extends ConsumerState<MiningPage> {
|
|||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// 构建顶部标题栏
|
||||
|
|
|
|||
|
|
@ -88,6 +88,13 @@ class _RankingPageState extends ConsumerState<RankingPage> {
|
|||
),
|
||||
];
|
||||
|
||||
/// 下拉刷新
|
||||
Future<void> _onRefresh() async {
|
||||
debugPrint('[RankingPage] 下拉刷新');
|
||||
ref.invalidate(leaderboardStatusProvider);
|
||||
// TODO: 未来对接真实排行榜数据时,在此处 invalidate 排行榜数据 Provider
|
||||
}
|
||||
|
||||
/// 切换排行榜类型
|
||||
void _selectRankingType(RankingType type) {
|
||||
setState(() {
|
||||
|
|
@ -198,7 +205,17 @@ class _RankingPageState extends ConsumerState<RankingPage> {
|
|||
break;
|
||||
}
|
||||
|
||||
return Center(
|
||||
return RefreshIndicator(
|
||||
onRefresh: _onRefresh,
|
||||
color: const Color(0xFFD4AF37),
|
||||
backgroundColor: Colors.white,
|
||||
child: LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
return SingleChildScrollView(
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
child: ConstrainedBox(
|
||||
constraints: BoxConstraints(minHeight: constraints.maxHeight),
|
||||
child: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
|
|
@ -239,6 +256,11 @@ class _RankingPageState extends ConsumerState<RankingPage> {
|
|||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -461,7 +483,12 @@ class _RankingPageState extends ConsumerState<RankingPage> {
|
|||
|
||||
/// 构建排行榜列表
|
||||
Widget _buildRankingList() {
|
||||
return ListView.builder(
|
||||
return RefreshIndicator(
|
||||
onRefresh: _onRefresh,
|
||||
color: const Color(0xFFD4AF37),
|
||||
backgroundColor: Colors.white,
|
||||
child: ListView.builder(
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||
itemCount: _mockRankingData.length,
|
||||
itemBuilder: (context, index) {
|
||||
|
|
@ -470,6 +497,7 @@ class _RankingPageState extends ConsumerState<RankingPage> {
|
|||
child: _buildRankingItem(_mockRankingData[index]),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -218,6 +218,12 @@ class _TradingPageState extends ConsumerState<TradingPage> {
|
|||
}
|
||||
}
|
||||
|
||||
/// 下拉刷新
|
||||
Future<void> _onRefresh() async {
|
||||
debugPrint('[TradingPage] 下拉刷新');
|
||||
await _loadWalletData();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
|
|
@ -236,7 +242,12 @@ class _TradingPageState extends ConsumerState<TradingPage> {
|
|||
),
|
||||
),
|
||||
child: SafeArea(
|
||||
child: RefreshIndicator(
|
||||
onRefresh: _onRefresh,
|
||||
color: const Color(0xFFD4AF37),
|
||||
backgroundColor: Colors.white,
|
||||
child: SingleChildScrollView(
|
||||
physics: const AlwaysScrollableScrollPhysics(),
|
||||
child: Column(
|
||||
children: [
|
||||
// 顶部标题栏
|
||||
|
|
@ -274,6 +285,7 @@ class _TradingPageState extends ConsumerState<TradingPage> {
|
|||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue