mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 07:14:28 +01:00
fix: code editor tool bar (#933)
This commit is contained in:
@@ -57,8 +57,10 @@ class MyApp extends StatelessWidget {
|
|||||||
final darkTheme = ThemeData(useMaterial3: true, brightness: Brightness.dark, colorScheme: dark);
|
final darkTheme = ThemeData(useMaterial3: true, brightness: Brightness.dark, colorScheme: dark);
|
||||||
if (context.isDark && dark != null) {
|
if (context.isDark && dark != null) {
|
||||||
UIs.primaryColor = dark.primary;
|
UIs.primaryColor = dark.primary;
|
||||||
|
UIs.colorSeed = dark.primary;
|
||||||
} else if (!context.isDark && light != null) {
|
} else if (!context.isDark && light != null) {
|
||||||
UIs.primaryColor = light.primary;
|
UIs.primaryColor = light.primary;
|
||||||
|
UIs.colorSeed = light.primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _buildApp(context, light: lightTheme, dark: darkTheme);
|
return _buildApp(context, light: lightTheme, dark: darkTheme);
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
||||||
|
|
||||||
part 'app.g.dart';
|
|
||||||
part 'app.freezed.dart';
|
|
||||||
|
|
||||||
@freezed
|
|
||||||
abstract class AppState with _$AppState {
|
|
||||||
const factory AppState() = _AppState;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Riverpod(keepAlive: true)
|
|
||||||
class AppStates extends _$AppStates {
|
|
||||||
static BuildContext? ctx;
|
|
||||||
|
|
||||||
@override
|
|
||||||
AppState build() {
|
|
||||||
return const AppState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
// coverage:ignore-file
|
|
||||||
// ignore_for_file: type=lint
|
|
||||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
|
||||||
|
|
||||||
part of 'app.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// FreezedGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
// dart format off
|
|
||||||
T _$identity<T>(T value) => value;
|
|
||||||
/// @nodoc
|
|
||||||
mixin _$AppState {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is AppState);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get hashCode => runtimeType.hashCode;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() {
|
|
||||||
return 'AppState()';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
class $AppStateCopyWith<$Res> {
|
|
||||||
$AppStateCopyWith(AppState _, $Res Function(AppState) __);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Adds pattern-matching-related methods to [AppState].
|
|
||||||
extension AppStatePatterns on AppState {
|
|
||||||
/// A variant of `map` that fallback to returning `orElse`.
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case final Subclass value:
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return orElse();
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _AppState value)? $default,{required TResult orElse(),}){
|
|
||||||
final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _AppState() when $default != null:
|
|
||||||
return $default(_that);case _:
|
|
||||||
return orElse();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A `switch`-like method, using callbacks.
|
|
||||||
///
|
|
||||||
/// Callbacks receives the raw object, upcasted.
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case final Subclass value:
|
|
||||||
/// return ...;
|
|
||||||
/// case final Subclass2 value:
|
|
||||||
/// return ...;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _AppState value) $default,){
|
|
||||||
final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _AppState():
|
|
||||||
return $default(_that);case _:
|
|
||||||
throw StateError('Unexpected subclass');
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A variant of `map` that fallback to returning `null`.
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case final Subclass value:
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return null;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _AppState value)? $default,){
|
|
||||||
final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _AppState() when $default != null:
|
|
||||||
return $default(_that);case _:
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A variant of `when` that fallback to an `orElse` callback.
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case Subclass(:final field):
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return orElse();
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function()? $default,{required TResult orElse(),}) {final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _AppState() when $default != null:
|
|
||||||
return $default();case _:
|
|
||||||
return orElse();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A `switch`-like method, using callbacks.
|
|
||||||
///
|
|
||||||
/// As opposed to `map`, this offers destructuring.
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case Subclass(:final field):
|
|
||||||
/// return ...;
|
|
||||||
/// case Subclass2(:final field2):
|
|
||||||
/// return ...;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function() $default,) {final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _AppState():
|
|
||||||
return $default();case _:
|
|
||||||
throw StateError('Unexpected subclass');
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// A variant of `when` that fallback to returning `null`
|
|
||||||
///
|
|
||||||
/// It is equivalent to doing:
|
|
||||||
/// ```dart
|
|
||||||
/// switch (sealedClass) {
|
|
||||||
/// case Subclass(:final field):
|
|
||||||
/// return ...;
|
|
||||||
/// case _:
|
|
||||||
/// return null;
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
|
|
||||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function()? $default,) {final _that = this;
|
|
||||||
switch (_that) {
|
|
||||||
case _AppState() when $default != null:
|
|
||||||
return $default();case _:
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @nodoc
|
|
||||||
|
|
||||||
|
|
||||||
class _AppState implements AppState {
|
|
||||||
const _AppState();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _AppState);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get hashCode => runtimeType.hashCode;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String toString() {
|
|
||||||
return 'AppState()';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// dart format on
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'app.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// RiverpodGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
// ignore_for_file: type=lint, type=warning
|
|
||||||
|
|
||||||
@ProviderFor(AppStates)
|
|
||||||
const appStatesProvider = AppStatesProvider._();
|
|
||||||
|
|
||||||
final class AppStatesProvider extends $NotifierProvider<AppStates, AppState> {
|
|
||||||
const AppStatesProvider._()
|
|
||||||
: super(
|
|
||||||
from: null,
|
|
||||||
argument: null,
|
|
||||||
retry: null,
|
|
||||||
name: r'appStatesProvider',
|
|
||||||
isAutoDispose: false,
|
|
||||||
dependencies: null,
|
|
||||||
$allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String debugGetCreateSourceHash() => _$appStatesHash();
|
|
||||||
|
|
||||||
@$internal
|
|
||||||
@override
|
|
||||||
AppStates create() => AppStates();
|
|
||||||
|
|
||||||
/// {@macro riverpod.override_with_value}
|
|
||||||
Override overrideWithValue(AppState value) {
|
|
||||||
return $ProviderOverride(
|
|
||||||
origin: this,
|
|
||||||
providerOverride: $SyncValueProvider<AppState>(value),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String _$appStatesHash() => r'ef96f10f6fff0f3dd6d3128ebf070ad79cbc8bc9';
|
|
||||||
|
|
||||||
abstract class _$AppStates extends $Notifier<AppState> {
|
|
||||||
AppState build();
|
|
||||||
@$mustCallSuper
|
|
||||||
@override
|
|
||||||
void runBuild() {
|
|
||||||
final created = build();
|
|
||||||
final ref = this.ref as $Ref<AppState, AppState>;
|
|
||||||
final element =
|
|
||||||
ref.element
|
|
||||||
as $ClassProviderElement<
|
|
||||||
AnyNotifier<AppState, AppState>,
|
|
||||||
AppState,
|
|
||||||
Object?,
|
|
||||||
Object?
|
|
||||||
>;
|
|
||||||
element.handleValue(ref, created);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
|
import 'package:fl_lib/fl_lib.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_riverpod/misc.dart';
|
import 'package:flutter_riverpod/misc.dart';
|
||||||
|
|
||||||
import 'package:server_box/data/provider/app.dart';
|
|
||||||
import 'package:server_box/data/provider/private_key.dart';
|
import 'package:server_box/data/provider/private_key.dart';
|
||||||
import 'package:server_box/data/provider/server/all.dart';
|
import 'package:server_box/data/provider/server/all.dart';
|
||||||
import 'package:server_box/data/provider/sftp.dart';
|
import 'package:server_box/data/provider/sftp.dart';
|
||||||
|
|||||||
@@ -33,43 +33,6 @@ final class _IntroPage extends StatelessWidget {
|
|||||||
SizedBox(height: padTop),
|
SizedBox(height: padTop),
|
||||||
IntroPage.title(text: libL10n.init, big: true),
|
IntroPage.title(text: libL10n.init, big: true),
|
||||||
SizedBox(height: padTop),
|
SizedBox(height: padTop),
|
||||||
// Prompt to set backup password after migration or on first launch
|
|
||||||
ListTile(
|
|
||||||
leading: const Icon(Icons.lock),
|
|
||||||
title: Text(l10n.backupPassword),
|
|
||||||
subtitle: Text(l10n.backupPasswordTip, style: UIs.textGrey),
|
|
||||||
trailing: const Icon(Icons.keyboard_arrow_right),
|
|
||||||
onTap: () async {
|
|
||||||
final currentPwd = await SecureStoreProps.bakPwd.read();
|
|
||||||
final controller = TextEditingController(text: currentPwd ?? '');
|
|
||||||
final result = await ctx.showRoundDialog<bool>(
|
|
||||||
title: l10n.backupPassword,
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Text(l10n.backupPasswordTip, style: UIs.textGrey),
|
|
||||||
UIs.height13,
|
|
||||||
Input(
|
|
||||||
label: l10n.backupPassword,
|
|
||||||
controller: controller,
|
|
||||||
obscureText: true,
|
|
||||||
onSubmitted: (_) => ctx.pop(true),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
actions: Btnx.oks,
|
|
||||||
);
|
|
||||||
if (result == true) {
|
|
||||||
final pwd = controller.text.trim();
|
|
||||||
if (pwd.isEmpty) {
|
|
||||||
ctx.showSnackBar(libL10n.empty);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await SecureStoreProps.bakPwd.write(pwd);
|
|
||||||
ctx.showSnackBar(l10n.backupPasswordSet);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
).cardx,
|
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(IonIcons.language),
|
leading: const Icon(IonIcons.language),
|
||||||
title: Text(libL10n.language),
|
title: Text(libL10n.language),
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import 'package:server_box/data/res/store.dart';
|
|||||||
class ConnectionStatsPage extends StatefulWidget {
|
class ConnectionStatsPage extends StatefulWidget {
|
||||||
const ConnectionStatsPage({super.key});
|
const ConnectionStatsPage({super.key});
|
||||||
|
|
||||||
|
static const route = AppRouteNoArg(page: ConnectionStatsPage.new, path: '/server/conn_stats');
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<ConnectionStatsPage> createState() => _ConnectionStatsPageState();
|
State<ConnectionStatsPage> createState() => _ConnectionStatsPageState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import 'package:server_box/data/provider/server/all.dart';
|
|||||||
import 'package:server_box/data/provider/server/single.dart';
|
import 'package:server_box/data/provider/server/single.dart';
|
||||||
import 'package:server_box/data/res/build_data.dart';
|
import 'package:server_box/data/res/build_data.dart';
|
||||||
import 'package:server_box/data/res/store.dart';
|
import 'package:server_box/data/res/store.dart';
|
||||||
|
import 'package:server_box/view/page/server/connection_stats.dart';
|
||||||
import 'package:server_box/view/page/server/detail/view.dart';
|
import 'package:server_box/view/page/server/detail/view.dart';
|
||||||
import 'package:server_box/view/page/server/edit/edit.dart';
|
import 'package:server_box/view/page/server/edit/edit.dart';
|
||||||
import 'package:server_box/view/page/setting/entry.dart';
|
import 'package:server_box/view/page/setting/entry.dart';
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ final class _TopBar extends ConsumerWidget implements PreferredSizeWidget {
|
|||||||
}
|
}
|
||||||
final total = order.length;
|
final total = order.length;
|
||||||
final connectionText = '$connected/$total ${context.l10n.conn}';
|
final connectionText = '$connected/$total ${context.l10n.conn}';
|
||||||
leading = Text(
|
leading = InkWell(
|
||||||
connectionText,
|
onTap: () => ConnectionStatsPage.route.go(context),
|
||||||
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
|
child: Text(connectionText, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,9 +89,8 @@ extension _App on _AppSettingsPageState {
|
|||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.colorize),
|
leading: const Icon(Icons.colorize),
|
||||||
title: Text(libL10n.primaryColorSeed),
|
title: Text(libL10n.primaryColorSeed),
|
||||||
trailing: _setting.colorSeed.listenable().listenVal((val) {
|
trailing: _setting.colorSeed.listenable().listenVal((_) {
|
||||||
final c = Color(val);
|
return ClipOval(child: Container(color: UIs.primaryColor, height: 27, width: 27));
|
||||||
return ClipOval(child: Container(color: c, height: 27, width: 27));
|
|
||||||
}),
|
}),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
final ctrl = TextEditingController(text: UIs.primaryColor.toHex);
|
final ctrl = TextEditingController(text: UIs.primaryColor.toHex);
|
||||||
@@ -137,7 +136,6 @@ extension _App on _AppSettingsPageState {
|
|||||||
UIs.colorSeed = color;
|
UIs.colorSeed = color;
|
||||||
_setting.colorSeed.put(color.value255);
|
_setting.colorSeed.put(color.value255);
|
||||||
context.pop();
|
context.pop();
|
||||||
Future.delayed(Durations.medium1, RNodes.app.notify);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMaxRetry() {
|
Widget _buildMaxRetry() {
|
||||||
|
|||||||
@@ -46,11 +46,7 @@ extension _Server on _AppSettingsPageState {
|
|||||||
subtitle: Text(l10n.connectionStatsDesc),
|
subtitle: Text(l10n.connectionStatsDesc),
|
||||||
trailing: const Icon(Icons.keyboard_arrow_right),
|
trailing: const Icon(Icons.keyboard_arrow_right),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.of(context).push(
|
ConnectionStatsPage.route.go(context);
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (context) => const ConnectionStatsPage(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
12
pubspec.lock
12
pubspec.lock
@@ -505,8 +505,8 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: "v1.0.351"
|
ref: "v1.0.355"
|
||||||
resolved-ref: "98d480eb0128805b5b3361bcfb07c3b46b9f1391"
|
resolved-ref: "73d5f2603859a9f70459d798ed2d267b1d9a86e5"
|
||||||
url: "https://github.com/lppcg/fl_lib"
|
url: "https://github.com/lppcg/fl_lib"
|
||||||
source: git
|
source: git
|
||||||
version: "0.0.1"
|
version: "0.0.1"
|
||||||
@@ -648,6 +648,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.1.2"
|
||||||
|
flutter_staggered_grid_view:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_staggered_grid_view
|
||||||
|
sha256: "19e7abb550c96fbfeb546b23f3ff356ee7c59a019a651f8f102a4ba9b7349395"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.7.0"
|
||||||
flutter_svg:
|
flutter_svg:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -19,17 +19,19 @@ dependencies:
|
|||||||
easy_isolate: ^1.3.0
|
easy_isolate: ^1.3.0
|
||||||
extended_image: ^10.0.0
|
extended_image: ^10.0.0
|
||||||
file_picker: ^10.1.9
|
file_picker: ^10.1.9
|
||||||
|
flutter_gbk2utf8: ^1.0.1
|
||||||
flutter_riverpod: ^3.0.1
|
flutter_riverpod: ^3.0.1
|
||||||
flutter_highlight: ^0.7.0
|
flutter_highlight: ^0.7.0
|
||||||
flutter_displaymode: ^0.7.0
|
flutter_displaymode: ^0.7.0
|
||||||
fl_chart: ^1.0.0
|
fl_chart: ^1.0.0
|
||||||
freezed_annotation: ^3.0.0
|
freezed_annotation: ^3.0.0
|
||||||
|
get_it: ^8.2.0
|
||||||
highlight: ^0.7.0
|
highlight: ^0.7.0
|
||||||
hive_ce_flutter: ^2.3.1
|
hive_ce_flutter: ^2.3.1
|
||||||
intl: ^0.20.2
|
intl: ^0.20.2
|
||||||
json_annotation: ^4.9.0
|
json_annotation: ^4.9.0
|
||||||
responsive_framework: ^1.5.1
|
|
||||||
re_editor: ^0.8.0
|
re_editor: ^0.8.0
|
||||||
|
responsive_framework: ^1.5.1
|
||||||
riverpod_annotation: ^3.0.1
|
riverpod_annotation: ^3.0.1
|
||||||
shared_preferences: ^2.1.1
|
shared_preferences: ^2.1.1
|
||||||
wakelock_plus: ^1.2.4
|
wakelock_plus: ^1.2.4
|
||||||
@@ -63,9 +65,7 @@ dependencies:
|
|||||||
fl_lib:
|
fl_lib:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/lppcg/fl_lib
|
url: https://github.com/lppcg/fl_lib
|
||||||
ref: v1.0.351
|
ref: v1.0.355
|
||||||
flutter_gbk2utf8: ^1.0.1
|
|
||||||
get_it: ^8.2.0
|
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
# webdav_client_plus:
|
# webdav_client_plus:
|
||||||
|
|||||||
Reference in New Issue
Block a user