Мне нужно изменить цвет пользовательской краски через определенные промежутки времени (например, Timer.periodic) внутри приложения камеры с помощью foregroundpainter.Как мне этого добиться?Я могу напечатать «таймер» внутри setstate (), но цвет (значения r, g, b) не меняется. Похоже, что функция setstate () обрабатывается (так как я печатаю «таймер»), но custompaint неизменить значения r, g, b.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
List<CameraDescription> cameras;
Future<void> main() async {
cameras = await availableCameras();
runApp(CameraApp());
}
var temp;
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => _CameraAppState();
}
var r = 255;
var g = 0;
var b = 0;
class _CameraAppState extends State<CameraApp> {
CameraController controller;
var crossPainter = CrossPainter(r, g, b);
@override
void initState() {
super.initState();
controller = CameraController(cameras[0],
ResolutionPreset.medium);
controller.initialize().then((_) {
if (!mounted) {
return;
}
setState(() {
Timer(new Duration(seconds: 5), () {
r = 0;
g = 255;
b = 0;
print('timer');
crossPainter = CrossPainter(r, g, b);
});
});
});
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
var t = Timer.periodic(new Duration(milliseconds: 500),
(Timer timer)=> CrossPainter(225,0,0));
@override
Widget build(BuildContext context) {
if (!controller.value.isInitialized) {
return Container();
}
return CustomPaint(
//foregroundPainter: CrossPainter(r, g, b),
foregroundPainter:crossPainter,
size:Size(100, 100),
willChange:true,
child: CameraPreview(controller));
}
}
class CrossPainter extends CustomPainter{
@override
Paint _paint;
CrossPainter(r,g,b){
_paint = Paint()
..color = Color.fromRGBO(r,g,b,1)
..strokeWidth = 2.0
..strokeCap = StrokeCap.round;
}
@override
void paint(Canvas canvas, Size size) {
var rect = Offset(100,0.0) & size;
canvas.drawRect(rect, _paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}