Fix windows tray issues

Support setting bypassDomain

Update flutter version

Fix android service issues

Fix macos dock exit button issues

Add route address setting

Optimize provider view
This commit is contained in:
chen08209
2024-11-09 20:17:57 +08:00
parent 6f1b07e26b
commit 22e71ec6e1
105 changed files with 7553 additions and 8072 deletions

View File

@@ -1,6 +1,4 @@
import 'dart:io';
import 'package:fl_clash/state.dart';
import 'package:flutter/widgets.dart';
@@ -19,7 +17,7 @@ class _PopContainerState extends State<BackScope> {
if (Platform.isAndroid) {
return PopScope(
canPop: false,
onPopInvoked: (_) async {
onPopInvokedWithResult: (_, __) async {
final canPop = Navigator.canPop(context);
if (canPop) {
Navigator.pop(context);

View File

@@ -6,8 +6,8 @@ import 'package:flutter/material.dart';
import 'card.dart';
import 'input.dart';
import 'sheet.dart';
import 'scaffold.dart';
import 'sheet.dart';
class Delegate {
const Delegate();
@@ -360,11 +360,13 @@ class ListItem<T> extends StatelessWidget {
return;
}
BaseNavigator.push(context, CommonScaffold(
key: Key(nextDelegate.title),
body: nextDelegate.widget,
title: nextDelegate.title,
));
BaseNavigator.push(
context,
CommonScaffold(
key: Key(nextDelegate.title),
body: nextDelegate.widget,
title: nextDelegate.title,
));
},
);
}
@@ -468,7 +470,7 @@ class ListHeader extends StatelessWidget {
}
List<Widget> generateSection({
required String title,
String? title,
required Iterable<Widget> items,
List<Widget>? actions,
bool separated = true,
@@ -481,7 +483,7 @@ List<Widget> generateSection({
)
: items;
return [
if (items.isNotEmpty)
if (items.isNotEmpty && title != null)
ListHeader(
title: title,
actions: actions,

View File

@@ -2,8 +2,8 @@ import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/state.dart';
import 'package:fl_clash/widgets/scaffold.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'side_sheet.dart';
showExtendPage(

View File

@@ -0,0 +1,53 @@
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/models/models.dart';
import 'package:flutter/material.dart';
class SubscriptionInfoView extends StatelessWidget {
final SubscriptionInfo? subscriptionInfo;
const SubscriptionInfoView({
super.key,
this.subscriptionInfo,
});
@override
Widget build(BuildContext context) {
if (subscriptionInfo == null) {
return Container();
}
if (subscriptionInfo?.total == 0) {
return Container();
}
final use = subscriptionInfo!.upload + subscriptionInfo!.download;
final total = subscriptionInfo!.total;
final progress = use / total;
final useShow = TrafficValue(value: use).show;
final totalShow = TrafficValue(value: total).show;
final expireShow = subscriptionInfo?.expire != null &&
subscriptionInfo!.expire != 0
? DateTime.fromMillisecondsSinceEpoch(subscriptionInfo!.expire * 1000)
.show
: appLocalizations.infiniteTime;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
LinearProgressIndicator(
minHeight: 6,
value: progress,
backgroundColor: context.colorScheme.primary.toSoft(),
),
const SizedBox(
height: 8,
),
Text(
"$useShow / $totalShow · $expireShow",
style: context.textTheme.labelMedium?.toLight,
),
const SizedBox(
height: 4,
),
],
);
}
}

View File

@@ -1,24 +1,25 @@
export 'scaffold.dart';
export 'float_layout.dart';
export 'popup_menu.dart';
export 'card.dart';
export 'list.dart';
export 'line_chart.dart';
export 'grid.dart';
export 'open_container.dart';
export 'color_scheme_box.dart';
export 'null_status.dart';
export 'disabled_mask.dart';
export 'side_sheet.dart';
export 'sheet.dart';
export 'animate_grid.dart';
export 'chip.dart';
export 'fade_box.dart';
export 'text.dart';
export 'connection_item.dart';
export 'back_scope.dart';
export 'builder.dart';
export 'setting.dart';
export 'card.dart';
export 'chip.dart';
export 'color_scheme_box.dart';
export 'connection_item.dart';
export 'disabled_mask.dart';
export 'fade_box.dart';
export 'float_layout.dart';
export 'grid.dart';
export 'icon.dart';
export 'input.dart';
export 'keep_scope.dart';
export 'back_scope.dart';
export 'icon.dart';
export 'line_chart.dart';
export 'list.dart';
export 'null_status.dart';
export 'open_container.dart';
export 'popup_menu.dart';
export 'scaffold.dart';
export 'setting.dart';
export 'sheet.dart';
export 'side_sheet.dart';
export 'subscription_info_view.dart';
export 'text.dart';