This commit is contained in:
lollipopkit
2023-07-07 21:09:29 +08:00
parent bb50fbc589
commit cb16b3a8b6
5 changed files with 122 additions and 116 deletions

View File

@@ -121,7 +121,7 @@ Future<void> loadFontFile(String? localPath) async {
void showSnippetDialog( void showSnippetDialog(
BuildContext context, BuildContext context,
S s, S s,
Function(Snippet s) onSelected, void Function(Snippet s) onSelected,
) { ) {
final provider = locator<SnippetProvider>(); final provider = locator<SnippetProvider>();
if (provider.snippets.isEmpty) { if (provider.snippets.isEmpty) {

View File

@@ -68,19 +68,20 @@ class _PrivateKeyEditPageState extends State<PrivateKeyEditPage>
} }
PreferredSizeWidget _buildAppBar() { PreferredSizeWidget _buildAppBar() {
return AppBar( final actions = widget.info == null
title: Text(_s.edit, style: textSize18), ? null
actions: [ : [
widget.info != null IconButton(
? IconButton(
tooltip: _s.delete, tooltip: _s.delete,
onPressed: () { onPressed: () {
_provider.delInfo(widget.info!); _provider.delInfo(widget.info!);
context.pop(); context.pop();
}, },
icon: const Icon(Icons.delete)) icon: const Icon(Icons.delete))
: nil ];
], return AppBar(
title: Text(_s.edit, style: textSize18),
actions: actions,
); );
} }

View File

@@ -1,10 +1,10 @@
import 'package:after_layout/after_layout.dart'; import 'package:after_layout/after_layout.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:nil/nil.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:toolbox/core/extension/navigator.dart'; import 'package:toolbox/core/extension/navigator.dart';
import 'package:toolbox/view/widget/input_field.dart'; import 'package:toolbox/view/widget/input_field.dart';
import 'package:toolbox/view/widget/round_rect_card.dart';
import '../../../core/route.dart'; import '../../../core/route.dart';
import '../../../core/utils/ui.dart'; import '../../../core/utils/ui.dart';
@@ -97,90 +97,91 @@ class _ServerEditPageState extends State<ServerEditPage> with AfterLayoutMixin {
}, },
icon: const Icon(Icons.delete), icon: const Icon(Icons.delete),
); );
final actions = widget.spi != null ? [delBtn] : null;
return AppBar( return AppBar(
title: Text(_s.edit, style: textSize18), title: Text(_s.edit, style: textSize18),
actions: [ actions: actions,
widget.spi != null ? delBtn : nil,
],
); );
} }
Widget _buildForm() { Widget _buildForm() {
final children = [
Input(
controller: _nameController,
type: TextInputType.text,
node: _nameFocus,
onSubmitted: (_) => _focusScope.requestFocus(_ipFocus),
hint: _s.exampleName,
label: _s.name,
icon: Icons.info,
),
Input(
controller: _ipController,
type: TextInputType.text,
onSubmitted: (_) => _focusScope.requestFocus(_portFocus),
node: _ipFocus,
label: _s.host,
icon: Icons.storage,
hint: 'example.com',
),
Input(
controller: _portController,
type: TextInputType.number,
node: _portFocus,
onSubmitted: (_) => _focusScope.requestFocus(_usernameFocus),
label: _s.port,
icon: Icons.format_list_numbered,
hint: '22',
),
Input(
controller: _usernameController,
type: TextInputType.text,
node: _usernameFocus,
label: _s.user,
icon: Icons.account_box,
hint: 'root',
),
TagEditor(
tags: _tags,
onChanged: (p0) => setState(() {
_tags = p0;
}),
s: _s,
tagSuggestions: [..._serverProvider.tags],
onRenameTag: _serverProvider.renameTag,
),
width7,
Row(
children: [
width13,
Text(_s.keyAuth),
width13,
Switch(
value: usePublicKey,
onChanged: (val) => setState(() => usePublicKey = val),
),
],
),
];
if (usePublicKey) {
children.add(_buildKeyAuth());
} else {
children.add(Input(
controller: _passwordController,
obscureText: true,
type: TextInputType.text,
label: _s.pwd,
icon: Icons.password,
hint: _s.pwd,
onSubmitted: (_) => {},
));
}
return SingleChildScrollView( return SingleChildScrollView(
padding: const EdgeInsets.all(17), padding: const EdgeInsets.fromLTRB(17, 17, 17, 47),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: children,
Input(
controller: _nameController,
type: TextInputType.text,
node: _nameFocus,
onSubmitted: (_) => _focusScope.requestFocus(_ipFocus),
hint: _s.exampleName,
label: _s.name,
icon: Icons.info,
),
Input(
controller: _ipController,
type: TextInputType.text,
onSubmitted: (_) => _focusScope.requestFocus(_portFocus),
node: _ipFocus,
label: _s.host,
icon: Icons.storage,
hint: 'example.com',
),
Input(
controller: _portController,
type: TextInputType.number,
node: _portFocus,
onSubmitted: (_) => _focusScope.requestFocus(_usernameFocus),
label: _s.port,
icon: Icons.format_list_numbered,
hint: '22',
),
Input(
controller: _usernameController,
type: TextInputType.text,
node: _usernameFocus,
label: _s.user,
icon: Icons.account_box,
hint: 'root',
),
TagEditor(
tags: _tags,
onChanged: (p0) => setState(() {
_tags = p0;
}),
s: _s,
tagSuggestions: [..._serverProvider.tags],
onRenameTag: _serverProvider.renameTag,
),
width7,
Row(
children: [
width13,
Text(_s.keyAuth),
width13,
Switch(
value: usePublicKey,
onChanged: (val) => setState(() => usePublicKey = val),
),
],
),
!usePublicKey
? Input(
controller: _passwordController,
obscureText: true,
type: TextInputType.text,
label: _s.pwd,
icon: Icons.password,
hint: _s.pwd,
onSubmitted: (_) => {},
)
: nil,
usePublicKey ? _buildKeyAuth() : nil
],
), ),
); );
} }
@@ -215,11 +216,12 @@ class _ServerEditPageState extends State<ServerEditPage> with AfterLayoutMixin {
), ),
), ),
); );
return Padding( return RoundRectCard(
padding: const EdgeInsets.symmetric(horizontal: 17), Padding(
child: Column( padding: const EdgeInsets.symmetric(horizontal: 17),
children: tiles, child: Column(
), children: tiles,
)),
); );
}, },
); );

View File

@@ -4,7 +4,6 @@ import 'dart:typed_data';
import 'package:dartssh2/dartssh2.dart'; import 'package:dartssh2/dartssh2.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:nil/nil.dart';
import 'package:toolbox/core/extension/navigator.dart'; import 'package:toolbox/core/extension/navigator.dart';
import 'package:toolbox/core/extension/sftpfile.dart'; import 'package:toolbox/core/extension/sftpfile.dart';
import 'package:toolbox/data/res/misc.dart'; import 'package:toolbox/data/res/misc.dart';
@@ -119,7 +118,6 @@ class _SFTPPageState extends State<SFTPPage> {
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
const Divider(),
(_status.path?.path ?? _s.loadingFiles).omitStartStr(), (_status.path?.path ?? _s.loadingFiles).omitStartStr(),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.spaceAround,
@@ -299,36 +297,37 @@ class _SFTPPageState extends State<SFTPPage> {
} }
void _onItemPress(BuildContext context, SftpName file, bool notDir) { void _onItemPress(BuildContext context, SftpName file, bool notDir) {
final children = [
ListTile(
leading: const Icon(Icons.delete),
title: Text(_s.delete),
onTap: () => _delete(context, file),
),
ListTile(
leading: const Icon(Icons.abc),
title: Text(_s.rename),
onTap: () => _rename(context, file),
),
];
if (notDir) {
children.addAll([
ListTile(
leading: const Icon(Icons.edit),
title: Text(_s.edit),
onTap: () => _edit(context, file),
),
ListTile(
leading: const Icon(Icons.download),
title: Text(_s.download),
onTap: () => _download(context, file),
),
]);
}
showRoundDialog( showRoundDialog(
context: context, context: context,
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: children,
notDir
? ListTile(
leading: const Icon(Icons.edit),
title: Text(_s.edit),
onTap: () => _edit(context, file),
)
: nil,
ListTile(
leading: const Icon(Icons.delete),
title: Text(_s.delete),
onTap: () => _delete(context, file),
),
ListTile(
leading: const Icon(Icons.abc),
title: Text(_s.rename),
onTap: () => _rename(context, file),
),
notDir
? ListTile(
leading: const Icon(Icons.download),
title: Text(_s.download),
onTap: () => _download(context, file),
)
: nil,
],
), ),
); );
} }

View File

@@ -131,6 +131,10 @@ class _SnippetEditPageState extends State<SnippetEditPage>
if (widget.snippet != null) { if (widget.snippet != null) {
_nameController.text = widget.snippet!.name; _nameController.text = widget.snippet!.name;
_scriptController.text = widget.snippet!.script; _scriptController.text = widget.snippet!.script;
if (widget.snippet!.tags != null) {
_tags = widget.snippet!.tags!;
setState(() {});
}
} }
} }
} }