Solian/lib/widgets/current_state_action.dart

66 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:get/get.dart';
import 'package:solian/providers/websocket.dart';
import 'package:solian/providers/auth.dart';
class BackgroundStateWidget extends StatelessWidget {
const BackgroundStateWidget({super.key});
@override
Widget build(BuildContext context) {
final AuthProvider auth = Get.find();
final WebSocketProvider ws = Get.find();
return Obx(() {
final disconnected = ws.isConnected.isFalse;
final connecting = ws.isConnecting.isTrue;
return Row(children: [
if (disconnected && !connecting)
FutureBuilder(
future: auth.isAuthorized,
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data == false) {
return const SizedBox();
}
return IconButton(
tooltip: [
if (ws.isConnected.isFalse)
'Lost Connection with Solar Network...',
].join('\n'),
icon: const Icon(Icons.wifi_off)
.animate(onPlay: (c) => c.repeat())
.fadeIn(duration: 800.ms)
.then()
.fadeOut(duration: 800.ms),
onPressed: () {
if (ws.isConnected.isFalse) ws.connect();
},
);
},
),
if (connecting)
FutureBuilder(
future: auth.isAuthorized,
builder: (context, snapshot) {
if (!snapshot.hasData || snapshot.data == false) {
return const SizedBox();
}
return IconButton(
tooltip: [
if (ws.isConnecting.isTrue)
'Waiting Solar Network Connection...',
].join('\n'),
icon: const Icon(Icons.sync)
.animate(onPlay: (c) => c.repeat())
.rotate(duration: 1850.ms, begin: 1, end: 0),
onPressed: () {},
);
},
),
]);
});
}
}