本次提交实现了背诵模块的完整基础链路: 1. 新增词书、背单词接口层与对应数据模型 2. 完成背诵首页、章节列表页等核心页面开发 3. 实现音频播放、加载弹窗等通用组件 4. 配置路由跳转链路,替换旧版缓存传参方案 5. 对齐Vue端业务逻辑与UI样式
72 lines
2.1 KiB
Dart
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,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|