import 'dart:math';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:emeet/constants.dart';
class RadarView extends StatelessWidget {
@override Widget build(BuildContext context) {
return Stack(children: [
// Positioned.fill(
// child: RadarView2(),
// ),
Positioned(
child: Container(
padding: EdgeInsets.symmetric(vertical: 40, ),
child: RadarView2(),
),
),
Positioned(
child: Center(
child: Container(
height: 90.0,
width: 90.0,
padding: EdgeInsets.all(10),
child: Image.asset('assets/images/splash.png'),
decoration: BoxDecoration(
// color: Colors.grey,
// color: secondaryGradientColor,
// image: DecorationImage(
// image: AssetImage('assets/images/splash.png'),
// fit: BoxFit.cover,
// ),
shape:
BoxShape.circle,
boxShadow: [
BoxShadow(
// color: Color(0xFF0F1532),
color: primaryGradientColor,
// .withOpacity(.5),
blurRadius: 300.0,
spreadRadius: 50.0,
),
]),
),
),
),
]);
}
}
class RadarView2 extends StatefulWidget {
@override _RadarViewState createState() => _RadarViewState();
}
class _RadarViewState extends State<RadarView2> with SingleTickerProviderStateMixin {
AnimationController _controller;
Animation<double> _animation;
@override void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: Duration(seconds: 5));
_animation = Tween(begin: .0, end: pi * 2).animate(_controller);
// disable UI reaction responce
_controller.addListener(() {
setState(() {});
});
_controller.repeat();
}
@override void dispose() {
_controller.dispose();
super.dispose();
}
@override Widget build(BuildContext context) {
return AnimatedBuilder(
animation: _animation,
builder: (context, child) {
return CustomPaint(
size: const Size(double.infinity, double.infinity),
painter: RadarPainter(_animation.value),
);
},
);
}
}
class RadarPainter extends CustomPainter {
final double angle;
final Paint _bgPaint = Paint()
..color = Colors.indigo[100]
..strokeWidth = 1
..style = PaintingStyle.stroke;
final Paint _paint = Paint()..style = PaintingStyle.fill;
int circleCount = 3;
RadarPainter(this.angle);
@override void paint(Canvas canvas, Size size) {
var radius = min(size.width / 2, size.height / 2);
canvas.drawLine(
Offset(size.width / 2, size.height / 2 - radius), Offset(size.width / 2, size.height / 2 + radius), _bgPaint);
canvas.drawLine(
Offset(size.width / 2 - radius, size.height / 2), Offset(size.width / 2 + radius, size.height / 2), _bgPaint);
for (var i = 1; i <= circleCount; ++i) {
canvas.drawCircle(Offset(size.width / 2, size.height / 2), radius * i / circleCount, _bgPaint);
}
_paint.shader = ui.Gradient.sweep(Offset(size.width / 2, size.height / 2),
[Colors.white.withOpacity(.01), Colors.white.withOpacity(.5)], [.0, 1.0], TileMode.clamp, .0, pi / 12);
canvas.save();
var r = sqrt(pow(size.width, 2) + pow(size.height, 2));
var startAngle = atan(size.height / size.width);
var p0 = Point(r * cos(startAngle), r * sin(startAngle));
var px = Point(r * cos(angle + startAngle), r * sin(angle + startAngle));
canvas.translate((p0.x - px.x) / 2, (p0.y - px.y) / 2);
canvas.rotate(angle);
canvas.drawArc(
Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: radius), 0, pi / 12, true, _paint);
canvas.restore();
}
@override bool shouldRepaint(CustomPainter oldDelegate) {
return true;
}
}