Flutter button does'nt execute function

45 Views Asked by At

When I click the Elevated Button, the camera should be displayed on screen, but it is not. When I press the button I am calling the getImage() function to display the camera.

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:logger/logger.dart';

class CreateScreen extends StatefulWidget {
  const CreateScreen({super.key});

  @override
  State<CreateScreen> createState() => _CreateScreenState();
}

class _CreateScreenState extends State<CreateScreen> {
  final Logger _logger = Logger();
  bool _scanning = false;
  XFile? _pickedImage;
  String? response;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          ElevatedButton(
            style: ElevatedButton.styleFrom(
              backgroundColor: const Color(0xFF165BAA),
              elevation: 0,
            ),
            onPressed: () async {
              setState(() {
                _scanning = true;
              });
              await getImage();
              setState(() {
                _scanning = false;
              });
            },
            child: const Text(
              'Pick image',
              style: TextStyle(
                color: Colors.white,
              ),
            ),
          ),
        ],
      ),
    );
  }

  Future<void> getImage() async {
    final pickedImage = await ImagePicker().pickImage(source: ImageSource.camera);
    if (pickedImage != null) {
      setState(() {
        _pickedImage = pickedImage;
      });
    }
  }
}

I added print statements to check if the function is called and it is.

1

There are 1 best solutions below

0
gretal On

I tried the code and it works perfectly. Ensure that you have added the necessary permissions in the AndroidManifest.xml file for Android and Info.plist for iOS.

For Android,

<uses-permission android:name="android.permission.CAMERA" />

For iOS,

<key>NSCameraUsageDescription</key>
<string>Camera permission is required to pick images</string>

Also use try and catch .

Future<void> getImage() async {
    try {
      final pickedImage = await ImagePicker().pickImage(source: ImageSource.camera);
      if (pickedImage != null) {
        setState(() {
          _pickedImage = pickedImage;
        });
      }
    } catch (e) {
      _logger.e('Error picking image: $e');
    }
  }
}