规定赛创意与完成质量评分允许为 0

This commit is contained in:
马梓彭 2026-09-22 16:55:13 +08:00
parent 18b1f36de5
commit 7c1063f707
4 changed files with 35 additions and 4 deletions

View File

@ -1295,6 +1295,8 @@ class _PerformancePanel extends StatelessWidget {
final value = await showScorePicker(
current: entry.value,
maximum: itemMaximum,
// 规定赛创意与完成质量评分允许为 0,需支持清零后正常提交。
includeZero: true,
);
if (value != null) {
controller.setPerformance(entry.key, value);

View File

@ -21,9 +21,12 @@ class SubmissionScoreDetail {
Future<double?> showScorePicker({
required double current,
required int maximum,
bool includeZero = false,
}) {
var selected = current.round().clamp(1, maximum);
final rowCount = (maximum / 5).ceil();
final minimum = includeZero ? 0 : 1;
var selected = current.round().clamp(minimum, maximum);
final itemCount = maximum - minimum + 1;
final rowCount = (itemCount / 5).ceil();
final dialogHeight = (285 + rowCount * 58).clamp(420, 650).toDouble();
return Get.dialog<double>(
StatefulBuilder(
@ -101,9 +104,9 @@ Future<double?> showScorePicker({
crossAxisSpacing: 20,
mainAxisExtent: itemExtent,
),
itemCount: maximum,
itemCount: itemCount,
itemBuilder: (context, index) {
final value = index + 1;
final value = index + minimum;
final active = value == selected;
return InkWell(
onTap: () =>

View File

@ -142,9 +142,14 @@ void main() {
itemCode: 'CQ_ACCURACY',
inputValue: 18.5,
);
const zeroScore = JudgeScoreItemInput(
itemCode: 'CQ_ACCURACY',
inputValue: 0,
);
const count = JudgeScoreItemInput(itemCode: 'T_FAILURE', countValue: 2);
expect(score.toJson(), {'itemCode': 'CQ_ACCURACY', 'inputValue': 18.5});
expect(zeroScore.toJson(), {'itemCode': 'CQ_ACCURACY', 'inputValue': 0.0});
expect(count.toJson(), {'itemCode': 'T_FAILURE', 'countValue': 2.0});
expect(score.toJson(), isNot(contains('totalScore')));
});

View File

@ -0,0 +1,21 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'package:yd_pattern_scoring_system/modules/scoring/widgets/scoring_dialogs.dart';
void main() {
testWidgets('规定赛评分选择器可以选择并返回 0 分', (tester) async {
Get.testMode = true;
await tester.pumpWidget(const GetMaterialApp(home: Scaffold()));
final result = showScorePicker(current: 0, maximum: 20, includeZero: true);
await tester.pumpAndSettle();
expect(find.text('0'), findsOneWidget);
await tester.tap(find.text('0'));
await tester.tap(find.text('确定'));
await tester.pumpAndSettle();
expect(await result, 0);
});
}