autogpt / frontend /lib /views /main_layout.dart
kakumusic's picture
Upload folder using huggingface_hub
b225a21 verified
raw
history blame
6.75 kB
import 'package:auto_gpt_flutter_client/viewmodels/settings_viewmodel.dart';
import 'package:auto_gpt_flutter_client/viewmodels/skill_tree_viewmodel.dart';
import 'package:auto_gpt_flutter_client/viewmodels/task_viewmodel.dart';
import 'package:auto_gpt_flutter_client/viewmodels/chat_viewmodel.dart';
import 'package:auto_gpt_flutter_client/views/settings/settings_view.dart';
import 'package:auto_gpt_flutter_client/views/side_bar/side_bar_view.dart';
import 'package:auto_gpt_flutter_client/views/skill_tree/skill_tree_view.dart';
import 'package:auto_gpt_flutter_client/views/task/task_view.dart';
import 'package:auto_gpt_flutter_client/views/chat/chat_view.dart';
import 'package:auto_gpt_flutter_client/views/task_queue/task_queue_view.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';
class MainLayout extends StatelessWidget {
final ValueNotifier<String> selectedViewNotifier = ValueNotifier('TaskView');
MainLayout({super.key});
@override
Widget build(BuildContext context) {
// Get the screen width
double width = MediaQuery.of(context).size.width;
// Access the various ViewModels from the context
final taskViewModel = Provider.of<TaskViewModel>(context);
final chatViewModel = Provider.of<ChatViewModel>(context);
final settingsViewModel = Provider.of<SettingsViewModel>(context);
// Initialize the width for the SideBarView
double sideBarWidth = 60.0;
// Initialize the width for the TaskView
double taskViewWidth = 280.0;
// Initialize the width for the SettingsView
double settingsViewWidth = 280.0;
// Calculate remaining width after subtracting the width of the SideBarView
double remainingWidth = width - sideBarWidth;
// Declare variables to hold the widths of SkillTreeView, TestQueueView, and ChatView
double skillTreeViewWidth = 0;
double testQueueViewWidth = 0;
double chatViewWidth = 0;
if (width > 800) {
return Row(
children: [
SizedBox(
width: sideBarWidth,
child: SideBarView(selectedViewNotifier: selectedViewNotifier)),
ValueListenableBuilder(
valueListenable: selectedViewNotifier,
builder: (context, String value, _) {
return Consumer<SkillTreeViewModel>(
builder: (context, skillTreeViewModel, _) {
if (value == 'TaskView') {
// TODO: Handle this state reset better
skillTreeViewModel.resetState();
chatViewWidth = remainingWidth - taskViewWidth;
return Row(
children: [
SizedBox(
width: taskViewWidth,
child: TaskView(viewModel: taskViewModel)),
SizedBox(
width: chatViewWidth,
child: ChatView(viewModel: chatViewModel))
],
);
} else if (value == 'SettingsView') {
// TODO: Handle this state reset better
skillTreeViewModel.resetState();
chatViewWidth = remainingWidth - settingsViewWidth;
return Row(
children: [
SizedBox(
width: settingsViewWidth,
// Render the SettingsView with the same width as TaskView
child: SettingsView(viewModel: settingsViewModel)),
SizedBox(
width: chatViewWidth,
// Render the ChatView next to the SettingsView
child: ChatView(viewModel: chatViewModel)),
],
);
} else {
if (skillTreeViewModel.selectedNode != null) {
// If TaskQueueView should be displayed
testQueueViewWidth = remainingWidth * 0.25;
skillTreeViewWidth = remainingWidth * 0.25;
chatViewWidth = remainingWidth * 0.5;
} else {
// If only SkillTreeView and ChatView should be displayed
skillTreeViewWidth = remainingWidth * 0.5;
chatViewWidth = remainingWidth * 0.5;
}
return Row(
children: [
SizedBox(
width: skillTreeViewWidth,
child:
SkillTreeView(viewModel: skillTreeViewModel)),
if (skillTreeViewModel.selectedNode != null)
SizedBox(
width: testQueueViewWidth,
child: TaskQueueView()),
SizedBox(
width: chatViewWidth,
child: ChatView(viewModel: chatViewModel)),
],
);
}
},
);
},
),
],
);
} else {
// For smaller screens, return a tabbed layout
// TODO: Include settings view for smaller screen sizes
return CupertinoTabScaffold(
tabBar: CupertinoTabBar(
items: const <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.person),
label: 'Tasks',
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.chat_bubble),
label: 'Chat',
),
],
),
tabBuilder: (BuildContext context, int index) {
CupertinoTabView? returnValue;
switch (index) {
case 0:
returnValue = CupertinoTabView(builder: (context) {
return CupertinoPageScaffold(
child: SafeArea(child: TaskView(viewModel: taskViewModel)),
);
});
break;
case 1:
returnValue = CupertinoTabView(builder: (context) {
return CupertinoPageScaffold(
child: SafeArea(child: ChatView(viewModel: chatViewModel)),
);
});
break;
}
return returnValue ??
CupertinoTabView(builder: (context) {
return CupertinoPageScaffold(
child: Container(), // Default empty container
);
});
},
);
}
}
}