title: how to open camera on flutter
body: <p>can anyone help me to open camera on flutter app but i'm getting I/flutter (12909): NoSuchMethodError: The getter 'name' was called on null. I/flutter (12909): Receiver: null I/flutter (12909): Tried calling: name
  i dont know why</p>
  <p>here is my code</p>
  <pre><code>`import 'dart:async';
  import 'dart:io';
  
  import 'package:camera/camera.dart';
  import 'package:flutter/material.dart';
  
  Future&lt;void&gt; main() async {
    // Ensure that plugin services are initialized so that `availableCameras()`
    // can be called before `runApp()`
    WidgetsFlutterBinding.ensureInitialized();
  
    // Obtain a list of the available cameras on the device.
    final cameras = await availableCameras();
  
    // Get a specific camera from the list of available cameras.
    final firstCamera = cameras.first;
  
    runApp(
      MaterialApp(
        theme: ThemeData.dark(),
        home: TakePictureScreen(
          // Pass the appropriate camera to the TakePictureScreen widget.
          camera: firstCamera,
        ),
      ),
    );
  }
  
  // A screen that allows users to take a picture using a given camera.
  class TakePictureScreen extends StatefulWidget {
    final CameraDescription camera;
  
    const TakePictureScreen({
      Key key,
      @required this.camera,
    }) : super(key: key);
  
    @override
    TakePictureScreenState createState() =&gt; TakePictureScreenState();
  }
  
  class TakePictureScreenState extends State&lt;TakePictureScreen&gt; {
    CameraController _controller;
    Future&lt;void&gt; _initializeControllerFuture;
  
    @override
    void initState() {
      super.initState();
      // To display the current output from the Camera,
      // create a CameraController.
      _controller = CameraController(
        // Get a specific camera from the list of available cameras.
        widget.camera,
        // Define the resolution to use.
        ResolutionPreset.medium,
      );
  
      // Next, initialize the controller. This returns a Future.
      _initializeControllerFuture = _controller.initialize();
    }
  
    @override
    void dispose() {
      // Dispose of the controller when the widget is disposed.
      _controller.dispose();
      super.dispose();
    }
  
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(title: Text('Take a picture')),
        // Wait until the controller is initialized before displaying the
        // camera preview. Use a FutureBuilder to display a loading spinner
        // until the controller has finished initializing.
        body: FutureBuilder&lt;void&gt;(
          future: _initializeControllerFuture,
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              // If the Future is complete, display the preview.
              return CameraPreview(_controller);
            } else {
              // Otherwise, display a loading indicator.
              return Center(child: CircularProgressIndicator());
            }
          },
        ),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.camera_alt),
          // Provide an onPressed callback.
          onPressed: () async {
            // Take the Picture in a try / catch block. If anything goes wrong,
            // catch the error.
            try {
              // Ensure that the camera is initialized.
              await _initializeControllerFuture;
  
              // Attempt to take a picture and get the file `image`
              // where it was saved.
              final image = await _controller.takePicture();
  
              // If the picture was taken, display it on a new screen.
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) =&gt; DisplayPictureScreen(
                    // Pass the automatically generated path to
                    // the DisplayPictureScreen widget.
                    imagePath: image?.path,
                  ),
                ),
              );
            } catch (e) {
              // If an error occurs, log the error to the console.
              print(e);
            }
          },
        ),
      );
    }
  }
  
  // A widget that displays the picture taken by the user.
  class DisplayPictureScreen extends StatelessWidget {
    final String imagePath;
  
    const DisplayPictureScreen({Key key, this.imagePath}) : super(key: key);
  
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(title: Text('Display the Picture')),
        // The image is stored as a file on the device. Use the `Image.file`
        // constructor with the given path to display the image.
        body: Image.file(File(imagePath)),
      );
    }
  }
  </code></pre>
  <p>From <a href="https://flutter.dev/docs/cookbook/plugins/picture-using-camera#3-create-and-initialize-the-cameracontroller" rel="nofollow noreferrer">https://flutter.dev/docs/cookbook/plugins/picture-using-camera#3-create-and-initialize-the-cameracontroller</a></p>