import 'package:flutter/material.dart'; import 'views/main_layout.dart'; import 'package:provider/provider.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/viewmodels/skill_tree_viewmodel.dart'; import 'package:auto_gpt_flutter_client/viewmodels/api_settings_viewmodel.dart'; import 'package:auto_gpt_flutter_client/services/chat_service.dart'; import 'package:auto_gpt_flutter_client/services/task_service.dart'; import 'package:auto_gpt_flutter_client/services/benchmark_service.dart'; import 'package:auto_gpt_flutter_client/utils/rest_api_utility.dart'; // TODO: Update documentation throughout project for consistency void main() { runApp( MultiProvider( providers: [ Provider( create: (context) => RestApiUtility("http://127.0.0.1:8000"), ), ProxyProvider( update: (context, restApiUtility, chatService) => ChatService(restApiUtility), ), ProxyProvider( update: (context, restApiUtility, taskService) => TaskService(restApiUtility), ), ProxyProvider( update: (context, restApiUtility, taskService) => BenchmarkService(restApiUtility), ), ChangeNotifierProxyProvider( create: (context) => ApiSettingsViewModel( Provider.of(context, listen: false)), update: (context, restApiUtility, apiSettingsViewModel) => ApiSettingsViewModel(restApiUtility), ), ], child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // Fetch services from providers final chatService = Provider.of(context, listen: false); final taskService = Provider.of(context, listen: false); final benchmarkService = Provider.of(context, listen: false); taskService.loadDeletedTasks(); return MaterialApp( title: 'AutoGPT Flutter Client', theme: ThemeData( primarySwatch: Colors.blue, ), home: MultiProvider( providers: [ ChangeNotifierProvider( create: (context) => ChatViewModel(chatService)), ChangeNotifierProvider( create: (context) => TaskViewModel(taskService)), ChangeNotifierProvider( create: (context) => SkillTreeViewModel(benchmarkService), ), ], child: MainLayout(), ), ); } }