Support core status check and force restart Optimize proxies page and access page Update flutter and pub dependencies Update go version Optimize more details
92 lines
2.6 KiB
Dart
92 lines
2.6 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:fl_clash/common/common.dart';
|
|
import 'package:fl_clash/core/controller.dart';
|
|
import 'package:fl_clash/state.dart';
|
|
import 'package:fl_clash/widgets/widgets.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
final _memoryStateNotifier = ValueNotifier<num>(0);
|
|
|
|
class MemoryInfo extends StatefulWidget {
|
|
const MemoryInfo({super.key});
|
|
|
|
@override
|
|
State<MemoryInfo> createState() => _MemoryInfoState();
|
|
}
|
|
|
|
class _MemoryInfoState extends State<MemoryInfo> {
|
|
Timer? timer;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_updateMemory();
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
timer?.cancel();
|
|
super.dispose();
|
|
}
|
|
|
|
Future<void> _updateMemory() async {
|
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
|
final rss = ProcessInfo.currentRss;
|
|
_memoryStateNotifier.value = await coreController.getMemory() + rss;
|
|
timer = Timer(Duration(seconds: 2), () async {
|
|
_updateMemory();
|
|
});
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return SizedBox(
|
|
height: getWidgetHeight(1),
|
|
child: CommonCard(
|
|
info: Info(iconData: Icons.memory, label: appLocalizations.memoryInfo),
|
|
onPressed: () {
|
|
coreController.requestGc();
|
|
},
|
|
child: Container(
|
|
padding: baseInfoEdgeInsets.copyWith(top: 0),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.max,
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
SizedBox(
|
|
height: globalState.measure.bodyMediumHeight + 2,
|
|
child: ValueListenableBuilder(
|
|
valueListenable: _memoryStateNotifier,
|
|
builder: (_, memory, _) {
|
|
final traffic = memory.traffic;
|
|
return Row(
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
traffic.value,
|
|
style: context.textTheme.bodyMedium?.toLight
|
|
.adjustSize(1),
|
|
),
|
|
SizedBox(width: 8),
|
|
Text(
|
|
traffic.unit,
|
|
style: context.textTheme.bodyMedium?.toLight
|
|
.adjustSize(1),
|
|
),
|
|
],
|
|
);
|
|
},
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|