mirror of
https://github.com/aljazceru/Auto-GPT.git
synced 2025-12-18 06:24:20 +01:00
This commit addresses a UI issue where the ListView items were overlapping with the Positioned widget in the TaskQueueView. The Positioned widget has been replaced with a more flexible layout using a Column widget to ensure proper spacing and positioning of elements on the screen. The ListView now takes up all available space above the buttons, preventing any overlap and enhancing the user experience.
141 lines
5.4 KiB
Dart
141 lines
5.4 KiB
Dart
import 'package:auto_gpt_flutter_client/models/benchmark/benchmark_task_status.dart';
|
|
import 'package:auto_gpt_flutter_client/viewmodels/chat_viewmodel.dart';
|
|
import 'package:auto_gpt_flutter_client/viewmodels/task_viewmodel.dart';
|
|
import 'package:auto_gpt_flutter_client/views/task_queue/leaderboard_submission_button.dart';
|
|
import 'package:auto_gpt_flutter_client/views/task_queue/leaderboard_submission_dialog.dart';
|
|
import 'package:auto_gpt_flutter_client/views/task_queue/test_suite_button.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:auto_gpt_flutter_client/viewmodels/skill_tree_viewmodel.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class TaskQueueView extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final viewModel = Provider.of<SkillTreeViewModel>(context);
|
|
|
|
// Node hierarchy
|
|
final nodeHierarchy = viewModel.selectedNodeHierarchy ?? [];
|
|
|
|
return Material(
|
|
color: Colors.white,
|
|
child: Column(
|
|
children: [
|
|
// The list of tasks (tiles)
|
|
Expanded(
|
|
child: ListView.builder(
|
|
itemCount: nodeHierarchy.length,
|
|
itemBuilder: (context, index) {
|
|
final node = nodeHierarchy[index];
|
|
|
|
// Choose the appropriate leading widget based on the task status
|
|
Widget leadingWidget;
|
|
switch (viewModel.benchmarkStatusMap[node]) {
|
|
case null:
|
|
case BenchmarkTaskStatus.notStarted:
|
|
leadingWidget = CircleAvatar(
|
|
radius: 12,
|
|
backgroundColor: Colors.grey,
|
|
child: CircleAvatar(
|
|
radius: 6,
|
|
backgroundColor: Colors.white,
|
|
),
|
|
);
|
|
break;
|
|
case BenchmarkTaskStatus.inProgress:
|
|
leadingWidget = SizedBox(
|
|
width: 24,
|
|
height: 24,
|
|
child: CircularProgressIndicator(
|
|
strokeWidth: 2,
|
|
),
|
|
);
|
|
break;
|
|
case BenchmarkTaskStatus.success:
|
|
leadingWidget = CircleAvatar(
|
|
radius: 12,
|
|
backgroundColor: Colors.green,
|
|
child: CircleAvatar(
|
|
radius: 6,
|
|
backgroundColor: Colors.white,
|
|
),
|
|
);
|
|
break;
|
|
case BenchmarkTaskStatus.failure:
|
|
leadingWidget = CircleAvatar(
|
|
radius: 12,
|
|
backgroundColor: Colors.red,
|
|
child: CircleAvatar(
|
|
radius: 6,
|
|
backgroundColor: Colors.white,
|
|
),
|
|
);
|
|
break;
|
|
}
|
|
|
|
return Container(
|
|
margin: EdgeInsets.fromLTRB(20, 5, 20, 5),
|
|
decoration: BoxDecoration(
|
|
color: Colors.white,
|
|
border: Border.all(color: Colors.black, width: 1),
|
|
borderRadius: BorderRadius.circular(4),
|
|
),
|
|
child: ListTile(
|
|
leading: leadingWidget,
|
|
title: Center(child: Text('${node.label}')),
|
|
subtitle:
|
|
Center(child: Text('${node.data.info.description}')),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
),
|
|
|
|
// Buttons at the bottom
|
|
Padding(
|
|
padding: EdgeInsets.all(20),
|
|
child: Column(
|
|
children: [
|
|
// TestSuiteButton
|
|
TestSuiteButton(
|
|
onPressed: viewModel.isBenchmarkRunning
|
|
? null
|
|
: () {
|
|
final chatViewModel = Provider.of<ChatViewModel>(
|
|
context,
|
|
listen: false);
|
|
final taskViewModel = Provider.of<TaskViewModel>(
|
|
context,
|
|
listen: false);
|
|
chatViewModel.clearCurrentTaskAndChats();
|
|
viewModel.runBenchmark(chatViewModel, taskViewModel);
|
|
},
|
|
),
|
|
SizedBox(height: 8), // Gap of 8 points between buttons
|
|
// LeaderboardSubmissionButton
|
|
LeaderboardSubmissionButton(
|
|
onPressed: viewModel.benchmarkStatusMap.isEmpty ||
|
|
viewModel.isBenchmarkRunning
|
|
? null
|
|
: () {
|
|
showDialog(
|
|
context: context,
|
|
builder: (context) => LeaderboardSubmissionDialog(
|
|
onSubmit: (teamName, repoUrl, commitSha) {
|
|
viewModel.submitToLeaderboard(
|
|
teamName, repoUrl, commitSha);
|
|
},
|
|
),
|
|
);
|
|
},
|
|
isDisabled: viewModel.isBenchmarkRunning ||
|
|
viewModel.benchmarkStatusMap.isEmpty,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|