From 66556e14bb143fe768a83143e4ebaf7d0bb812cc Mon Sep 17 00:00:00 2001 From: Harshalekkala <105717718+lekkalaharsha@users.noreply.github.com> Date: Sat, 17 Aug 2024 16:58:39 +0530 Subject: [PATCH] version one --- lib/chatscreen.dart | 1 + lib/main.dart | 22 ++++++--- lib/screens/homepage.dart | 93 ++++++++++++++++++++++++++++++--------- 3 files changed, 89 insertions(+), 27 deletions(-) create mode 100644 lib/chatscreen.dart diff --git a/lib/chatscreen.dart b/lib/chatscreen.dart new file mode 100644 index 0000000..b9f78bb --- /dev/null +++ b/lib/chatscreen.dart @@ -0,0 +1 @@ +// TODO Implement this library. \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 76d0f15..5f1d215 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,18 +1,28 @@ - import 'package:camapp/screens/homepage.dart'; import 'package:flutter/material.dart'; import 'package:camapp/screens/constapi.dart'; import 'package:flutter_gemini/flutter_gemini.dart'; +import 'package:camera/camera.dart'; + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + + // Initialize the list of available cameras + final cameras = await availableCameras(); + final firstCamera = cameras.first; -void main() { + // Initialize Gemini API Gemini.init( apiKey: GEMINI_API_KEY, - ); - runApp(const MyApp()); + ); + + runApp(MyApp(camera: firstCamera)); } class MyApp extends StatelessWidget { - const MyApp({super.key}); + final CameraDescription camera; + + const MyApp({super.key, required this.camera}); @override Widget build(BuildContext context) { @@ -22,7 +32,7 @@ class MyApp extends StatelessWidget { colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), - home: HomeScreen(), + home: HomeScreen(), // Pass the camera to HomeScreen ); } } diff --git a/lib/screens/homepage.dart b/lib/screens/homepage.dart index 24b4170..c12b321 100644 --- a/lib/screens/homepage.dart +++ b/lib/screens/homepage.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:camera/camera.dart'; import 'package:image_picker/image_picker.dart'; -import 'chatscreen.dart'; // Assuming the Chatscreen is in another file +import 'chatscreen.dart'; // Import your chat screen here class HomeScreen extends StatefulWidget { @override @@ -9,13 +10,42 @@ class HomeScreen extends StatefulWidget { class _HomeScreenState extends State { int _selectedIndex = 0; + late CameraController _cameraController; + List? _cameras; - final List _screens = [ - Center(child: Text('Explore Screen')), - Center(child: Text('Food Labels Screen')), - Center(child: Text('Text Screen')), - Center(child: Text('Documents Screen')), - ]; + @override + void initState() { + super.initState(); + _initializeCamera(); + } + + Future _initializeCamera() async { + // Fetch the available cameras + _cameras = await availableCameras(); + if (_cameras!.isNotEmpty) { + // Initialize the first camera + _cameraController = CameraController( + _cameras!.first, + ResolutionPreset.high, + ); + + try { + await _cameraController.initialize(); + } catch (e) { + print('Error initializing camera: $e'); + } + + if (mounted) { + setState(() {}); + } + } + } + + @override + void dispose() { + _cameraController.dispose(); + super.dispose(); + } void _onItemTapped(int index) { setState(() { @@ -24,21 +54,40 @@ class _HomeScreenState extends State { } Future _openCamera(BuildContext context) async { - ImagePicker picker = ImagePicker(); - XFile? file = await picker.pickImage(source: ImageSource.camera); - - if (file != null) { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => Chatscreen(imagePath: file.path), - ), - ); + if (_cameraController.value.isInitialized) { + try { + XFile file = await _cameraController.takePicture(); + if (file != null) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => Chatscreen( + imagePath: file.path, + // prompt: _selectedIndex == 2 + // ? "Read the text" + // : "Describe the image?", + ), + ), + ); + } + } catch (e) { + print('Error capturing image: $e'); + } + } else { + print('Camera is not initialized'); } } @override Widget build(BuildContext context) { + // Define the screens to be displayed + final List _screens = [ + Center(child: Text('Explore Screen')), + Center(child: Text('Food Labels Screen')), + Center(child: Text('Text Screen')), + Center(child: Text('Documents Screen')), + ]; + return Scaffold( appBar: AppBar( title: Text('My App'), @@ -46,13 +95,15 @@ class _HomeScreenState extends State { actions: [ IconButton( icon: Icon(Icons.person_outline, color: Colors.blue), - onPressed: () { - print("hi"); - }, + onPressed: () {}, ), ], ), - body: _screens[_selectedIndex], + body: _selectedIndex == 0 && _cameraController.value.isInitialized + ? SizedBox.expand( + child: CameraPreview(_cameraController), + ) + : _screens[_selectedIndex], bottomNavigationBar: Container( color: Colors.black, padding: EdgeInsets.symmetric(vertical: 10),