Files
崔宝新 27eba92315 feat(recite): 完成背诵模块基础框架与核心页面开发
本次提交实现了背诵模块的完整基础链路:
1. 新增词书、背单词接口层与对应数据模型
2. 完成背诵首页、章节列表页等核心页面开发
3. 实现音频播放、加载弹窗等通用组件
4. 配置路由跳转链路,替换旧版缓存传参方案
5. 对齐Vue端业务逻辑与UI样式
2026-09-11 14:38:47 +08:00

72 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
/// ============================================================
/// 【ReciteLoading】模态 loading —— 对标 uni.showLoading({mask:true})
///
/// 用于「切换中...」「正在提交」「加载中...」:
/// ReciteLoading.show(context, '切换中...');
/// ...await...
/// if (mounted) ReciteLoading.hide(context);
///
/// 用根 Navigator 弹出,可盖在底部 tabbar 之上;barrier 拦截所有点击。
/// ============================================================
class ReciteLoading {
ReciteLoading._();
static void show(BuildContext context, String text) {
showDialog<void>(
context: context,
barrierDismissible: false,
useRootNavigator: true,
builder: (_) => _ReciteLoadingView(text: text),
);
}
static void hide(BuildContext context) {
final nav = Navigator.of(context, rootNavigator: true);
if (nav.canPop()) nav.pop();
}
}
class _ReciteLoadingView extends StatelessWidget {
const _ReciteLoadingView({required this.text});
final String text;
@override
Widget build(BuildContext context) {
return Center(
child: Container(
padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 20.h),
decoration: BoxDecoration(
color: Colors.black.withValues(alpha: 0.75),
borderRadius: BorderRadius.circular(12.r),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const SizedBox(
width: 24,
height: 24,
child: CircularProgressIndicator(
strokeWidth: 2.5,
valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
),
),
SizedBox(height: 12.h),
Text(
text,
style: TextStyle(
fontSize: 14.sp,
color: Colors.white,
decoration: TextDecoration.none,
),
),
],
),
),
);
}
}