1. 在開始之前,請先在加入這三個套件

camera

提供手機上的相機套件

path_provider

提供路徑來儲存照片

path

建立一個可以在使用任何裝置的路徑

2. 取得可用的 Camera

透過 camera 套件中的 availableCameras() 來取得可用的相機

final cameras = await availableCameras();

在此之前,我建議先建立一個 Screen

class StartTakePictureScreen extends StatelessWidget {
 
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Camera Example'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Take A Picture'),
          onPressed: () {
            this.pushToCamera(context);
          },
        ),
      ),
    );
  }
}

再加入以下方法,當相機取得後,就推到拍照頁面

void pushToCamera(BuildContext context) async {
    final cameras = await availableCameras();
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => TakePictureScreen(camera: cameras.first),
      ),
    );
 }

3. 建立 CameraController

一旦取得相機後,我們可以建立 CameraController,可以用來得知目前相機擷取到即時畫面,以及操作相機

  1. 首先建立一個 Statefull Widget 與他的 State
  2. State 新增一個變數來儲存 CameraController 的狀態
  3. State 新增一個變數來儲存來自 CameraController.initialize()Future 變數
  4. initState() 實例化 controller