flutter_elinux/lib/common/widgets/statusbar.dart

114 lines
3.7 KiB
Dart
Raw Normal View History

2024-03-09 14:29:48 +01:00
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:nm/nm.dart';
import '../../features/settings/business/wifi_controller.dart';
import '../../features/settings/presentation/wifi_settings_screen/widgets/wifi_bar_icon.dart';
import 'clock.dart';
const horizontalSpace = SizedBox(
width: 8,
);
class StatusBar extends ConsumerWidget {
const StatusBar({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final wifiStream = (Platform.isLinux)
? ref.watch(wifiControllerProvider.notifier).wifiStream()
: const Stream.empty();
return Container(
width: double.infinity,
height: 24,
color: Colors.black,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Row(
children: [
horizontalSpace,
kDebugMode
? Text(
'DEBUG MODE',
style: TextStyle(color: Colors.white),
)
: SizedBox(),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
StreamBuilder(
stream: wifiStream,
builder: (context, snapshot) {
if (!Platform.isLinux) {
return const Row(
children: [
Text(
'DemoConnection',
style: TextStyle(color: Colors.white),
),
horizontalSpace,
WifiBarIcon(
strength: 1,
size: 16,
color: Colors.white,
),
],
);
}
if (snapshot.hasData) {
final data = snapshot.data?.$1 as NetworkManagerDevice;
return Row(
children: [
Text(
data.activeConnection?.id ?? 'No connection',
style: const TextStyle(color: Colors.white),
),
horizontalSpace,
WifiBarIcon(
strength:
data.wireless?.activeAccessPoint?.strength ?? 0,
size: 16,
color: Colors.white,
),
],
);
}
if (snapshot.hasError) {
// error can be caught here
// display error in statusbar:
// return Text(
// snapshot.error.toString(),
// style: const TextStyle(color: Colors.white),
// );
// show nothing (hide error message from user):
// the error that can happen here is mostly related
// to not finding any usable wifi device
return const SizedBox();
}
return const Text(
"No connection",
style: TextStyle(color: Colors.white),
);
},
),
horizontalSpace,
const ClockWidget(
textStyle: TextStyle(color: Colors.white),
),
horizontalSpace,
],
),
],
),
);
}
}