[英]Show countdown timer on camera in flutter
Here I am focus only functionality check below code may this is help full for you.在这里,我只关注下面代码的功能检查,这可能对您有帮助。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
import 'dart:async';
import 'dart:io';
List<CameraDescription> cameras = <CameraDescription>[];
Future<void> main() async {
// Fetch the available cameras before initializing the app.
try {
WidgetsFlutterBinding.ensureInitialized();
cameras = await availableCameras();
} on CameraException catch (e) {
print("${e.code} ${e.description}");
}
runApp(CameraApp());
}
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
CameraController? controller;
Timer? countdownTimer;
Duration myDuration = const Duration(seconds: 10);
@override
void initState() {
super.initState();
controller = CameraController(cameras[0], ResolutionPreset.max);
controller?.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {});
});
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
void startTimer() {
countdownTimer =
Timer.periodic(const Duration(seconds: 1), (_) => setCountDown());
}
void setCountDown() {
const reduceSecondsBy = 1;
setState(() {
final seconds = myDuration.inSeconds - reduceSecondsBy;
if (seconds < 0) {
countdownTimer!.cancel();
} else {
myDuration = Duration(seconds: seconds);
}
});
}
@override
Widget build(BuildContext context) {
if (!controller!.value.isInitialized) {
return Container();
}
String strDigits(int n) => n.toString().padLeft(2, '0');
final days = strDigits(myDuration.inDays);
// Step 7
final hours = strDigits(myDuration.inHours.remainder(24));
final minutes = strDigits(myDuration.inMinutes.remainder(60));
final seconds = strDigits(myDuration.inSeconds.remainder(60));
return MaterialApp(
home: Scaffold(
body: Center(
child: Stack(
alignment: Alignment.center,
children: [
CameraPreview(controller!),
Text(
'$minutes:$seconds',
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 30),
),
Padding(
padding: const EdgeInsets.only(top: 100),
child: ElevatedButton(
onPressed: startTimer, child: const Text("Start")),
)
],
),
),
),
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.