fix & opt.

This commit is contained in:
lollipopkit
2023-01-28 15:35:19 +08:00
parent 0e8a8056f8
commit be1a162632
18 changed files with 197 additions and 250 deletions

View File

@@ -0,0 +1,16 @@
import '../server/server_private_info.dart';
class DownloadItem {
DownloadItem(this.spi, this.remotePath, this.localPath);
final ServerPrivateInfo spi;
final String remotePath;
final String localPath;
}
class DownloadItemEvent {
DownloadItemEvent(this.item, this.privateKey);
final DownloadItem item;
final String? privateKey;
}

View File

@@ -1,5 +1,7 @@
import 'package:toolbox/data/model/sftp/download_worker.dart'; import 'package:toolbox/data/model/sftp/download_worker.dart';
import 'download_item.dart';
class SftpDownloadStatus { class SftpDownloadStatus {
final int id; final int id;
final DownloadItem item; final DownloadItem item;

View File

@@ -4,16 +4,9 @@ import 'dart:isolate';
import 'package:dartssh2/dartssh2.dart'; import 'package:dartssh2/dartssh2.dart';
import 'package:easy_isolate/easy_isolate.dart'; import 'package:easy_isolate/easy_isolate.dart';
import 'package:toolbox/data/model/server/server_private_info.dart';
import 'package:toolbox/data/model/sftp/download_status.dart';
class DownloadItem { import 'download_item.dart';
DownloadItem(this.spi, this.remotePath, this.localPath); import 'download_status.dart';
final ServerPrivateInfo spi;
final String remotePath;
final String localPath;
}
class SftpDownloadWorker { class SftpDownloadWorker {
SftpDownloadWorker( SftpDownloadWorker(
@@ -101,10 +94,3 @@ class SftpDownloadWorker {
} }
} }
} }
class DownloadItemEvent {
DownloadItemEvent(this.item, this.privateKey);
final DownloadItem item;
final String? privateKey;
}

View File

@@ -1,6 +1,7 @@
import 'package:toolbox/core/provider_base.dart'; import 'package:toolbox/core/provider_base.dart';
import 'package:toolbox/data/model/sftp/download_status.dart';
import 'package:toolbox/data/model/sftp/download_worker.dart'; import '../model/sftp/download_item.dart';
import '../model/sftp/download_status.dart';
class SftpDownloadProvider extends ProviderBase { class SftpDownloadProvider extends ProviderBase {
final List<SftpDownloadStatus> _status = []; final List<SftpDownloadStatus> _status = [];

View File

@@ -2,9 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 187; static const int build = 189;
static const String engine = static const String engine =
"Flutter 3.7.0 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision b06b8b2710 (4 days ago) • 2023-01-23 16:55:55 -0800\nEngine • revision b24591ed32\nTools • Dart 2.19.0 • DevTools 2.20.1\n"; "Flutter 3.7.0 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision b06b8b2710 (4 days ago) • 2023-01-23 16:55:55 -0800\nEngine • revision b24591ed32\nTools • Dart 2.19.0 • DevTools 2.20.1\n";
static const String buildAt = "2023-01-28 13:54:17.985459"; static const String buildAt = "2023-01-28 14:28:14.979200";
static const int modifications = 13; static const int modifications = 2;
} }

View File

@@ -1,3 +1,3 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
const roundRectCardPadding = EdgeInsets.symmetric(horizontal: 17); const roundRectCardPadding = EdgeInsets.symmetric(horizontal: 17, vertical: 13);

View File

@@ -6,7 +6,7 @@ class SettingStore extends PersistentStore {
property('primaryColor', defaultValue: Colors.deepPurpleAccent.value); property('primaryColor', defaultValue: Colors.deepPurpleAccent.value);
StoreProperty<int> get serverStatusUpdateInterval => StoreProperty<int> get serverStatusUpdateInterval =>
property('serverStatusUpdateInterval', defaultValue: 5); property('serverStatusUpdateInterval', defaultValue: 3);
/// Lanch page idx /// Lanch page idx
StoreProperty<int> get launchPage => property('launchPage', defaultValue: 0); StoreProperty<int> get launchPage => property('launchPage', defaultValue: 0);

View File

@@ -133,8 +133,6 @@ class MessageLookup extends MessageLookupByLibrary {
"files": MessageLookupByLibrary.simpleMessage("Files"), "files": MessageLookupByLibrary.simpleMessage("Files"),
"foundNUpdate": m5, "foundNUpdate": m5,
"go": MessageLookupByLibrary.simpleMessage("Go"), "go": MessageLookupByLibrary.simpleMessage("Go"),
"goSftpDlPage":
MessageLookupByLibrary.simpleMessage("Go to SFTP download page?"),
"goto": MessageLookupByLibrary.simpleMessage("Go to"), "goto": MessageLookupByLibrary.simpleMessage("Go to"),
"host": MessageLookupByLibrary.simpleMessage("Host"), "host": MessageLookupByLibrary.simpleMessage("Host"),
"httpFailedWithCode": m6, "httpFailedWithCode": m6,

View File

@@ -121,7 +121,6 @@ class MessageLookup extends MessageLookupByLibrary {
"files": MessageLookupByLibrary.simpleMessage("文件"), "files": MessageLookupByLibrary.simpleMessage("文件"),
"foundNUpdate": m5, "foundNUpdate": m5,
"go": MessageLookupByLibrary.simpleMessage("开始"), "go": MessageLookupByLibrary.simpleMessage("开始"),
"goSftpDlPage": MessageLookupByLibrary.simpleMessage("前往下载页?"),
"goto": MessageLookupByLibrary.simpleMessage("前往"), "goto": MessageLookupByLibrary.simpleMessage("前往"),
"host": MessageLookupByLibrary.simpleMessage("主机"), "host": MessageLookupByLibrary.simpleMessage("主机"),
"httpFailedWithCode": m6, "httpFailedWithCode": m6,

View File

@@ -1051,16 +1051,6 @@ class S {
); );
} }
/// `Go to SFTP download page?`
String get goSftpDlPage {
return Intl.message(
'Go to SFTP download page?',
name: 'goSftpDlPage',
desc: '',
args: [],
);
}
/// `Create folder` /// `Create folder`
String get createFolder { String get createFolder {
return Intl.message( return Intl.message(

View File

@@ -99,7 +99,6 @@
"install": "install", "install": "install",
"loadingFiles": "Loading files...", "loadingFiles": "Loading files...",
"sftpNoDownloadTask": "No download task.", "sftpNoDownloadTask": "No download task.",
"goSftpDlPage": "Go to SFTP download page?",
"createFolder": "Create folder", "createFolder": "Create folder",
"createFile": "Create file", "createFile": "Create file",
"rename": "Rename", "rename": "Rename",

View File

@@ -99,7 +99,6 @@
"install": "安装", "install": "安装",
"loadingFiles": "正在加载目录。。。", "loadingFiles": "正在加载目录。。。",
"sftpNoDownloadTask": "没有下载任务", "sftpNoDownloadTask": "没有下载任务",
"goSftpDlPage": "前往下载页?",
"createFolder": "创建文件夹", "createFolder": "创建文件夹",
"createFile": "创建文件", "createFile": "创建文件",
"rename": "重命名", "rename": "重命名",

View File

@@ -3,7 +3,6 @@ import 'package:provider/provider.dart';
import 'package:toolbox/core/route.dart'; import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/provider/private_key.dart'; import 'package:toolbox/data/provider/private_key.dart';
import 'package:toolbox/data/res/font_style.dart'; import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/data/res/padding.dart';
import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/view/page/private_key/edit.dart'; import 'package:toolbox/view/page/private_key/edit.dart';
import 'package:toolbox/view/widget/round_rect_card.dart'; import 'package:toolbox/view/widget/round_rect_card.dart';
@@ -32,35 +31,30 @@ class _PrivateKeyListState extends State<StoredPrivateKeysPage> {
), ),
body: Consumer<PrivateKeyProvider>( body: Consumer<PrivateKeyProvider>(
builder: (_, key, __) { builder: (_, key, __) {
return key.infos.isNotEmpty if (key.infos.isEmpty) {
? ListView.builder( return Center(
child: Text(_s.noSavedPrivateKey),
);
}
return ListView.builder(
padding: const EdgeInsets.all(13), padding: const EdgeInsets.all(13),
itemCount: key.infos.length, itemCount: key.infos.length,
itemExtent: 57,
itemBuilder: (context, idx) { itemBuilder: (context, idx) {
return RoundRectCard(Padding( return RoundRectCard(
padding: roundRectCardPadding, ListTile(
child: Row( title: Text(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
key.infos[idx].id, key.infos[idx].id,
textAlign: TextAlign.center,
), ),
TextButton( trailing: TextButton(
onPressed: () => AppRoute( onPressed: () => AppRoute(
PrivateKeyEditPage(info: key.infos[idx]), PrivateKeyEditPage(info: key.infos[idx]),
'private key edit page') 'private key edit page')
.go(context), .go(context),
child: Text(_s.edit), child: Text(_s.edit),
)
],
), ),
)); ),
}) );
: Center( },
child: Text(_s.noSavedPrivateKey),
); );
}, },
), ),

View File

@@ -23,6 +23,10 @@ class ServerDetailPage extends StatefulWidget {
_ServerDetailPageState createState() => _ServerDetailPageState(); _ServerDetailPageState createState() => _ServerDetailPageState();
} }
const width13 = SizedBox(
width: 13,
);
class _ServerDetailPageState extends State<ServerDetailPage> class _ServerDetailPageState extends State<ServerDetailPage>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
late MediaQueryData _media; late MediaQueryData _media;
@@ -92,37 +96,37 @@ class _ServerDetailPageState extends State<ServerDetailPage>
} }
Widget _buildCPUView(ServerStatus ss) { Widget _buildCPUView(ServerStatus ss) {
final tempWidget = ss.cpu2Status.temp.isEmpty
? const SizedBox()
: Text(
ss.cpu2Status.temp,
style: textSize13Grey,
);
return RoundRectCard( return RoundRectCard(
Padding( Padding(
padding: roundRectCardPadding, padding: roundRectCardPadding,
child: SizedBox( child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
height: 12 * ss.cpu2Status.coresCount + 63,
child: Column(children: [
SizedBox(
height: _media.size.height * 0.02,
),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [ children: [
Text( Text(
'${ss.cpu2Status.usedPercent(coreIdx: 0).toInt()}%', '${ss.cpu2Status.usedPercent(coreIdx: 0).toInt()}%',
style: textSize27, style: textSize27,
textScaleFactor: 1.0, textScaleFactor: 1.0,
), ),
tempWidget
],
),
Row( Row(
children: [ children: [
_buildDetailPercent(ss.cpu2Status.user, 'user'), _buildDetailPercent(ss.cpu2Status.user, 'user'),
SizedBox( width13,
width: _media.size.width * 0.03,
),
_buildDetailPercent(ss.cpu2Status.sys, 'sys'), _buildDetailPercent(ss.cpu2Status.sys, 'sys'),
SizedBox( width13,
width: _media.size.width * 0.03,
),
_buildDetailPercent(ss.cpu2Status.iowait, 'io'), _buildDetailPercent(ss.cpu2Status.iowait, 'io'),
SizedBox( width13,
width: _media.size.width * 0.03,
),
_buildDetailPercent(ss.cpu2Status.idle, 'idle') _buildDetailPercent(ss.cpu2Status.idle, 'idle')
], ],
) )
@@ -131,7 +135,6 @@ class _ServerDetailPageState extends State<ServerDetailPage>
_buildCPUProgress(ss) _buildCPUProgress(ss)
]), ]),
), ),
),
); );
} }
@@ -180,13 +183,13 @@ class _ServerDetailPageState extends State<ServerDetailPage>
value: percentWithinOne, value: percentWithinOne,
minHeight: 7, minHeight: 7,
backgroundColor: progressColor.resolve(context), backgroundColor: progressColor.resolve(context),
color: pColor.withOpacity(0.5 + percentWithinOne / 2), color: pColor,
); );
} }
Widget _buildUpTimeAndSys(ServerStatus ss) { Widget _buildUpTimeAndSys(ServerStatus ss) {
return RoundRectCard(Padding( return RoundRectCard(Padding(
padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 17), padding: roundRectCardPadding,
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
@@ -208,8 +211,6 @@ class _ServerDetailPageState extends State<ServerDetailPage>
return RoundRectCard(Padding( return RoundRectCard(Padding(
padding: roundRectCardPadding, padding: roundRectCardPadding,
child: SizedBox(
height: 70,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@@ -228,9 +229,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
Row( Row(
children: [ children: [
_buildDetailPercent(free, 'free'), _buildDetailPercent(free, 'free'),
SizedBox( width13,
width: _media.size.width * 0.03,
),
_buildDetailPercent(avail, 'avail'), _buildDetailPercent(avail, 'avail'),
], ],
), ),
@@ -242,7 +241,6 @@ class _ServerDetailPageState extends State<ServerDetailPage>
_buildProgress(used) _buildProgress(used)
], ],
), ),
),
)); ));
} }
@@ -253,17 +251,11 @@ class _ServerDetailPageState extends State<ServerDetailPage>
clone.remove(item); clone.remove(item);
} }
} }
return RoundRectCard(SizedBox( final children = clone
height: 27 * clone.length + 25, .map((disk) => Padding(
child: ListView.builder(
padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 17),
physics: const NeverScrollableScrollPhysics(),
itemCount: clone.length,
itemBuilder: (_, idx) {
final disk = clone[idx];
return Padding(
padding: const EdgeInsets.all(3), padding: const EdgeInsets.all(3),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -280,8 +272,14 @@ class _ServerDetailPageState extends State<ServerDetailPage>
_buildProgress(disk.usedPercent.toDouble()) _buildProgress(disk.usedPercent.toDouble())
], ],
), ),
); ))
}), .toList();
return RoundRectCard(Padding(
padding: roundRectCardPadding,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: children,
),
)); ));
} }
@@ -304,7 +302,7 @@ class _ServerDetailPageState extends State<ServerDetailPage>
} }
return RoundRectCard(Padding( return RoundRectCard(Padding(
padding: const EdgeInsets.symmetric(vertical: 7, horizontal: 17), padding: roundRectCardPadding,
child: Column( child: Column(
children: children, children: children,
), ),

View File

@@ -8,7 +8,6 @@ import 'package:toolbox/data/provider/server.dart';
import 'package:toolbox/data/res/build_data.dart'; import 'package:toolbox/data/res/build_data.dart';
import 'package:toolbox/data/res/color.dart'; import 'package:toolbox/data/res/color.dart';
import 'package:toolbox/data/res/font_style.dart'; import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/data/res/padding.dart';
import 'package:toolbox/data/res/tab.dart'; import 'package:toolbox/data/res/tab.dart';
import 'package:toolbox/data/store/setting.dart'; import 'package:toolbox/data/store/setting.dart';
import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/generated/l10n.dart';
@@ -99,7 +98,6 @@ class _SettingPageState extends State<SettingPage> {
display = _s.versionUnknownUpdate(BuildData.build); display = _s.versionUnknownUpdate(BuildData.build);
} }
return ListTile( return ListTile(
contentPadding: roundRectCardPadding,
trailing: const Icon(Icons.keyboard_arrow_right), trailing: const Icon(Icons.keyboard_arrow_right),
title: Text( title: Text(
display, display,
@@ -114,8 +112,6 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildUpdateInterval() { Widget _buildUpdateInterval() {
return ExpansionTile( return ExpansionTile(
tilePadding: roundRectCardPadding,
childrenPadding: roundRectCardPadding,
textColor: priColor, textColor: priColor,
title: Text( title: Text(
_s.updateServerStatusInterval, _s.updateServerStatusInterval,
@@ -166,8 +162,6 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildAppColorPreview() { Widget _buildAppColorPreview() {
return ExpansionTile( return ExpansionTile(
textColor: priColor, textColor: priColor,
tilePadding: roundRectCardPadding,
childrenPadding: roundRectCardPadding,
trailing: ClipOval( trailing: ClipOval(
child: Container( child: Container(
color: priColor, color: priColor,
@@ -205,8 +199,6 @@ class _SettingPageState extends State<SettingPage> {
Widget _buildLaunchPage() { Widget _buildLaunchPage() {
return ExpansionTile( return ExpansionTile(
textColor: priColor, textColor: priColor,
tilePadding: roundRectCardPadding,
childrenPadding: roundRectCardPadding,
title: Text( title: Text(
_s.launchPage, _s.launchPage,
style: textSize13, style: textSize13,

View File

@@ -75,6 +75,7 @@ class _SFTPDownloadingPageState extends State<SFTPDownloadingPage> {
Widget _buildItem(SftpDownloadStatus status) { Widget _buildItem(SftpDownloadStatus status) {
if (status.error != null) { if (status.error != null) {
showSnackBar(context, Text(status.error.toString())); showSnackBar(context, Text(status.error.toString()));
status.error = null;
} }
switch (status.status) { switch (status.status) {
case SftpWorkerStatus.finished: case SftpWorkerStatus.finished:

View File

@@ -2,24 +2,25 @@ 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:toolbox/core/extension/numx.dart';
import 'package:toolbox/core/extension/stringx.dart'; import '../../../core/extension/numx.dart';
import 'package:toolbox/core/route.dart'; import '../../../core/extension/stringx.dart';
import 'package:toolbox/core/utils.dart'; import '../../../core/route.dart';
import 'package:toolbox/data/model/server/server.dart'; import '../../../core/utils.dart';
import 'package:toolbox/data/model/server/server_private_info.dart'; import '../../../data/model/server/server.dart';
import 'package:toolbox/data/model/sftp/absolute_path.dart'; import '../../../data/model/server/server_private_info.dart';
import 'package:toolbox/data/model/sftp/download_worker.dart'; import '../../../data/model/sftp/absolute_path.dart';
import 'package:toolbox/data/model/sftp/browser_status.dart'; import '../../../data/model/sftp/browser_status.dart';
import 'package:toolbox/data/provider/server.dart'; import '../../../data/model/sftp/download_item.dart';
import 'package:toolbox/data/provider/sftp_download.dart'; import '../../../data/provider/server.dart';
import 'package:toolbox/data/res/path.dart'; import '../../../data/provider/sftp_download.dart';
import 'package:toolbox/data/store/private_key.dart'; import '../../../data/res/path.dart';
import 'package:toolbox/generated/l10n.dart'; import '../../../data/store/private_key.dart';
import 'package:toolbox/locator.dart'; import '../../../generated/l10n.dart';
import 'package:toolbox/view/page/sftp/downloading.dart'; import '../../../locator.dart';
import 'package:toolbox/view/widget/fade_in.dart'; import '../../widget/fade_in.dart';
import 'package:toolbox/view/widget/two_line_text.dart'; import '../../widget/two_line_text.dart';
import 'downloading.dart';
class SFTPPage extends StatefulWidget { class SFTPPage extends StatefulWidget {
final ServerPrivateInfo spi; final ServerPrivateInfo spi;
@@ -61,6 +62,38 @@ class _SFTPPageState extends State<SFTPPage> {
centerTitle: true, centerTitle: true,
title: TwoLineText(up: 'SFTP', down: widget.spi.name), title: TwoLineText(up: 'SFTP', down: widget.spi.name),
actions: [ actions: [
IconButton(
icon: const Icon(Icons.downloading),
onPressed: () =>
AppRoute(const SFTPDownloadingPage(), 'sftp downloading')
.go(context),
),
],
),
body: _buildFileView(),
bottomNavigationBar: _buildBottom(),
);
}
Widget _buildBottom() {
return SafeArea(
child: Container(
padding: const EdgeInsets.fromLTRB(11, 7, 11, 11),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Divider(),
(_status.path?.path ?? _s.loadingFiles).omitStartStr(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
padding: const EdgeInsets.all(0),
onPressed: () async {
await backward();
},
icon: const Icon(Icons.arrow_back),
),
IconButton( IconButton(
onPressed: (() => showRoundDialog( onPressed: (() => showRoundDialog(
context, context,
@@ -85,32 +118,6 @@ class _SFTPPageState extends State<SFTPPage> {
], ],
)), )),
icon: const Icon(Icons.add), icon: const Icon(Icons.add),
)
],
),
body: _buildFileView(),
bottomNavigationBar: _buildPath(),
);
}
Widget _buildPath() {
return SafeArea(
child: Container(
padding: const EdgeInsets.fromLTRB(11, 7, 11, 11),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Divider(),
(_status.path?.path ?? _s.loadingFiles).omitStartStr(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
IconButton(
padding: const EdgeInsets.all(0),
onPressed: () async {
await backward();
},
icon: const Icon(Icons.arrow_back),
), ),
IconButton( IconButton(
padding: const EdgeInsets.all(0), padding: const EdgeInsets.all(0),
@@ -307,25 +314,6 @@ class _SFTPPageState extends State<SFTPPage> {
); );
Navigator.of(context).pop(); Navigator.of(context).pop();
showRoundDialog(
context,
_s.goSftpDlPage,
const SizedBox(),
[
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(_s.cancel),
),
TextButton(
onPressed: () {
Navigator.of(context).pop();
AppRoute(const SFTPDownloadingPage(), 'sftp downloading')
.go(context);
},
child: Text(_s.ok),
)
],
);
}, },
child: Text(_s.download), child: Text(_s.download),
) )

View File

@@ -2,9 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:toolbox/core/route.dart'; import 'package:toolbox/core/route.dart';
import 'package:toolbox/data/provider/snippet.dart'; import 'package:toolbox/data/provider/snippet.dart';
import 'package:toolbox/data/res/color.dart';
import 'package:toolbox/data/res/font_style.dart'; import 'package:toolbox/data/res/font_style.dart';
import 'package:toolbox/data/res/padding.dart';
import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/generated/l10n.dart';
import 'package:toolbox/view/page/snippet/edit.dart'; import 'package:toolbox/view/page/snippet/edit.dart';
import 'package:toolbox/view/widget/round_rect_card.dart'; import 'package:toolbox/view/widget/round_rect_card.dart';
@@ -17,8 +15,6 @@ class SnippetListPage extends StatefulWidget {
} }
class _SnippetListPageState extends State<SnippetListPage> { class _SnippetListPageState extends State<SnippetListPage> {
final _textStyle = TextStyle(color: primaryColor);
late S _s; late S _s;
@override @override
@@ -54,30 +50,18 @@ class _SnippetListPageState extends State<SnippetListPage> {
return ListView.builder( return ListView.builder(
padding: const EdgeInsets.all(13), padding: const EdgeInsets.all(13),
itemCount: key.snippets.length, itemCount: key.snippets.length,
itemExtent: 57,
itemBuilder: (context, idx) { itemBuilder: (context, idx) {
return RoundRectCard( return RoundRectCard(
Padding( ListTile(
padding: roundRectCardPadding, title: Text(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
key.snippets[idx].name, key.snippets[idx].name,
textAlign: TextAlign.center,
), ),
TextButton( trailing: TextButton(
onPressed: () => AppRoute( onPressed: () => AppRoute(
SnippetEditPage(snippet: key.snippets[idx]), SnippetEditPage(snippet: key.snippets[idx]),
'snippet edit page') 'snippet edit page')
.go(context), .go(context),
child: Text( child: Text(_s.edit),
_s.edit,
style: _textStyle,
),
),
],
), ),
), ),
); );