mirror of
https://mirror.ghproxy.com/https://github.com/StarCitizenToolBox/app.git
synced 2024-12-23 10:03:43 +08:00
feat:riverpod 迁移 Aria2TaskNumWidget
This commit is contained in:
parent
6353591935
commit
248b416277
@ -6,7 +6,7 @@ part of 'app.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$routerHash() => r'df314e6867c385ecf4f18f2cf485c7517bec9154';
|
String _$routerHash() => r'6e1ddfd4fb004ca0c2262ab17a4b0882f12bcc3b';
|
||||||
|
|
||||||
/// See also [router].
|
/// See also [router].
|
||||||
@ProviderFor(router)
|
@ProviderFor(router)
|
||||||
@ -20,7 +20,7 @@ final routerProvider = AutoDisposeProvider<GoRouter>.internal(
|
|||||||
);
|
);
|
||||||
|
|
||||||
typedef RouterRef = AutoDisposeProviderRef<GoRouter>;
|
typedef RouterRef = AutoDisposeProviderRef<GoRouter>;
|
||||||
String _$appGlobalModelHash() => r'1b454a5c8a776aa12a4f953b59b9670d8337840f';
|
String _$appGlobalModelHash() => r'9c114910aed546bfd469c8bbfa50cdd4a5be5028';
|
||||||
|
|
||||||
/// See also [AppGlobalModel].
|
/// See also [AppGlobalModel].
|
||||||
@ProviderFor(AppGlobalModel)
|
@ProviderFor(AppGlobalModel)
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
import 'dart:io';
|
|
||||||
import 'dart:math';
|
|
||||||
|
|
||||||
import 'package:aria2/aria2.dart';
|
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:hive/hive.dart';
|
|
||||||
import 'package:starcitizen_doctor/api/api.dart';
|
|
||||||
import 'package:starcitizen_doctor/common/helper/system_helper.dart';
|
|
||||||
|
|
||||||
|
|
||||||
import 'package:starcitizen_doctor/common/utils/log.dart';
|
|
||||||
|
|
||||||
class Aria2cManager {
|
|
||||||
|
|
||||||
}
|
|
@ -21,19 +21,35 @@ part 'aria2c.freezed.dart';
|
|||||||
@freezed
|
@freezed
|
||||||
class Aria2cModelState with _$Aria2cModelState {
|
class Aria2cModelState with _$Aria2cModelState {
|
||||||
const factory Aria2cModelState({
|
const factory Aria2cModelState({
|
||||||
required bool isDaemonRunning,
|
|
||||||
required String aria2cDir,
|
required String aria2cDir,
|
||||||
Aria2c? aria2c,
|
Aria2c? aria2c,
|
||||||
|
Aria2GlobalStat? aria2globalStat,
|
||||||
}) = _Aria2cModelState;
|
}) = _Aria2cModelState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension Aria2cModelExt on Aria2cModelState {
|
||||||
|
bool get isRunning => aria2c != null;
|
||||||
|
|
||||||
|
bool get hasDownloadTask => aria2globalStat != null && aria2TotalTaskNum > 0;
|
||||||
|
|
||||||
|
int get aria2TotalTaskNum => aria2globalStat == null
|
||||||
|
? 0
|
||||||
|
: ((aria2globalStat!.numActive ?? 0) +
|
||||||
|
(aria2globalStat!.numWaiting ?? 0));
|
||||||
|
}
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
class Aria2cModel extends _$Aria2cModel {
|
class Aria2cModel extends _$Aria2cModel {
|
||||||
|
bool _disposed = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Aria2cModelState build() {
|
Aria2cModelState build() {
|
||||||
if (appGlobalState.applicationBinaryModuleDir == null) {
|
if (appGlobalState.applicationBinaryModuleDir == null) {
|
||||||
throw Exception("applicationBinaryModuleDir is null");
|
throw Exception("applicationBinaryModuleDir is null");
|
||||||
}
|
}
|
||||||
|
ref.onDispose(() {
|
||||||
|
_disposed = true;
|
||||||
|
});
|
||||||
ref.keepAlive();
|
ref.keepAlive();
|
||||||
final aria2cDir = "${appGlobalState.applicationBinaryModuleDir}\\aria2c";
|
final aria2cDir = "${appGlobalState.applicationBinaryModuleDir}\\aria2c";
|
||||||
// LazyLoad init
|
// LazyLoad init
|
||||||
@ -53,11 +69,11 @@ class Aria2cModel extends _$Aria2cModel {
|
|||||||
}
|
}
|
||||||
}();
|
}();
|
||||||
|
|
||||||
return Aria2cModelState(isDaemonRunning: false, aria2cDir: aria2cDir);
|
return Aria2cModelState(aria2cDir: aria2cDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future launchDaemon(String applicationBinaryModuleDir) async {
|
Future launchDaemon(String applicationBinaryModuleDir) async {
|
||||||
if (state.isDaemonRunning) return;
|
if (state.aria2c != null) return;
|
||||||
await BinaryModuleConf.extractModule(
|
await BinaryModuleConf.extractModule(
|
||||||
["aria2c"], applicationBinaryModuleDir);
|
["aria2c"], applicationBinaryModuleDir);
|
||||||
|
|
||||||
@ -111,16 +127,16 @@ class Aria2cModel extends _$Aria2cModel {
|
|||||||
_onLaunch(port, pwd, trackerList);
|
_onLaunch(port, pwd, trackerList);
|
||||||
}
|
}
|
||||||
} else if (event.startsWith("error:")) {
|
} else if (event.startsWith("error:")) {
|
||||||
state = state.copyWith(aria2c: null, isDaemonRunning: false);
|
state = state.copyWith(aria2c: null);
|
||||||
launchError = event;
|
launchError = event;
|
||||||
} else if (event.startsWith("exit:")) {
|
} else if (event.startsWith("exit:")) {
|
||||||
state = state.copyWith(aria2c: null, isDaemonRunning: false);
|
state = state.copyWith(aria2c: null);
|
||||||
launchError = event;
|
launchError = event;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (state.isDaemonRunning) return;
|
if (state.aria2c != null) return;
|
||||||
if (launchError.isNotEmpty) throw launchError;
|
if (launchError.isNotEmpty) throw launchError;
|
||||||
await Future.delayed(const Duration(milliseconds: 100));
|
await Future.delayed(const Duration(milliseconds: 100));
|
||||||
}
|
}
|
||||||
@ -163,9 +179,10 @@ class Aria2cModel extends _$Aria2cModel {
|
|||||||
|
|
||||||
Future<void> _onLaunch(int port, String pwd, String trackerList) async {
|
Future<void> _onLaunch(int port, String pwd, String trackerList) async {
|
||||||
final aria2c = Aria2c("ws://127.0.0.1:$port/jsonrpc", "websocket", pwd);
|
final aria2c = Aria2c("ws://127.0.0.1:$port/jsonrpc", "websocket", pwd);
|
||||||
state = state.copyWith(aria2c: aria2c, isDaemonRunning: true);
|
state = state.copyWith(aria2c: aria2c);
|
||||||
aria2c.getVersion().then((value) {
|
aria2c.getVersion().then((value) {
|
||||||
dPrint("Aria2cManager.connected! version == ${value.version}");
|
dPrint("Aria2cManager.connected! version == ${value.version}");
|
||||||
|
_listenState(aria2c);
|
||||||
});
|
});
|
||||||
final box = await Hive.openBox("app_conf");
|
final box = await Hive.openBox("app_conf");
|
||||||
aria2c.changeGlobalOption(Aria2Option()
|
aria2c.changeGlobalOption(Aria2Option()
|
||||||
@ -175,4 +192,21 @@ class Aria2cModel extends _$Aria2cModel {
|
|||||||
textToByte(box.get("downloader_down_limit", defaultValue: "0"))
|
textToByte(box.get("downloader_down_limit", defaultValue: "0"))
|
||||||
..btTracker = trackerList);
|
..btTracker = trackerList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _listenState(Aria2c aria2c) async {
|
||||||
|
dPrint("Aria2cModel._listenState start");
|
||||||
|
while (true) {
|
||||||
|
if (_disposed || state.aria2c == null) {
|
||||||
|
dPrint("Aria2cModel._listenState end");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
final aria2globalStat = await aria2c.getGlobalStat();
|
||||||
|
state = state.copyWith(aria2globalStat: aria2globalStat);
|
||||||
|
} catch (e) {
|
||||||
|
dPrint("aria2globalStat update error:$e");
|
||||||
|
}
|
||||||
|
await Future.delayed(const Duration(seconds: 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@ final _privateConstructorUsedError = UnsupportedError(
|
|||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
mixin _$Aria2cModelState {
|
mixin _$Aria2cModelState {
|
||||||
bool get isDaemonRunning => throw _privateConstructorUsedError;
|
|
||||||
String get aria2cDir => throw _privateConstructorUsedError;
|
String get aria2cDir => throw _privateConstructorUsedError;
|
||||||
Aria2c? get aria2c => throw _privateConstructorUsedError;
|
Aria2c? get aria2c => throw _privateConstructorUsedError;
|
||||||
|
Aria2GlobalStat? get aria2globalStat => throw _privateConstructorUsedError;
|
||||||
|
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(ignore: true)
|
||||||
$Aria2cModelStateCopyWith<Aria2cModelState> get copyWith =>
|
$Aria2cModelStateCopyWith<Aria2cModelState> get copyWith =>
|
||||||
@ -31,7 +31,8 @@ abstract class $Aria2cModelStateCopyWith<$Res> {
|
|||||||
Aria2cModelState value, $Res Function(Aria2cModelState) then) =
|
Aria2cModelState value, $Res Function(Aria2cModelState) then) =
|
||||||
_$Aria2cModelStateCopyWithImpl<$Res, Aria2cModelState>;
|
_$Aria2cModelStateCopyWithImpl<$Res, Aria2cModelState>;
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({bool isDaemonRunning, String aria2cDir, Aria2c? aria2c});
|
$Res call(
|
||||||
|
{String aria2cDir, Aria2c? aria2c, Aria2GlobalStat? aria2globalStat});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@ -47,15 +48,11 @@ class _$Aria2cModelStateCopyWithImpl<$Res, $Val extends Aria2cModelState>
|
|||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
@override
|
@override
|
||||||
$Res call({
|
$Res call({
|
||||||
Object? isDaemonRunning = null,
|
|
||||||
Object? aria2cDir = null,
|
Object? aria2cDir = null,
|
||||||
Object? aria2c = freezed,
|
Object? aria2c = freezed,
|
||||||
|
Object? aria2globalStat = freezed,
|
||||||
}) {
|
}) {
|
||||||
return _then(_value.copyWith(
|
return _then(_value.copyWith(
|
||||||
isDaemonRunning: null == isDaemonRunning
|
|
||||||
? _value.isDaemonRunning
|
|
||||||
: isDaemonRunning // ignore: cast_nullable_to_non_nullable
|
|
||||||
as bool,
|
|
||||||
aria2cDir: null == aria2cDir
|
aria2cDir: null == aria2cDir
|
||||||
? _value.aria2cDir
|
? _value.aria2cDir
|
||||||
: aria2cDir // ignore: cast_nullable_to_non_nullable
|
: aria2cDir // ignore: cast_nullable_to_non_nullable
|
||||||
@ -64,6 +61,10 @@ class _$Aria2cModelStateCopyWithImpl<$Res, $Val extends Aria2cModelState>
|
|||||||
? _value.aria2c
|
? _value.aria2c
|
||||||
: aria2c // ignore: cast_nullable_to_non_nullable
|
: aria2c // ignore: cast_nullable_to_non_nullable
|
||||||
as Aria2c?,
|
as Aria2c?,
|
||||||
|
aria2globalStat: freezed == aria2globalStat
|
||||||
|
? _value.aria2globalStat
|
||||||
|
: aria2globalStat // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Aria2GlobalStat?,
|
||||||
) as $Val);
|
) as $Val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,7 +77,8 @@ abstract class _$$Aria2cModelStateImplCopyWith<$Res>
|
|||||||
__$$Aria2cModelStateImplCopyWithImpl<$Res>;
|
__$$Aria2cModelStateImplCopyWithImpl<$Res>;
|
||||||
@override
|
@override
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({bool isDaemonRunning, String aria2cDir, Aria2c? aria2c});
|
$Res call(
|
||||||
|
{String aria2cDir, Aria2c? aria2c, Aria2GlobalStat? aria2globalStat});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@ -90,15 +92,11 @@ class __$$Aria2cModelStateImplCopyWithImpl<$Res>
|
|||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
@override
|
@override
|
||||||
$Res call({
|
$Res call({
|
||||||
Object? isDaemonRunning = null,
|
|
||||||
Object? aria2cDir = null,
|
Object? aria2cDir = null,
|
||||||
Object? aria2c = freezed,
|
Object? aria2c = freezed,
|
||||||
|
Object? aria2globalStat = freezed,
|
||||||
}) {
|
}) {
|
||||||
return _then(_$Aria2cModelStateImpl(
|
return _then(_$Aria2cModelStateImpl(
|
||||||
isDaemonRunning: null == isDaemonRunning
|
|
||||||
? _value.isDaemonRunning
|
|
||||||
: isDaemonRunning // ignore: cast_nullable_to_non_nullable
|
|
||||||
as bool,
|
|
||||||
aria2cDir: null == aria2cDir
|
aria2cDir: null == aria2cDir
|
||||||
? _value.aria2cDir
|
? _value.aria2cDir
|
||||||
: aria2cDir // ignore: cast_nullable_to_non_nullable
|
: aria2cDir // ignore: cast_nullable_to_non_nullable
|
||||||
@ -107,6 +105,10 @@ class __$$Aria2cModelStateImplCopyWithImpl<$Res>
|
|||||||
? _value.aria2c
|
? _value.aria2c
|
||||||
: aria2c // ignore: cast_nullable_to_non_nullable
|
: aria2c // ignore: cast_nullable_to_non_nullable
|
||||||
as Aria2c?,
|
as Aria2c?,
|
||||||
|
aria2globalStat: freezed == aria2globalStat
|
||||||
|
? _value.aria2globalStat
|
||||||
|
: aria2globalStat // ignore: cast_nullable_to_non_nullable
|
||||||
|
as Aria2GlobalStat?,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -117,18 +119,18 @@ class _$Aria2cModelStateImpl
|
|||||||
with DiagnosticableTreeMixin
|
with DiagnosticableTreeMixin
|
||||||
implements _Aria2cModelState {
|
implements _Aria2cModelState {
|
||||||
const _$Aria2cModelStateImpl(
|
const _$Aria2cModelStateImpl(
|
||||||
{required this.isDaemonRunning, required this.aria2cDir, this.aria2c});
|
{required this.aria2cDir, this.aria2c, this.aria2globalStat});
|
||||||
|
|
||||||
@override
|
|
||||||
final bool isDaemonRunning;
|
|
||||||
@override
|
@override
|
||||||
final String aria2cDir;
|
final String aria2cDir;
|
||||||
@override
|
@override
|
||||||
final Aria2c? aria2c;
|
final Aria2c? aria2c;
|
||||||
|
@override
|
||||||
|
final Aria2GlobalStat? aria2globalStat;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
|
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
|
||||||
return 'Aria2cModelState(isDaemonRunning: $isDaemonRunning, aria2cDir: $aria2cDir, aria2c: $aria2c)';
|
return 'Aria2cModelState(aria2cDir: $aria2cDir, aria2c: $aria2c, aria2globalStat: $aria2globalStat)';
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -136,9 +138,9 @@ class _$Aria2cModelStateImpl
|
|||||||
super.debugFillProperties(properties);
|
super.debugFillProperties(properties);
|
||||||
properties
|
properties
|
||||||
..add(DiagnosticsProperty('type', 'Aria2cModelState'))
|
..add(DiagnosticsProperty('type', 'Aria2cModelState'))
|
||||||
..add(DiagnosticsProperty('isDaemonRunning', isDaemonRunning))
|
|
||||||
..add(DiagnosticsProperty('aria2cDir', aria2cDir))
|
..add(DiagnosticsProperty('aria2cDir', aria2cDir))
|
||||||
..add(DiagnosticsProperty('aria2c', aria2c));
|
..add(DiagnosticsProperty('aria2c', aria2c))
|
||||||
|
..add(DiagnosticsProperty('aria2globalStat', aria2globalStat));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -146,16 +148,16 @@ class _$Aria2cModelStateImpl
|
|||||||
return identical(this, other) ||
|
return identical(this, other) ||
|
||||||
(other.runtimeType == runtimeType &&
|
(other.runtimeType == runtimeType &&
|
||||||
other is _$Aria2cModelStateImpl &&
|
other is _$Aria2cModelStateImpl &&
|
||||||
(identical(other.isDaemonRunning, isDaemonRunning) ||
|
|
||||||
other.isDaemonRunning == isDaemonRunning) &&
|
|
||||||
(identical(other.aria2cDir, aria2cDir) ||
|
(identical(other.aria2cDir, aria2cDir) ||
|
||||||
other.aria2cDir == aria2cDir) &&
|
other.aria2cDir == aria2cDir) &&
|
||||||
(identical(other.aria2c, aria2c) || other.aria2c == aria2c));
|
(identical(other.aria2c, aria2c) || other.aria2c == aria2c) &&
|
||||||
|
(identical(other.aria2globalStat, aria2globalStat) ||
|
||||||
|
other.aria2globalStat == aria2globalStat));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode =>
|
int get hashCode =>
|
||||||
Object.hash(runtimeType, isDaemonRunning, aria2cDir, aria2c);
|
Object.hash(runtimeType, aria2cDir, aria2c, aria2globalStat);
|
||||||
|
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(ignore: true)
|
||||||
@override
|
@override
|
||||||
@ -167,17 +169,17 @@ class _$Aria2cModelStateImpl
|
|||||||
|
|
||||||
abstract class _Aria2cModelState implements Aria2cModelState {
|
abstract class _Aria2cModelState implements Aria2cModelState {
|
||||||
const factory _Aria2cModelState(
|
const factory _Aria2cModelState(
|
||||||
{required final bool isDaemonRunning,
|
{required final String aria2cDir,
|
||||||
required final String aria2cDir,
|
final Aria2c? aria2c,
|
||||||
final Aria2c? aria2c}) = _$Aria2cModelStateImpl;
|
final Aria2GlobalStat? aria2globalStat}) = _$Aria2cModelStateImpl;
|
||||||
|
|
||||||
@override
|
|
||||||
bool get isDaemonRunning;
|
|
||||||
@override
|
@override
|
||||||
String get aria2cDir;
|
String get aria2cDir;
|
||||||
@override
|
@override
|
||||||
Aria2c? get aria2c;
|
Aria2c? get aria2c;
|
||||||
@override
|
@override
|
||||||
|
Aria2GlobalStat? get aria2globalStat;
|
||||||
|
@override
|
||||||
@JsonKey(ignore: true)
|
@JsonKey(ignore: true)
|
||||||
_$$Aria2cModelStateImplCopyWith<_$Aria2cModelStateImpl> get copyWith =>
|
_$$Aria2cModelStateImplCopyWith<_$Aria2cModelStateImpl> get copyWith =>
|
||||||
throw _privateConstructorUsedError;
|
throw _privateConstructorUsedError;
|
||||||
|
@ -6,7 +6,7 @@ part of 'aria2c.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$aria2cModelHash() => r'45bfdd07a11bb93594b76297a995e8ba24e0e984';
|
String _$aria2cModelHash() => r'6685f6a716016113487de190a61f71196094526e';
|
||||||
|
|
||||||
/// See also [Aria2cModel].
|
/// See also [Aria2cModel].
|
||||||
@ProviderFor(Aria2cModel)
|
@ProviderFor(Aria2cModel)
|
||||||
|
@ -2,6 +2,7 @@ import 'package:fluent_ui/fluent_ui.dart';
|
|||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:starcitizen_doctor/common/conf/const_conf.dart';
|
import 'package:starcitizen_doctor/common/conf/const_conf.dart';
|
||||||
|
import 'package:starcitizen_doctor/provider/aria2c.dart';
|
||||||
import 'package:starcitizen_doctor/widgets/widgets.dart';
|
import 'package:starcitizen_doctor/widgets/widgets.dart';
|
||||||
import 'package:window_manager/window_manager.dart';
|
import 'package:window_manager/window_manager.dart';
|
||||||
|
|
||||||
@ -48,25 +49,7 @@ class IndexUI extends HookConsumerWidget {
|
|||||||
color: Colors.white.withOpacity(.6),
|
color: Colors.white.withOpacity(.6),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// if (model.aria2TotalTaskNum != 0)
|
_makeAria2TaskNumWidget()
|
||||||
// Positioned(
|
|
||||||
// bottom: 0,
|
|
||||||
// right: 0,
|
|
||||||
// child: Container(
|
|
||||||
// decoration: BoxDecoration(
|
|
||||||
// color: Colors.red,
|
|
||||||
// borderRadius: BorderRadius.circular(12),
|
|
||||||
// ),
|
|
||||||
// padding: const EdgeInsets.only(
|
|
||||||
// left: 6, right: 6, bottom: 1.5, top: 1.5),
|
|
||||||
// child: Text(
|
|
||||||
// "${model.aria2TotalTaskNum}",
|
|
||||||
// style: const TextStyle(
|
|
||||||
// fontSize: 8,
|
|
||||||
// color: Colors.white,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// )),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
onPressed: () {},
|
onPressed: () {},
|
||||||
@ -134,4 +117,33 @@ class IndexUI extends HookConsumerWidget {
|
|||||||
pageMenus.values.toList().indexWhere((element) => element == value);
|
pageMenus.values.toList().indexWhere((element) => element == value);
|
||||||
curIndexState.value = pageIndex;
|
curIndexState.value = pageIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _makeAria2TaskNumWidget() {
|
||||||
|
return Consumer(
|
||||||
|
builder: (BuildContext context, WidgetRef ref, Widget? child) {
|
||||||
|
final aria2cState = ref.watch(aria2cModelProvider);
|
||||||
|
if (!aria2cState.hasDownloadTask) {
|
||||||
|
return const SizedBox();
|
||||||
|
}
|
||||||
|
return Positioned(
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.red,
|
||||||
|
borderRadius: BorderRadius.circular(12),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
left: 6, right: 6, bottom: 1.5, top: 1.5),
|
||||||
|
child: Text(
|
||||||
|
"${aria2cState.aria2TotalTaskNum}",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 8,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user