blob: 56358bd9d80dae316c42aa0a243f6213cad7eed5 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:ermine/src/states/app_state.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:internationalization/strings.dart';
/// Defines a widget to display glanceable information like build verison, ip
/// addresses, battery charge or cpu metrics.
class Status extends StatelessWidget {
final AppState app;
const Status(this.app);
@override
Widget build(BuildContext context) {
final settings = app.settingsState;
return RepaintBoundary(
child: Container(
height: 208,
decoration: BoxDecoration(
border: Border(
top: BorderSide(color: Theme.of(context).dividerColor),
),
),
padding: EdgeInsets.all(8),
child: Observer(builder: (_) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// IP Address, Build and Battery.
Expanded(
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: ListTile(
minVerticalPadding: 0,
title: Text(Strings.network),
subtitle: settings.networkAddresses.isEmpty
? Text('--')
: settings.networkAddresses.length == 1
? Text(
settings.networkAddresses.first,
maxLines: 2,
style: TextStyle(
overflow: TextOverflow.ellipsis,
),
)
: Tooltip(
message:
settings.networkAddresses.join('\n'),
child: Text(
settings.networkAddresses.join('\n'),
maxLines: 2,
style: TextStyle(
overflow: TextOverflow.ellipsis,
),
),
),
),
),
Expanded(
child: ListTile(
minVerticalPadding: 0,
title: Text(Strings.build),
subtitle: Text(
app.buildVersion,
maxLines: 2,
style: TextStyle(overflow: TextOverflow.ellipsis),
),
),
),
Expanded(
child: ListTile(
minVerticalPadding: 0,
title: Text(Strings.power),
subtitle: Row(
children: [
if (settings.powerLevel != null) ...[
Text('${settings.powerLevel!.toInt()}%'),
SizedBox(width: 4),
],
Icon(settings.powerIcon),
],
),
),
),
],
),
),
// CPU, Memory and Processes.
Expanded(
child: Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: [
Expanded(
child: ListTile(
minVerticalPadding: 0,
title: Text(Strings.cpu),
subtitle: Text('n/a'),
),
),
Expanded(
child: ListTile(
minVerticalPadding: 0,
title: Text(Strings.memory),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
SizedBox(height: 8),
if (settings.memPercentUsed != null) ...[
LinearProgressIndicator(
value: settings.memPercentUsed,
),
SizedBox(height: 8),
],
Text(
'${settings.memUsed} / ${settings.memTotal}',
textAlign: TextAlign.end,
),
],
),
),
),
Expanded(
child: ListTile(
minVerticalPadding: 0,
title: Text(Strings.processes),
subtitle: Text('n/a'),
),
),
],
),
),
],
);
}),
),
);
}
}