You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.4 KiB
85 lines
2.4 KiB
2 weeks ago
|
import 'package:flutter/material.dart';
|
||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||
|
import 'package:get/get.dart';
|
||
|
import 'package:problem_check_system/modules/problem/controllers/problem_upload_controller.dart';
|
||
|
import 'package:problem_check_system/modules/problem/components/problem_card.dart';
|
||
|
|
||
|
class ProblemUploadPage extends StatelessWidget {
|
||
|
ProblemUploadPage({super.key});
|
||
|
|
||
|
final ProblemUploadController controller = Get.put(ProblemUploadController());
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
return Scaffold(
|
||
|
appBar: _buildAppBar(),
|
||
|
body: _buildBody(),
|
||
|
bottomNavigationBar: _buildBottomBar(),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// 构建顶部 AppBar
|
||
|
PreferredSizeWidget _buildAppBar() {
|
||
|
return AppBar(
|
||
|
title: Obx(() {
|
||
|
final selectedCount = controller.selectedProblems.length;
|
||
|
return Text(selectedCount > 0 ? '已选择$selectedCount项' : '问题上传');
|
||
|
}),
|
||
|
centerTitle: true,
|
||
|
leading: IconButton(icon: Icon(Icons.close), onPressed: () => Get.back()),
|
||
|
actions: [
|
||
|
TextButton(
|
||
|
onPressed: controller.selectAll,
|
||
|
child: Obx(
|
||
|
() => Text(
|
||
|
controller.allSelected.value ? '取消全选' : '全选',
|
||
|
style: TextStyle(color: Colors.blue),
|
||
|
),
|
||
|
),
|
||
|
),
|
||
|
],
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// 构建页面主体
|
||
|
Widget _buildBody() {
|
||
|
return Obx(() {
|
||
|
return ListView.builder(
|
||
|
itemCount: controller.problems.length,
|
||
|
itemBuilder: (context, index) {
|
||
|
final problem = controller.problems[index];
|
||
|
return ProblemCard(
|
||
|
problem,
|
||
|
// 传递视图类型,显示 Checkbox
|
||
|
viewType: ProblemCardViewType.checkbox,
|
||
|
);
|
||
|
},
|
||
|
);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// 构建底部操作栏
|
||
|
Widget _buildBottomBar() {
|
||
|
return Container(
|
||
|
padding: EdgeInsets.all(16.w),
|
||
|
decoration: BoxDecoration(
|
||
|
color: Colors.white,
|
||
|
border: Border(top: BorderSide(color: Colors.grey.shade300)),
|
||
|
),
|
||
|
child: ElevatedButton(
|
||
|
onPressed: controller.isUploadEnabled.value
|
||
|
? controller.uploadProblems
|
||
|
: null,
|
||
|
child: Text('点击上传'),
|
||
|
style: ElevatedButton.styleFrom(
|
||
|
backgroundColor: Colors.blue,
|
||
|
foregroundColor: Colors.white,
|
||
|
shape: RoundedRectangleBorder(
|
||
|
borderRadius: BorderRadius.circular(8.r),
|
||
|
),
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
}
|