mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2026-02-20 23:24:20 +01:00
new: Providers
This commit is contained in:
@@ -6,18 +6,17 @@ import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/route.dart';
|
||||
import 'package:toolbox/data/model/docker/image.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/view/widget/input_field.dart';
|
||||
|
||||
import '../../data/model/docker/ps.dart';
|
||||
import '../../data/model/server/server_private_info.dart';
|
||||
import '../../data/provider/docker.dart';
|
||||
import '../../data/provider/server.dart';
|
||||
import '../../data/model/app/error.dart';
|
||||
import '../../data/model/app/menu.dart';
|
||||
import '../../data/res/ui.dart';
|
||||
import '../../data/res/url.dart';
|
||||
import '../../locator.dart';
|
||||
import '../widget/custom_appbar.dart';
|
||||
import '../widget/popup_menu.dart';
|
||||
import '../widget/round_rect_card.dart';
|
||||
@@ -33,14 +32,13 @@ class DockerManagePage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _DockerManagePageState extends State<DockerManagePage> {
|
||||
final _docker = locator<DockerProvider>();
|
||||
final _textController = TextEditingController();
|
||||
late S _s;
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
_docker.clear();
|
||||
Providers.docker.clear();
|
||||
_textController.dispose();
|
||||
}
|
||||
|
||||
@@ -53,17 +51,19 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
final client = locator<ServerProvider>().servers[widget.spi.id]?.client;
|
||||
final client = widget.spi.findServer?.client;
|
||||
if (client == null) {
|
||||
return;
|
||||
}
|
||||
_docker.init(
|
||||
client,
|
||||
widget.spi.user,
|
||||
(user) async => await context.showPwdDialog(user),
|
||||
widget.spi.id,
|
||||
context,
|
||||
);
|
||||
Providers.docker
|
||||
..init(
|
||||
client,
|
||||
widget.spi.user,
|
||||
(user) async => await context.showPwdDialog(user),
|
||||
widget.spi.id,
|
||||
context,
|
||||
)
|
||||
..refresh();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -77,7 +77,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
IconButton(
|
||||
onPressed: () async {
|
||||
context.showLoadingDialog();
|
||||
await _docker.refresh();
|
||||
await Providers.docker.refresh();
|
||||
context.pop();
|
||||
},
|
||||
icon: const Icon(Icons.refresh),
|
||||
@@ -85,7 +85,8 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
],
|
||||
),
|
||||
body: _buildMain(),
|
||||
floatingActionButton: _docker.error == null ? _buildFAB() : null,
|
||||
floatingActionButton:
|
||||
Providers.docker.error == null ? _buildFAB() : null,
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -162,7 +163,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
onPressed: () async {
|
||||
context.pop();
|
||||
context.showLoadingDialog();
|
||||
final result = await _docker.run(cmd);
|
||||
final result = await Providers.docker.run(cmd);
|
||||
context.pop();
|
||||
if (result != null) {
|
||||
context.showSnackBar(result.message ?? _s.unknownError);
|
||||
@@ -188,7 +189,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
}
|
||||
|
||||
Widget _buildMain() {
|
||||
if (_docker.error != null && _docker.items == null) {
|
||||
if (Providers.docker.error != null && Providers.docker.items == null) {
|
||||
return SizedBox.expand(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
@@ -199,22 +200,17 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
size: 37,
|
||||
),
|
||||
const SizedBox(height: 27),
|
||||
Text(_docker.error?.message ?? _s.unknownError),
|
||||
Text(Providers.docker.error?.message ?? _s.unknownError),
|
||||
const SizedBox(height: 27),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(17),
|
||||
child: _buildSolution(_docker.error!),
|
||||
child: _buildSolution(Providers.docker.error!),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
if (_docker.items == null || _docker.images == null) {
|
||||
Future.delayed(const Duration(milliseconds: 37), () {
|
||||
if (mounted) {
|
||||
_docker.refresh();
|
||||
}
|
||||
});
|
||||
if (Providers.docker.items == null || Providers.docker.images == null) {
|
||||
return UIs.centerLoading;
|
||||
}
|
||||
|
||||
@@ -236,12 +232,12 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
ListTile(
|
||||
title: Text(_s.imagesList),
|
||||
subtitle: Text(
|
||||
_s.dockerImagesFmt(_docker.images!.length),
|
||||
_s.dockerImagesFmt(Providers.docker.images!.length),
|
||||
style: UIs.textGrey,
|
||||
),
|
||||
),
|
||||
];
|
||||
items.addAll(_docker.images!.map(_buildImageItem));
|
||||
items.addAll(Providers.docker.images!.map(_buildImageItem));
|
||||
return Column(children: items);
|
||||
}
|
||||
|
||||
@@ -270,7 +266,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
context.pop();
|
||||
final result = await _docker.run(
|
||||
final result = await Providers.docker.run(
|
||||
'docker rmi ${e.id} -f',
|
||||
);
|
||||
if (result != null) {
|
||||
@@ -284,7 +280,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
}
|
||||
|
||||
Widget _buildLoading() {
|
||||
if (_docker.runLog == null) return UIs.placeholder;
|
||||
if (Providers.docker.runLog == null) return UIs.placeholder;
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(17),
|
||||
child: Column(
|
||||
@@ -293,7 +289,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
child: CircularProgressIndicator(),
|
||||
),
|
||||
UIs.height13,
|
||||
Text(_docker.runLog ?? '...'),
|
||||
Text(Providers.docker.runLog ?? '...'),
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -334,8 +330,8 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(_docker.edition ?? _s.unknown),
|
||||
Text(_docker.version ?? _s.unknown),
|
||||
Text(Providers.docker.edition ?? _s.unknown),
|
||||
Text(Providers.docker.version ?? _s.unknown),
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -346,12 +342,12 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
ListTile(
|
||||
title: Text(_s.containerStatus),
|
||||
subtitle: Text(
|
||||
_buildPsCardSubtitle(_docker.items!),
|
||||
_buildPsCardSubtitle(Providers.docker.items!),
|
||||
style: UIs.textGrey,
|
||||
),
|
||||
),
|
||||
];
|
||||
items.addAll(_docker.items!.map(_buildPsItem));
|
||||
items.addAll(Providers.docker.items!.map(_buildPsItem));
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: items,
|
||||
@@ -387,7 +383,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
onPressed: () async {
|
||||
context.pop();
|
||||
context.showLoadingDialog();
|
||||
await _docker.delete(dItem.containerId);
|
||||
await Providers.docker.delete(dItem.containerId);
|
||||
context.pop();
|
||||
},
|
||||
child: Text(_s.ok),
|
||||
@@ -397,17 +393,17 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
break;
|
||||
case DockerMenuType.start:
|
||||
context.showLoadingDialog();
|
||||
await _docker.start(dItem.containerId);
|
||||
await Providers.docker.start(dItem.containerId);
|
||||
context.pop();
|
||||
break;
|
||||
case DockerMenuType.stop:
|
||||
context.showLoadingDialog();
|
||||
await _docker.stop(dItem.containerId);
|
||||
await Providers.docker.stop(dItem.containerId);
|
||||
context.pop();
|
||||
break;
|
||||
case DockerMenuType.restart:
|
||||
context.showLoadingDialog();
|
||||
await _docker.restart(dItem.containerId);
|
||||
await Providers.docker.restart(dItem.containerId);
|
||||
context.pop();
|
||||
break;
|
||||
case DockerMenuType.logs:
|
||||
@@ -456,7 +452,7 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
|
||||
Widget _buildEditHost() {
|
||||
final children = <Widget>[];
|
||||
if (_docker.items!.isEmpty && _docker.images!.isEmpty) {
|
||||
if (Providers.docker.items!.isEmpty && Providers.docker.images!.isEmpty) {
|
||||
children.add(Padding(
|
||||
padding: const EdgeInsets.fromLTRB(17, 17, 17, 0),
|
||||
child: Text(
|
||||
@@ -499,6 +495,6 @@ class _DockerManagePageState extends State<DockerManagePage> {
|
||||
void _onSaveDockerHost(String val) {
|
||||
context.pop();
|
||||
Stores.docker.put(widget.spi.id, val.trim());
|
||||
_docker.refresh();
|
||||
Providers.docker.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,9 +10,9 @@ import 'package:provider/provider.dart';
|
||||
import 'package:toolbox/core/route.dart';
|
||||
import 'package:toolbox/data/model/server/disk.dart';
|
||||
import 'package:toolbox/data/provider/server.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/data/res/ui.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
|
||||
import '../../core/analysis.dart';
|
||||
import '../../core/update.dart';
|
||||
@@ -38,7 +38,6 @@ class _FullScreenPageState extends State<FullScreenPage> with AfterLayoutMixin {
|
||||
late int _rotateQuarter;
|
||||
|
||||
final _pageController = PageController(initialPage: 0);
|
||||
final _serverProvider = locator<ServerProvider>();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -372,8 +371,8 @@ class _FullScreenPageState extends State<FullScreenPage> with AfterLayoutMixin {
|
||||
doUpdate(context);
|
||||
}
|
||||
await GetIt.I.allReady();
|
||||
await _serverProvider.loadLocalData();
|
||||
await _serverProvider.refreshData();
|
||||
await Providers.server.loadLocalData();
|
||||
await Providers.server.refreshData();
|
||||
if (!Analysis.enabled) {
|
||||
await Analysis.init();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import 'package:get_it/get_it.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/data/res/github_id.dart';
|
||||
import 'package:toolbox/data/res/logger.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../core/analysis.dart';
|
||||
@@ -16,13 +17,10 @@ import '../../core/utils/platform.dart';
|
||||
import '../../core/utils/ui.dart';
|
||||
import '../../data/model/app/github_id.dart';
|
||||
import '../../data/model/app/tab.dart';
|
||||
import '../../data/provider/app.dart';
|
||||
import '../../data/provider/server.dart';
|
||||
import '../../data/res/build_data.dart';
|
||||
import '../../data/res/misc.dart';
|
||||
import '../../data/res/ui.dart';
|
||||
import '../../data/res/url.dart';
|
||||
import '../../locator.dart';
|
||||
import '../widget/custom_appbar.dart';
|
||||
import '../widget/round_rect_card.dart';
|
||||
import '../widget/url_text.dart';
|
||||
@@ -40,9 +38,6 @@ class _HomePageState extends State<HomePage>
|
||||
AutomaticKeepAliveClientMixin,
|
||||
AfterLayoutMixin,
|
||||
WidgetsBindingObserver {
|
||||
final _serverProvider = locator<ServerProvider>();
|
||||
final _app = locator<AppProvider>();
|
||||
|
||||
late final PageController _pageController;
|
||||
|
||||
final _selectIndex = ValueNotifier(0);
|
||||
@@ -73,7 +68,7 @@ class _HomePageState extends State<HomePage>
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
WidgetsBinding.instance.removeObserver(this);
|
||||
_serverProvider.closeServer();
|
||||
Providers.server.closeServer();
|
||||
_pageController.dispose();
|
||||
}
|
||||
|
||||
@@ -84,20 +79,20 @@ class _HomePageState extends State<HomePage>
|
||||
|
||||
switch (state) {
|
||||
case AppLifecycleState.resumed:
|
||||
if (!_serverProvider.isAutoRefreshOn) {
|
||||
_serverProvider.startAutoRefresh();
|
||||
if (!Providers.server.isAutoRefreshOn) {
|
||||
Providers.server.startAutoRefresh();
|
||||
}
|
||||
updateHomeWidget();
|
||||
break;
|
||||
case AppLifecycleState.paused:
|
||||
// Keep running in background on Android device
|
||||
if (isAndroid && Stores.setting.bgRun.fetch()) {
|
||||
if (_app.moveBg) {
|
||||
if (Providers.app.moveBg) {
|
||||
Miscs.bgRunChannel.invokeMethod('sendToBackground');
|
||||
}
|
||||
} else {
|
||||
_serverProvider.setDisconnected();
|
||||
_serverProvider.stopAutoRefresh();
|
||||
Providers.server.setDisconnected();
|
||||
Providers.server.stopAutoRefresh();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -148,7 +143,7 @@ class _HomePageState extends State<HomePage>
|
||||
return IconButton(
|
||||
icon: const Icon(Icons.refresh, size: 23),
|
||||
tooltip: 'Refresh',
|
||||
onPressed: () => _serverProvider.refreshData(onlyFailed: true),
|
||||
onPressed: () => Providers.server.refreshData(onlyFailed: true),
|
||||
);
|
||||
},
|
||||
),
|
||||
@@ -346,8 +341,8 @@ class _HomePageState extends State<HomePage>
|
||||
}
|
||||
updateHomeWidget();
|
||||
await GetIt.I.allReady();
|
||||
await _serverProvider.loadLocalData();
|
||||
await _serverProvider.refreshData();
|
||||
await Providers.server.loadLocalData();
|
||||
await Providers.server.refreshData();
|
||||
if (!Analysis.enabled) {
|
||||
Analysis.init();
|
||||
}
|
||||
|
||||
@@ -6,15 +6,14 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/extension/uint8list.dart';
|
||||
import 'package:toolbox/core/utils/misc.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/view/widget/value_notifier.dart';
|
||||
|
||||
import '../../core/extension/uint8list.dart';
|
||||
import '../../data/model/server/ping_result.dart';
|
||||
import '../../data/provider/server.dart';
|
||||
import '../../data/res/color.dart';
|
||||
import '../../data/res/ui.dart';
|
||||
import '../../locator.dart';
|
||||
import '../widget/input_field.dart';
|
||||
import '../widget/round_rect_card.dart';
|
||||
|
||||
@@ -32,7 +31,6 @@ class _PingPageState extends State<PingPage>
|
||||
with AutomaticKeepAliveClientMixin, AfterLayoutMixin {
|
||||
late TextEditingController _textEditingController;
|
||||
final _results = ValueNotifier(<PingResult>[]);
|
||||
final _serverProvider = locator<ServerProvider>();
|
||||
late S _s;
|
||||
|
||||
bool get isInit => _results.value.isEmpty;
|
||||
@@ -176,7 +174,7 @@ class _PingPageState extends State<PingPage>
|
||||
return;
|
||||
}
|
||||
|
||||
if (_serverProvider.servers.isEmpty) {
|
||||
if (Providers.server.servers.isEmpty) {
|
||||
context.showSnackBar(_s.pingNoServer);
|
||||
return;
|
||||
}
|
||||
@@ -187,7 +185,7 @@ class _PingPageState extends State<PingPage>
|
||||
return;
|
||||
}
|
||||
|
||||
await Future.wait(_serverProvider.servers.values.map((e) async {
|
||||
await Future.wait(Providers.server.servers.values.map((e) async {
|
||||
if (e.client == null) {
|
||||
return;
|
||||
}
|
||||
@@ -207,9 +205,9 @@ class _PingPageState extends State<PingPage>
|
||||
|
||||
@override
|
||||
Future<FutureOr<void>> afterFirstLayout(BuildContext context) async {
|
||||
if (_serverProvider.servers.isEmpty) {
|
||||
await _serverProvider.loadLocalData();
|
||||
await _serverProvider.refreshData();
|
||||
if (Providers.server.servers.isEmpty) {
|
||||
await Providers.server.loadLocalData();
|
||||
await Providers.server.refreshData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,13 +10,12 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/extension/numx.dart';
|
||||
import 'package:toolbox/core/utils/misc.dart';
|
||||
import 'package:toolbox/data/res/misc.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/view/widget/input_field.dart';
|
||||
|
||||
import '../../../core/utils/server.dart';
|
||||
import '../../../data/model/server/private_key_info.dart';
|
||||
import '../../../data/provider/private_key.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/custom_appbar.dart';
|
||||
|
||||
const _format = 'text/plain';
|
||||
@@ -39,7 +38,6 @@ class _PrivateKeyEditPageState extends State<PrivateKeyEditPage> {
|
||||
final _pwdNode = FocusNode();
|
||||
|
||||
late FocusScopeNode _focusScope;
|
||||
final _provider = locator<PrivateKeyProvider>();
|
||||
late S _s;
|
||||
|
||||
Widget? _loading;
|
||||
@@ -99,7 +97,7 @@ class _PrivateKeyEditPageState extends State<PrivateKeyEditPage> {
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_provider.delete(widget.pki!);
|
||||
Providers.key.delete(widget.pki!);
|
||||
context.pop();
|
||||
context.pop();
|
||||
},
|
||||
@@ -139,9 +137,9 @@ class _PrivateKeyEditPageState extends State<PrivateKeyEditPage> {
|
||||
final decrypted = await compute(decyptPem, [key, pwd]);
|
||||
final pki = PrivateKeyInfo(id: name, key: decrypted);
|
||||
if (widget.pki != null) {
|
||||
_provider.update(widget.pki!, pki);
|
||||
Providers.key.update(widget.pki!, pki);
|
||||
} else {
|
||||
_provider.add(pki);
|
||||
Providers.key.add(pki);
|
||||
}
|
||||
} catch (e) {
|
||||
context.showSnackBar(e.toString());
|
||||
|
||||
@@ -8,14 +8,13 @@ import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/extension/uint8list.dart';
|
||||
import 'package:toolbox/core/utils/misc.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../data/model/app/shell_func.dart';
|
||||
import '../../data/model/server/proc.dart';
|
||||
import '../../data/model/server/server_private_info.dart';
|
||||
import '../../data/provider/server.dart';
|
||||
import '../../data/res/ui.dart';
|
||||
import '../../locator.dart';
|
||||
import '../widget/custom_appbar.dart';
|
||||
import '../widget/round_rect_card.dart';
|
||||
import '../widget/two_line_text.dart';
|
||||
@@ -44,12 +43,10 @@ class _ProcessPageState extends State<ProcessPage> {
|
||||
ProcSortMode _procSortMode = ProcSortMode.cpu;
|
||||
List<ProcSortMode> _sortModes = List.from(ProcSortMode.values);
|
||||
|
||||
final _serverProvider = locator<ServerProvider>();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_client = _serverProvider.servers[widget.spi.id]?.client;
|
||||
_client = Providers.server.servers[widget.spi.id]?.client;
|
||||
final duration =
|
||||
Duration(seconds: Stores.setting.serverStatusUpdateInterval.fetch());
|
||||
_timer = Timer.periodic(duration, (_) => _refresh());
|
||||
|
||||
@@ -4,14 +4,13 @@ import 'package:provider/provider.dart';
|
||||
import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
|
||||
import '../../../core/route.dart';
|
||||
import '../../../data/model/server/private_key_info.dart';
|
||||
import '../../../data/model/server/server_private_info.dart';
|
||||
import '../../../data/provider/private_key.dart';
|
||||
import '../../../data/provider/server.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/custom_appbar.dart';
|
||||
import '../../widget/input_field.dart';
|
||||
import '../../widget/round_rect_card.dart';
|
||||
@@ -43,9 +42,6 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
late FocusScopeNode _focusScope;
|
||||
late S _s;
|
||||
|
||||
final _srvs = locator<ServerProvider>();
|
||||
final _keys = locator<PrivateKeyProvider>();
|
||||
|
||||
final _keyIdx = ValueNotifier<int?>(null);
|
||||
final _autoConnect = ValueNotifier(true);
|
||||
|
||||
@@ -63,7 +59,7 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
if (widget.spi?.pubKeyId == null) {
|
||||
_passwordController.text = widget.spi?.pwd ?? '';
|
||||
} else {
|
||||
_keyIdx.value = _keys.pkis.indexWhere(
|
||||
_keyIdx.value = Providers.key.pkis.indexWhere(
|
||||
(e) => e.id == widget.spi!.pubKeyId,
|
||||
);
|
||||
}
|
||||
@@ -121,7 +117,7 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_srvs.delServer(widget.spi!.id);
|
||||
Providers.server.delServer(widget.spi!.id);
|
||||
context.pop();
|
||||
context.pop(true);
|
||||
},
|
||||
@@ -190,8 +186,8 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
tags: _tags,
|
||||
onChanged: (p0) => _tags = p0,
|
||||
s: _s,
|
||||
allTags: [..._srvs.tags],
|
||||
onRenameTag: _srvs.renameTag,
|
||||
allTags: [...Providers.server.tags],
|
||||
onRenameTag: Providers.server.renameTag,
|
||||
),
|
||||
_buildAuth(),
|
||||
ListTile(
|
||||
@@ -364,7 +360,7 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
user: _usernameController.text,
|
||||
pwd: _passwordController.text.isEmpty ? null : _passwordController.text,
|
||||
pubKeyId: _keyIdx.value != null
|
||||
? _keys.pkis.elementAt(_keyIdx.value!).id
|
||||
? Providers.key.pkis.elementAt(_keyIdx.value!).id
|
||||
: null,
|
||||
tags: _tags,
|
||||
alterUrl: _altUrlController.text.isEmpty ? null : _altUrlController.text,
|
||||
@@ -372,9 +368,9 @@ class _ServerEditPageState extends State<ServerEditPage> {
|
||||
);
|
||||
|
||||
if (widget.spi == null) {
|
||||
_srvs.addServer(spi);
|
||||
Providers.server.addServer(spi);
|
||||
} else {
|
||||
_srvs.updateServer(widget.spi!, spi);
|
||||
Providers.server.updateServer(widget.spi!, spi);
|
||||
}
|
||||
|
||||
context.pop();
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/media_queryx.dart';
|
||||
import 'package:toolbox/core/extension/ssh_client.dart';
|
||||
import 'package:toolbox/data/model/app/shell_func.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../../core/route.dart';
|
||||
@@ -21,7 +22,6 @@ import '../../../data/model/server/server_status.dart';
|
||||
import '../../../data/provider/server.dart';
|
||||
import '../../../data/res/color.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/round_rect_card.dart';
|
||||
import '../../widget/server_func_btns.dart';
|
||||
import '../../widget/tag.dart';
|
||||
@@ -39,7 +39,6 @@ class _ServerPageState extends State<ServerPage>
|
||||
late S _s;
|
||||
|
||||
final _flipedCardIds = <String>{};
|
||||
final _serverProvider = locator<ServerProvider>();
|
||||
|
||||
String? _tag;
|
||||
bool _useDoubleColumn = false;
|
||||
@@ -96,7 +95,7 @@ class _ServerPageState extends State<ServerPage>
|
||||
}
|
||||
return RefreshIndicator(
|
||||
onRefresh: () async =>
|
||||
await _serverProvider.refreshData(onlyFailed: true),
|
||||
await Providers.server.refreshData(onlyFailed: true),
|
||||
child: child,
|
||||
);
|
||||
}
|
||||
@@ -308,7 +307,7 @@ class _ServerPageState extends State<ServerPage>
|
||||
Widget? rightCorner;
|
||||
if (!(spi.autoConnect ?? true) && cs == ServerState.disconnected) {
|
||||
rightCorner = InkWell(
|
||||
onTap: () => _serverProvider.refreshData(spi: spi),
|
||||
onTap: () => Providers.server.refreshData(spi: spi),
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 7),
|
||||
child: Icon(
|
||||
@@ -459,10 +458,10 @@ class _ServerPageState extends State<ServerPage>
|
||||
@override
|
||||
Future<void> afterFirstLayout(BuildContext context) async {
|
||||
await GetIt.I.allReady();
|
||||
if (_serverProvider.servers.isEmpty) {
|
||||
await _serverProvider.loadLocalData();
|
||||
if (Providers.server.servers.isEmpty) {
|
||||
await Providers.server.loadLocalData();
|
||||
}
|
||||
_serverProvider.startAutoRefresh();
|
||||
Providers.server.startAutoRefresh();
|
||||
}
|
||||
|
||||
List<String> _filterServers(ServerProvider pro) => pro.serverOrder
|
||||
|
||||
@@ -12,6 +12,7 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/extension/locale.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/stringx.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../../core/persistant_store.dart';
|
||||
@@ -21,12 +22,10 @@ import '../../../core/utils/platform.dart';
|
||||
import '../../../core/update.dart';
|
||||
import '../../../data/model/app/net_view.dart';
|
||||
import '../../../data/provider/app.dart';
|
||||
import '../../../data/provider/server.dart';
|
||||
import '../../../data/res/build_data.dart';
|
||||
import '../../../data/res/color.dart';
|
||||
import '../../../data/res/path.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/color_picker.dart';
|
||||
import '../../widget/custom_appbar.dart';
|
||||
import '../../widget/future_widget.dart';
|
||||
@@ -52,7 +51,6 @@ class _SettingPageState extends State<SettingPage> {
|
||||
final _keyboardTypeKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final _rotateQuarterKey = GlobalKey<PopupMenuButtonState<int>>();
|
||||
final _netViewTypeKey = GlobalKey<PopupMenuButtonState<NetViewType>>();
|
||||
final _serverProvider = locator<ServerProvider>();
|
||||
final _setting = Stores.setting;
|
||||
|
||||
late S _s;
|
||||
@@ -108,8 +106,8 @@ class _SettingPageState extends State<SettingPage> {
|
||||
appBar: CustomAppBar(
|
||||
title: Text(_s.setting),
|
||||
actions: [
|
||||
IconButton(
|
||||
onPressed: () => context.showRoundDialog(
|
||||
InkWell(
|
||||
onTap: () => context.showRoundDialog(
|
||||
title: Text(_s.attention),
|
||||
child: Text(_s.sureDelete(_s.all)),
|
||||
actions: [
|
||||
@@ -123,7 +121,26 @@ class _SettingPageState extends State<SettingPage> {
|
||||
),
|
||||
],
|
||||
),
|
||||
icon: const Icon(Icons.delete),
|
||||
onDoubleTap: () => context.showRoundDialog(
|
||||
title: Text(_s.attention),
|
||||
child: Text(_s.sureDelete(_s.all)),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Stores.docker.box.deleteFromDisk();
|
||||
Stores.server.box.deleteFromDisk();
|
||||
Stores.setting.box.deleteFromDisk();
|
||||
Stores.history.box.deleteFromDisk();
|
||||
Stores.snippet.box.deleteFromDisk();
|
||||
Stores.key.box.deleteFromDisk();
|
||||
context.pop();
|
||||
context.showSnackBar(_s.success);
|
||||
},
|
||||
child: Text(_s.ok, style: const TextStyle(color: Colors.red)),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: const Icon(Icons.delete),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -282,7 +299,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
onSelected: (int val) {
|
||||
_updateInterval.value = val;
|
||||
_setting.serverStatusUpdateInterval.put(val);
|
||||
_serverProvider.startAutoRefresh();
|
||||
Providers.server.startAutoRefresh();
|
||||
if (val == 0) {
|
||||
context.showSnackBar(_s.updateIntervalEqual0);
|
||||
}
|
||||
@@ -968,7 +985,7 @@ class _SettingPageState extends State<SettingPage> {
|
||||
child: Text(_s.sureDelete(e)),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => _serverProvider.delServer(e),
|
||||
onPressed: () => Providers.server.delServer(e),
|
||||
child: Text(_s.ok),
|
||||
)
|
||||
],
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:toolbox/core/extension/order.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/view/widget/round_rect_card.dart';
|
||||
|
||||
import '../../../data/provider/server.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/custom_appbar.dart';
|
||||
|
||||
class ServerOrderPage extends StatefulWidget {
|
||||
@@ -16,8 +15,6 @@ class ServerOrderPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ServerOrderPageState extends State<ServerOrderPage> {
|
||||
final _provider = locator<ServerProvider>();
|
||||
|
||||
late S _s;
|
||||
|
||||
@override
|
||||
@@ -40,7 +37,7 @@ class _ServerOrderPageState extends State<ServerOrderPage> {
|
||||
return ReorderableListView.builder(
|
||||
footer: const SizedBox(height: 77),
|
||||
onReorder: (oldIndex, newIndex) => setState(() {
|
||||
_provider.serverOrder.move(
|
||||
Providers.server.serverOrder.move(
|
||||
oldIndex,
|
||||
newIndex,
|
||||
property: Stores.setting.serverOrder,
|
||||
@@ -49,13 +46,13 @@ class _ServerOrderPageState extends State<ServerOrderPage> {
|
||||
padding: const EdgeInsets.symmetric(horizontal: 7, vertical: 3),
|
||||
buildDefaultDragHandles: false,
|
||||
itemBuilder: (_, index) =>
|
||||
_buildItem(index, _provider.serverOrder[index]),
|
||||
itemCount: _provider.serverOrder.length,
|
||||
_buildItem(index, Providers.server.serverOrder[index]),
|
||||
itemCount: Providers.server.serverOrder.length,
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildItem(int index, String id) {
|
||||
final spi = _provider.servers[id]?.spi;
|
||||
final spi = Providers.server.servers[id]?.spi;
|
||||
if (spi == null) {
|
||||
return const SizedBox();
|
||||
}
|
||||
|
||||
@@ -3,12 +3,11 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/view/widget/input_field.dart';
|
||||
|
||||
import '../../../data/model/server/snippet.dart';
|
||||
import '../../../data/provider/snippet.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/custom_appbar.dart';
|
||||
import '../../widget/tag.dart';
|
||||
|
||||
@@ -28,17 +27,10 @@ class _SnippetEditPageState extends State<SnippetEditPage>
|
||||
final _noteController = TextEditingController();
|
||||
final _scriptNode = FocusNode();
|
||||
|
||||
late SnippetProvider _provider;
|
||||
late S _s;
|
||||
|
||||
List<String> _tags = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_provider = locator<SnippetProvider>();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
@@ -72,7 +64,7 @@ class _SnippetEditPageState extends State<SnippetEditPage>
|
||||
return [
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
_provider.del(widget.snippet!);
|
||||
Providers.snippet.del(widget.snippet!);
|
||||
context.pop();
|
||||
},
|
||||
tooltip: _s.delete,
|
||||
@@ -100,9 +92,9 @@ class _SnippetEditPageState extends State<SnippetEditPage>
|
||||
note: note.isEmpty ? null : note,
|
||||
);
|
||||
if (widget.snippet != null) {
|
||||
_provider.update(widget.snippet!, snippet);
|
||||
Providers.snippet.update(widget.snippet!, snippet);
|
||||
} else {
|
||||
_provider.add(snippet);
|
||||
Providers.snippet.add(snippet);
|
||||
}
|
||||
context.pop();
|
||||
},
|
||||
@@ -135,9 +127,9 @@ class _SnippetEditPageState extends State<SnippetEditPage>
|
||||
_tags = p0;
|
||||
}),
|
||||
s: _s,
|
||||
allTags: [..._provider.tags],
|
||||
allTags: [...Providers.server.tags],
|
||||
onRenameTag: (old, n) => setState(() {
|
||||
_provider.renameTag(old, n);
|
||||
Providers.server.renameTag(old, n);
|
||||
}),
|
||||
),
|
||||
Input(
|
||||
|
||||
@@ -3,14 +3,13 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/order.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
|
||||
import '../../../core/utils/misc.dart';
|
||||
import '../../../data/model/server/server.dart';
|
||||
import '../../../data/model/server/snippet.dart';
|
||||
import '../../../data/provider/server.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/tag.dart';
|
||||
import '/core/route.dart';
|
||||
import '/data/provider/snippet.dart';
|
||||
@@ -130,19 +129,18 @@ class _SnippetListPageState extends State<SnippetListPage> {
|
||||
}
|
||||
|
||||
Future<void> _runSnippet(Snippet snippet) async {
|
||||
final provider = locator<ServerProvider>();
|
||||
final servers = await showDialog<List<Server>>(
|
||||
context: context,
|
||||
builder: (_) => TagPicker<Server>(
|
||||
items: provider.servers.values.toList(),
|
||||
tags: provider.tags.toSet(),
|
||||
items: Providers.server.servers.values.toList(),
|
||||
tags: Providers.server.tags.toSet(),
|
||||
),
|
||||
);
|
||||
if (servers == null) {
|
||||
return;
|
||||
}
|
||||
final ids = servers.map((e) => e.spi.id).toList();
|
||||
final results = await provider.runSnippetsOnMulti(ids, [snippet]);
|
||||
final results = await Providers.server.runSnippetsMulti(ids, [snippet]);
|
||||
if (results.isNotEmpty) {
|
||||
// SERVER_NAME: RESULT
|
||||
final result = Map.fromIterables(
|
||||
|
||||
@@ -37,7 +37,7 @@ class SSHPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _SSHPageState extends State<SSHPage> {
|
||||
final _keyboard = locator<VirtualKeyboard>();
|
||||
final _keyboard = locator<VirtKeyProvider>();
|
||||
late final _terminal = Terminal(inputHandler: _keyboard);
|
||||
final TerminalController _terminalController = TerminalController();
|
||||
final List<List<VirtKey>> _virtKeysList = [];
|
||||
@@ -146,7 +146,7 @@ class _SSHPageState extends State<SSHPage> {
|
||||
child: Container(
|
||||
color: _terminalTheme.background,
|
||||
height: _virtKeysHeight,
|
||||
child: Consumer<VirtualKeyboard>(
|
||||
child: Consumer<VirtKeyProvider>(
|
||||
builder: (_, __, ___) => _buildVirtualKey(),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -6,10 +6,8 @@ import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/data/model/sftp/req.dart';
|
||||
import 'package:toolbox/data/provider/server.dart';
|
||||
import 'package:toolbox/data/provider/sftp.dart';
|
||||
import 'package:toolbox/data/res/misc.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/view/widget/input_field.dart';
|
||||
import 'package:toolbox/view/widget/picker.dart';
|
||||
import 'package:toolbox/view/widget/round_rect_card.dart';
|
||||
@@ -284,8 +282,7 @@ class _LocalStoragePageState extends State<LocalStoragePage> {
|
||||
title: Text(_s.upload),
|
||||
onTap: () async {
|
||||
context.pop();
|
||||
final serverProvider = locator<ServerProvider>();
|
||||
final ids = serverProvider.serverOrder;
|
||||
final ids = Providers.server.serverOrder;
|
||||
var idx = 0;
|
||||
await context.showRoundDialog(
|
||||
title: Text(_s.server),
|
||||
@@ -299,7 +296,7 @@ class _LocalStoragePageState extends State<LocalStoragePage> {
|
||||
],
|
||||
);
|
||||
final id = ids[idx];
|
||||
final spi = serverProvider.servers[id]?.spi;
|
||||
final spi = Providers.server.servers[id]?.spi;
|
||||
if (spi == null) {
|
||||
return;
|
||||
}
|
||||
@@ -310,7 +307,7 @@ class _LocalStoragePageState extends State<LocalStoragePage> {
|
||||
if (remotePath == null) {
|
||||
return;
|
||||
}
|
||||
locator<SftpProvider>().add(SftpReq(
|
||||
Providers.sftp.add(SftpReq(
|
||||
spi,
|
||||
'$remotePath/$fileName',
|
||||
file.absolute.path,
|
||||
|
||||
@@ -10,6 +10,7 @@ import 'package:toolbox/core/extension/context/snackbar.dart';
|
||||
import 'package:toolbox/core/extension/sftpfile.dart';
|
||||
import 'package:toolbox/data/res/logger.dart';
|
||||
import 'package:toolbox/data/res/misc.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
import 'package:toolbox/data/res/store.dart';
|
||||
import 'package:toolbox/view/widget/round_rect_card.dart';
|
||||
|
||||
@@ -22,11 +23,8 @@ import '../../../data/model/server/server_private_info.dart';
|
||||
import '../../../data/model/sftp/absolute_path.dart';
|
||||
import '../../../data/model/sftp/browser_status.dart';
|
||||
import '../../../data/model/sftp/req.dart';
|
||||
import '../../../data/provider/server.dart';
|
||||
import '../../../data/provider/sftp.dart';
|
||||
import '../../../data/res/path.dart';
|
||||
import '../../../data/res/ui.dart';
|
||||
import '../../../locator.dart';
|
||||
import '../../widget/custom_appbar.dart';
|
||||
import '../../widget/fade_in.dart';
|
||||
import '../../widget/input_field.dart';
|
||||
@@ -51,8 +49,6 @@ class SftpPage extends StatefulWidget {
|
||||
class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
||||
final SftpBrowserStatus _status = SftpBrowserStatus();
|
||||
|
||||
final _sftp = locator<SftpProvider>();
|
||||
|
||||
late S _s;
|
||||
|
||||
SSHClient? _client;
|
||||
@@ -66,8 +62,7 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
final serverProvider = locator<ServerProvider>();
|
||||
_client = serverProvider.servers[widget.spi.id]?.client;
|
||||
_client = Providers.server.servers[widget.spi.id]?.client;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -184,7 +179,7 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
||||
context.showSnackBar('remote path is null');
|
||||
return;
|
||||
}
|
||||
_sftp.add(
|
||||
Providers.sftp.add(
|
||||
SftpReq(
|
||||
widget.spi,
|
||||
'$remotePath/${path.split('/').last}',
|
||||
@@ -382,14 +377,15 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
||||
localPath,
|
||||
SftpReqType.download,
|
||||
);
|
||||
_sftp.add(req, completer: completer);
|
||||
Providers.sftp.add(req, completer: completer);
|
||||
context.showLoadingDialog();
|
||||
await completer.future;
|
||||
context.pop();
|
||||
|
||||
final result = await AppRoute.editor(path: localPath).go<bool>(context);
|
||||
if (result != null && result) {
|
||||
_sftp.add(SftpReq(req.spi, remotePath, localPath, SftpReqType.upload));
|
||||
Providers.sftp
|
||||
.add(SftpReq(req.spi, remotePath, localPath, SftpReqType.upload));
|
||||
context.showSnackBar(_s.added2List);
|
||||
}
|
||||
}
|
||||
@@ -408,7 +404,7 @@ class _SftpPageState extends State<SftpPage> with AfterLayoutMixin {
|
||||
context.pop();
|
||||
final remotePath = _getRemotePath(name);
|
||||
|
||||
_sftp.add(
|
||||
Providers.sftp.add(
|
||||
SftpReq(
|
||||
widget.spi,
|
||||
remotePath,
|
||||
|
||||
@@ -5,7 +5,7 @@ import 'package:toolbox/core/extension/context/common.dart';
|
||||
import 'package:toolbox/core/extension/datetime.dart';
|
||||
import 'package:toolbox/core/extension/context/dialog.dart';
|
||||
import 'package:toolbox/core/route.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
|
||||
import '../../../core/extension/numx.dart';
|
||||
import '../../../core/utils/misc.dart';
|
||||
@@ -149,7 +149,7 @@ class _SftpMissionPageState extends State<SftpMissionPage> {
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
locator<SftpProvider>().cancel(id);
|
||||
Providers.sftp.cancel(id);
|
||||
context.pop();
|
||||
},
|
||||
child: Text(_s.ok),
|
||||
|
||||
@@ -9,6 +9,7 @@ import 'package:toolbox/core/extension/ssh_client.dart';
|
||||
import 'package:toolbox/core/extension/uint8list.dart';
|
||||
import 'package:toolbox/data/model/pkg/manager.dart';
|
||||
import 'package:toolbox/data/model/server/dist.dart';
|
||||
import 'package:toolbox/data/res/provider.dart';
|
||||
|
||||
import '../../core/route.dart';
|
||||
import '../../core/utils/misc.dart';
|
||||
@@ -18,9 +19,6 @@ import '../../data/model/app/menu.dart';
|
||||
import '../../data/model/pkg/upgrade_info.dart';
|
||||
import '../../data/model/server/server_private_info.dart';
|
||||
import '../../data/model/server/snippet.dart';
|
||||
import '../../data/provider/server.dart';
|
||||
import '../../data/provider/snippet.dart';
|
||||
import '../../locator.dart';
|
||||
import 'popup_menu.dart';
|
||||
import 'tag.dart';
|
||||
|
||||
@@ -102,19 +100,17 @@ void _onTapMoreBtns(
|
||||
);
|
||||
break;
|
||||
case ServerTabMenuType.snippet:
|
||||
final provider = locator<SnippetProvider>();
|
||||
final snippets = await showDialog<List<Snippet>>(
|
||||
context: context,
|
||||
builder: (_) => TagPicker<Snippet>(
|
||||
items: provider.snippets,
|
||||
tags: provider.tags.toSet(),
|
||||
items: Providers.snippet.snippets,
|
||||
tags: Providers.server.tags.toSet(),
|
||||
),
|
||||
);
|
||||
if (snippets == null) {
|
||||
return;
|
||||
}
|
||||
final result =
|
||||
await locator<ServerProvider>().runSnippets(spi.id, snippets);
|
||||
final result = await Providers.server.runSnippets(spi.id, snippets);
|
||||
if (result != null && result.isNotEmpty) {
|
||||
context.showRoundDialog(
|
||||
title: Text(s.result),
|
||||
@@ -196,7 +192,7 @@ Future<void> _gotoSSH(
|
||||
}
|
||||
|
||||
bool _checkClient(BuildContext context, String id, String msg) {
|
||||
final server = locator<ServerProvider>().servers[id];
|
||||
final server = Providers.server.servers[id];
|
||||
if (server == null || server.client == null) {
|
||||
context.showSnackBar(msg);
|
||||
return false;
|
||||
@@ -205,7 +201,7 @@ bool _checkClient(BuildContext context, String id, String msg) {
|
||||
}
|
||||
|
||||
Future<void> _onPkg(BuildContext context, S s, ServerPrivateInfo spi) async {
|
||||
final server = locator<ServerProvider>().servers[spi.id];
|
||||
final server = spi.findServer;
|
||||
if (server == null) {
|
||||
context.showSnackBar(s.noClient);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user