refactor: console page updates
parent
8015e47617
commit
dd9e8876e0
|
@ -1,8 +1,7 @@
|
||||||
import 'dart:collection';
|
|
||||||
|
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/logic/models/message.dart';
|
import 'package:selfprivacy/logic/models/message.dart';
|
||||||
import 'package:selfprivacy/ui/components/list_tiles/log_list_tile.dart';
|
import 'package:selfprivacy/ui/components/list_tiles/log_list_tile.dart';
|
||||||
|
@ -16,25 +15,36 @@ class ConsolePage extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ConsolePageState extends State<ConsolePage> {
|
class _ConsolePageState extends State<ConsolePage> {
|
||||||
|
bool paused = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
getIt.get<ConsoleModel>().addListener(update);
|
|
||||||
|
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
|
getIt<ConsoleModel>().addListener(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
getIt<ConsoleModel>().removeListener(update);
|
getIt<ConsoleModel>().removeListener(update);
|
||||||
|
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool paused = false;
|
|
||||||
|
|
||||||
void update() {
|
void update() {
|
||||||
if (!paused) {
|
/// listener update could come at any time, like when widget is already
|
||||||
setState(() => {});
|
/// unmounted or during frame build, adding as postframe callback ensures
|
||||||
}
|
/// that element is marked for rebuild
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((final _) {
|
||||||
|
if (!paused && mounted) {
|
||||||
|
setState(() => {});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void togglePause() {
|
||||||
|
paused ^= true;
|
||||||
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -51,7 +61,7 @@ class _ConsolePageState extends State<ConsolePage> {
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
paused ? Icons.play_arrow_outlined : Icons.pause_outlined,
|
paused ? Icons.play_arrow_outlined : Icons.pause_outlined,
|
||||||
),
|
),
|
||||||
onPressed: () => setState(() => paused = !paused),
|
onPressed: togglePause,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -69,12 +79,12 @@ class _ConsolePageState extends State<ConsolePage> {
|
||||||
reverse: true,
|
reverse: true,
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 20),
|
const Gap(20),
|
||||||
...UnmodifiableListView(
|
...messages.reversed.map(
|
||||||
messages
|
(final message) => LogListItem(
|
||||||
.map((final message) => LogListItem(message: message))
|
key: ValueKey(message),
|
||||||
.toList()
|
message: message,
|
||||||
.reversed,
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
@ -82,11 +92,10 @@ class _ConsolePageState extends State<ConsolePage> {
|
||||||
return Column(
|
return Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
Text('console_page.waiting'.tr()),
|
Text('console_page.waiting'.tr()),
|
||||||
const SizedBox(
|
const Gap(16),
|
||||||
height: 16,
|
|
||||||
),
|
|
||||||
const CircularProgressIndicator(),
|
const CircularProgressIndicator(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue