selfprivacy.org.app/lib/ui/pages/more/console.dart

98 lines
2.7 KiB
Dart
Raw Normal View History

import 'package:auto_route/auto_route.dart';
2021-01-14 21:48:05 +00:00
import 'dart:collection';
import 'package:easy_localization/easy_localization.dart';
2021-01-14 21:48:05 +00:00
import 'package:flutter/material.dart';
import 'package:selfprivacy/config/get_it_config.dart';
2021-01-18 10:21:55 +00:00
import 'package:selfprivacy/logic/models/message.dart';
import 'package:selfprivacy/ui/components/list_tiles/log_list_tile.dart';
2021-01-14 21:48:05 +00:00
@RoutePage()
class ConsolePage extends StatefulWidget {
const ConsolePage({super.key});
2021-01-14 21:48:05 +00:00
@override
State<ConsolePage> createState() => _ConsolePageState();
2021-01-14 21:48:05 +00:00
}
class _ConsolePageState extends State<ConsolePage> {
2021-01-14 21:48:05 +00:00
@override
void initState() {
getIt.get<ConsoleModel>().addListener(update);
super.initState();
}
@override
void dispose() {
getIt<ConsoleModel>().removeListener(update);
super.dispose();
}
bool paused = false;
void update() {
if (!paused) {
setState(() => {});
}
}
2021-01-14 21:48:05 +00:00
@override
2022-06-05 19:36:32 +00:00
Widget build(final BuildContext context) => SafeArea(
child: Scaffold(
appBar: AppBar(
title: Text('console_page.title'.tr()),
leading: IconButton(
icon: const Icon(Icons.arrow_back),
onPressed: () => Navigator.of(context).pop(),
),
actions: [
IconButton(
2023-04-05 10:33:53 +00:00
icon: Icon(
paused ? Icons.play_arrow_outlined : Icons.pause_outlined),
onPressed: () => setState(() => paused = !paused),
),
],
2021-01-14 21:48:05 +00:00
),
body: FutureBuilder(
future: getIt.allReady(),
builder: (
final BuildContext context,
final AsyncSnapshot<void> snapshot,
) {
if (snapshot.hasData) {
final List<Message> messages =
getIt.get<ConsoleModel>().messages;
2021-01-14 21:48:05 +00:00
return ListView(
reverse: true,
shrinkWrap: true,
children: [
const SizedBox(height: 20),
...UnmodifiableListView(
messages
.map((final message) => LogListItem(message: message))
.toList()
.reversed,
),
],
);
} else {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Text('console_page.waiting'.tr()),
const SizedBox(
height: 16,
),
const CircularProgressIndicator(),
],
);
}
},
),
2021-01-14 21:48:05 +00:00
),
);
2021-01-14 21:48:05 +00:00
}