I got Compass sensor is unreliable, device calibration is needed.
import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_qiblah/flutter_qiblah.dart';
import 'package:flutter_svg/svg.dart';
class Qibla extends StatelessWidget {
final _compassSvg = SvgPicture.asset('assets/qibla/compass.svg');
final _needleSvg = SvgPicture.asset(
'assets/qibla/needle.svg',
fit: BoxFit.contain,
height: 300,
alignment: Alignment.center,
);
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder(
stream: FlutterQiblah.qiblahStream,
builder: (_, AsyncSnapshot<QiblahDirection> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator(),);
}
final qiblahDirection = snapshot.data;
return Stack(
alignment: Alignment.center,
children: <Widget>[
Transform.rotate(
angle: ((qiblahDirection?.direction ?? 0) * (pi / 180) * -1),
child: _compassSvg,
),
Transform.rotate(
angle: ((qiblahDirection?.qiblah ?? 0) * (pi / 180) * -1),
alignment: Alignment.center,
child: _needleSvg,
),
Positioned(
bottom: 8,
child: Text("${qiblahDirection?.offset.toStringAsFixed(3)}°"),
)
],
);
},
),
);
}
}