add screen camera wip
This commit is contained in:
parent
2f13f052c1
commit
4d5e31e109
@ -0,0 +1,142 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:camera/camera.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
Future<void> 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: Camera(
|
||||||
|
// Pass the appropriate camera to the TakePictureScreen widget.
|
||||||
|
camera: firstCamera,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// A screen that allows users to take a picture using a given camera.
|
||||||
|
class Camera extends StatefulWidget {
|
||||||
|
const Camera({
|
||||||
|
super.key,
|
||||||
|
required this.camera,
|
||||||
|
});
|
||||||
|
|
||||||
|
final CameraDescription camera;
|
||||||
|
|
||||||
|
@override
|
||||||
|
CameraState createState() => CameraState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class CameraState extends State<Camera> {
|
||||||
|
late CameraController _controller;
|
||||||
|
late Future<void> _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();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> getCamera() async {}
|
||||||
|
|
||||||
|
@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: const Text('Take a picture')),
|
||||||
|
// You must 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<void>(
|
||||||
|
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 const Center(child: CircularProgressIndicator());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
floatingActionButton: FloatingActionButton(
|
||||||
|
// 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 (!context.mounted) return;
|
||||||
|
|
||||||
|
// If the picture was taken, display it on a new screen.
|
||||||
|
await Navigator.of(context).push(
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => 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);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: const Icon(Icons.camera_alt),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A widget that displays the picture taken by the user.
|
||||||
|
class DisplayPictureScreen extends StatelessWidget {
|
||||||
|
final String imagePath;
|
||||||
|
|
||||||
|
const DisplayPictureScreen({super.key, required this.imagePath});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(title: const 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)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,15 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import "ItemMenu.dart";
|
import "ItemMenu.dart";
|
||||||
|
import "Camera.dart";
|
||||||
|
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '../classes/events.dart';
|
import '../classes/events.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:intl/date_symbol_data_local.dart';
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
|
import 'package:camera/camera.dart';
|
||||||
|
|
||||||
import '../variable/globals.dart' as globals;
|
import '../variable/globals.dart' as globals;
|
||||||
|
|
||||||
@ -57,6 +60,11 @@ class _MyHomePageState extends State<ListItemMenu> {
|
|||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> popCamera() async {
|
||||||
|
await availableCameras().then((value) => Navigator.push(context,
|
||||||
|
MaterialPageRoute(builder: (_) => Camera(camera: value.first))));
|
||||||
|
}
|
||||||
|
|
||||||
// build function
|
// build function
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -117,7 +125,7 @@ class _MyHomePageState extends State<ListItemMenu> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
floatingActionButton: FloatingActionButton(
|
floatingActionButton: FloatingActionButton(
|
||||||
onPressed: () {},
|
onPressed: popCamera,
|
||||||
backgroundColor: Colors.blue,
|
backgroundColor: Colors.blue,
|
||||||
tooltip: 'Recherche',
|
tooltip: 'Recherche',
|
||||||
child: const Icon(Icons.search, color: Colors.white),
|
child: const Icon(Icons.search, color: Colors.white),
|
||||||
|
@ -233,13 +233,37 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "1.12.0"
|
version: "1.12.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
|
path_provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
path_provider_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_android
|
||||||
|
sha256: bca87b0165ffd7cdb9cad8edd22d18d2201e886d9a9f19b4fb3452ea7df3a72a
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.6"
|
||||||
|
path_provider_foundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_foundation
|
||||||
|
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -39,6 +39,8 @@ dependencies:
|
|||||||
intl: ^0.19.0
|
intl: ^0.19.0
|
||||||
camera: ^0.11.0+1
|
camera: ^0.11.0+1
|
||||||
camera_web: ^0.3.3
|
camera_web: ^0.3.3
|
||||||
|
path_provider: ^2.1.3
|
||||||
|
path: ^1.9.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user