From be1a16263228646588a54d80d698f60f3624efe4 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Sat, 28 Jan 2023 15:35:19 +0800 Subject: [PATCH] fix & opt. --- lib/data/model/sftp/download_item.dart | 16 +++ lib/data/model/sftp/download_status.dart | 2 + lib/data/model/sftp/download_worker.dart | 18 +-- lib/data/provider/sftp_download.dart | 5 +- lib/data/res/build_data.dart | 6 +- lib/data/res/padding.dart | 2 +- lib/data/store/setting.dart | 2 +- lib/generated/intl/messages_en.dart | 2 - lib/generated/intl/messages_zh.dart | 1 - lib/generated/l10n.dart | 10 -- lib/l10n/intl_en.arb | 1 - lib/l10n/intl_zh.arb | 1 - lib/view/page/private_key/list.dart | 56 ++++---- lib/view/page/server/detail.dart | 166 +++++++++++------------ lib/view/page/setting.dart | 8 -- lib/view/page/sftp/downloading.dart | 1 + lib/view/page/sftp/view.dart | 114 +++++++--------- lib/view/page/snippet/list.dart | 36 ++--- 18 files changed, 197 insertions(+), 250 deletions(-) create mode 100644 lib/data/model/sftp/download_item.dart diff --git a/lib/data/model/sftp/download_item.dart b/lib/data/model/sftp/download_item.dart new file mode 100644 index 00000000..bccdb3a9 --- /dev/null +++ b/lib/data/model/sftp/download_item.dart @@ -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; +} diff --git a/lib/data/model/sftp/download_status.dart b/lib/data/model/sftp/download_status.dart index 1733d345..41823265 100644 --- a/lib/data/model/sftp/download_status.dart +++ b/lib/data/model/sftp/download_status.dart @@ -1,5 +1,7 @@ import 'package:toolbox/data/model/sftp/download_worker.dart'; +import 'download_item.dart'; + class SftpDownloadStatus { final int id; final DownloadItem item; diff --git a/lib/data/model/sftp/download_worker.dart b/lib/data/model/sftp/download_worker.dart index e6dfa92e..2e37dd63 100644 --- a/lib/data/model/sftp/download_worker.dart +++ b/lib/data/model/sftp/download_worker.dart @@ -4,16 +4,9 @@ import 'dart:isolate'; import 'package:dartssh2/dartssh2.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 { - DownloadItem(this.spi, this.remotePath, this.localPath); - - final ServerPrivateInfo spi; - final String remotePath; - final String localPath; -} +import 'download_item.dart'; +import 'download_status.dart'; class SftpDownloadWorker { SftpDownloadWorker( @@ -101,10 +94,3 @@ class SftpDownloadWorker { } } } - -class DownloadItemEvent { - DownloadItemEvent(this.item, this.privateKey); - - final DownloadItem item; - final String? privateKey; -} diff --git a/lib/data/provider/sftp_download.dart b/lib/data/provider/sftp_download.dart index 83871bbf..978e260e 100644 --- a/lib/data/provider/sftp_download.dart +++ b/lib/data/provider/sftp_download.dart @@ -1,6 +1,7 @@ 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 { final List _status = []; diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 0abc7b87..ee5999f6 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,9 +2,9 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 187; + static const int build = 189; 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"; - static const String buildAt = "2023-01-28 13:54:17.985459"; - static const int modifications = 13; + static const String buildAt = "2023-01-28 14:28:14.979200"; + static const int modifications = 2; } diff --git a/lib/data/res/padding.dart b/lib/data/res/padding.dart index 6bd3e296..de1018e9 100644 --- a/lib/data/res/padding.dart +++ b/lib/data/res/padding.dart @@ -1,3 +1,3 @@ import 'package:flutter/material.dart'; -const roundRectCardPadding = EdgeInsets.symmetric(horizontal: 17); +const roundRectCardPadding = EdgeInsets.symmetric(horizontal: 17, vertical: 13); diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 9b0e2d0a..086dd5cf 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -6,7 +6,7 @@ class SettingStore extends PersistentStore { property('primaryColor', defaultValue: Colors.deepPurpleAccent.value); StoreProperty get serverStatusUpdateInterval => - property('serverStatusUpdateInterval', defaultValue: 5); + property('serverStatusUpdateInterval', defaultValue: 3); /// Lanch page idx StoreProperty get launchPage => property('launchPage', defaultValue: 0); diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 1312568f..474fb7a9 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -133,8 +133,6 @@ class MessageLookup extends MessageLookupByLibrary { "files": MessageLookupByLibrary.simpleMessage("Files"), "foundNUpdate": m5, "go": MessageLookupByLibrary.simpleMessage("Go"), - "goSftpDlPage": - MessageLookupByLibrary.simpleMessage("Go to SFTP download page?"), "goto": MessageLookupByLibrary.simpleMessage("Go to"), "host": MessageLookupByLibrary.simpleMessage("Host"), "httpFailedWithCode": m6, diff --git a/lib/generated/intl/messages_zh.dart b/lib/generated/intl/messages_zh.dart index 841b1a88..03966324 100644 --- a/lib/generated/intl/messages_zh.dart +++ b/lib/generated/intl/messages_zh.dart @@ -121,7 +121,6 @@ class MessageLookup extends MessageLookupByLibrary { "files": MessageLookupByLibrary.simpleMessage("文件"), "foundNUpdate": m5, "go": MessageLookupByLibrary.simpleMessage("开始"), - "goSftpDlPage": MessageLookupByLibrary.simpleMessage("前往下载页?"), "goto": MessageLookupByLibrary.simpleMessage("前往"), "host": MessageLookupByLibrary.simpleMessage("主机"), "httpFailedWithCode": m6, diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 7a96587e..04d0b3b7 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -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` String get createFolder { return Intl.message( diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index d302e07b..2e8bdaaa 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -99,7 +99,6 @@ "install": "install", "loadingFiles": "Loading files...", "sftpNoDownloadTask": "No download task.", - "goSftpDlPage": "Go to SFTP download page?", "createFolder": "Create folder", "createFile": "Create file", "rename": "Rename", diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 6454c9ec..71ef36df 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -99,7 +99,6 @@ "install": "安装", "loadingFiles": "正在加载目录。。。", "sftpNoDownloadTask": "没有下载任务", - "goSftpDlPage": "前往下载页?", "createFolder": "创建文件夹", "createFile": "创建文件", "rename": "重命名", diff --git a/lib/view/page/private_key/list.dart b/lib/view/page/private_key/list.dart index 44fabe43..28779d7b 100644 --- a/lib/view/page/private_key/list.dart +++ b/lib/view/page/private_key/list.dart @@ -3,7 +3,6 @@ import 'package:provider/provider.dart'; import 'package:toolbox/core/route.dart'; import 'package:toolbox/data/provider/private_key.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/view/page/private_key/edit.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; @@ -32,36 +31,31 @@ class _PrivateKeyListState extends State { ), body: Consumer( builder: (_, key, __) { - return key.infos.isNotEmpty - ? ListView.builder( - padding: const EdgeInsets.all(13), - itemCount: key.infos.length, - itemExtent: 57, - itemBuilder: (context, idx) { - return RoundRectCard(Padding( - padding: roundRectCardPadding, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - key.infos[idx].id, - textAlign: TextAlign.center, - ), - TextButton( - onPressed: () => AppRoute( - PrivateKeyEditPage(info: key.infos[idx]), - 'private key edit page') - .go(context), - child: Text(_s.edit), - ) - ], - ), - )); - }) - : Center( - child: Text(_s.noSavedPrivateKey), - ); + if (key.infos.isEmpty) { + return Center( + child: Text(_s.noSavedPrivateKey), + ); + } + return ListView.builder( + padding: const EdgeInsets.all(13), + itemCount: key.infos.length, + itemBuilder: (context, idx) { + return RoundRectCard( + ListTile( + title: Text( + key.infos[idx].id, + ), + trailing: TextButton( + onPressed: () => AppRoute( + PrivateKeyEditPage(info: key.infos[idx]), + 'private key edit page') + .go(context), + child: Text(_s.edit), + ), + ), + ); + }, + ); }, ), floatingActionButton: FloatingActionButton( diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 31243334..132684c0 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -23,6 +23,10 @@ class ServerDetailPage extends StatefulWidget { _ServerDetailPageState createState() => _ServerDetailPageState(); } +const width13 = SizedBox( + width: 13, +); + class _ServerDetailPageState extends State with SingleTickerProviderStateMixin { late MediaQueryData _media; @@ -92,45 +96,44 @@ class _ServerDetailPageState extends State } Widget _buildCPUView(ServerStatus ss) { + final tempWidget = ss.cpu2Status.temp.isEmpty + ? const SizedBox() + : Text( + ss.cpu2Status.temp, + style: textSize13Grey, + ); return RoundRectCard( Padding( padding: roundRectCardPadding, - child: SizedBox( - height: 12 * ss.cpu2Status.coresCount + 63, - child: Column(children: [ - SizedBox( - height: _media.size.height * 0.02, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '${ss.cpu2Status.usedPercent(coreIdx: 0).toInt()}%', - style: textSize27, - textScaleFactor: 1.0, - ), - Row( - children: [ - _buildDetailPercent(ss.cpu2Status.user, 'user'), - SizedBox( - width: _media.size.width * 0.03, - ), - _buildDetailPercent(ss.cpu2Status.sys, 'sys'), - SizedBox( - width: _media.size.width * 0.03, - ), - _buildDetailPercent(ss.cpu2Status.iowait, 'io'), - SizedBox( - width: _media.size.width * 0.03, - ), - _buildDetailPercent(ss.cpu2Status.idle, 'idle') - ], - ) - ], - ), - _buildCPUProgress(ss) - ]), - ), + child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Text( + '${ss.cpu2Status.usedPercent(coreIdx: 0).toInt()}%', + style: textSize27, + textScaleFactor: 1.0, + ), + tempWidget + ], + ), + Row( + children: [ + _buildDetailPercent(ss.cpu2Status.user, 'user'), + width13, + _buildDetailPercent(ss.cpu2Status.sys, 'sys'), + width13, + _buildDetailPercent(ss.cpu2Status.iowait, 'io'), + width13, + _buildDetailPercent(ss.cpu2Status.idle, 'idle') + ], + ) + ], + ), + _buildCPUProgress(ss) + ]), ), ); } @@ -180,13 +183,13 @@ class _ServerDetailPageState extends State value: percentWithinOne, minHeight: 7, backgroundColor: progressColor.resolve(context), - color: pColor.withOpacity(0.5 + percentWithinOne / 2), + color: pColor, ); } Widget _buildUpTimeAndSys(ServerStatus ss) { return RoundRectCard(Padding( - padding: const EdgeInsets.symmetric(vertical: 13, horizontal: 17), + padding: roundRectCardPadding, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -208,40 +211,35 @@ class _ServerDetailPageState extends State return RoundRectCard(Padding( padding: roundRectCardPadding, - child: SizedBox( - height: 70, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - children: [ - Text('${used.toStringAsFixed(0)}%', style: textSize27), - const SizedBox(width: 7), - Text('of ${(ss.memory.total * 1024).convertBytes}', - style: textSize13Grey) - ], - ), - Row( - children: [ - _buildDetailPercent(free, 'free'), - SizedBox( - width: _media.size.width * 0.03, - ), - _buildDetailPercent(avail, 'avail'), - ], - ), - ], - ), - const SizedBox( - height: 11, - ), - _buildProgress(used) - ], - ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Text('${used.toStringAsFixed(0)}%', style: textSize27), + const SizedBox(width: 7), + Text('of ${(ss.memory.total * 1024).convertBytes}', + style: textSize13Grey) + ], + ), + Row( + children: [ + _buildDetailPercent(free, 'free'), + width13, + _buildDetailPercent(avail, 'avail'), + ], + ), + ], + ), + const SizedBox( + height: 11, + ), + _buildProgress(used) + ], ), )); } @@ -253,17 +251,11 @@ class _ServerDetailPageState extends State clone.remove(item); } } - return RoundRectCard(SizedBox( - height: 27 * clone.length + 25, - 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( + final children = clone + .map((disk) => Padding( padding: const EdgeInsets.all(3), child: Column( + mainAxisAlignment: MainAxisAlignment.center, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -280,8 +272,14 @@ class _ServerDetailPageState extends State _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 } return RoundRectCard(Padding( - padding: const EdgeInsets.symmetric(vertical: 7, horizontal: 17), + padding: roundRectCardPadding, child: Column( children: children, ), diff --git a/lib/view/page/setting.dart b/lib/view/page/setting.dart index 25c14c11..e2a9994f 100644 --- a/lib/view/page/setting.dart +++ b/lib/view/page/setting.dart @@ -8,7 +8,6 @@ import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/build_data.dart'; import 'package:toolbox/data/res/color.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/store/setting.dart'; import 'package:toolbox/generated/l10n.dart'; @@ -99,7 +98,6 @@ class _SettingPageState extends State { display = _s.versionUnknownUpdate(BuildData.build); } return ListTile( - contentPadding: roundRectCardPadding, trailing: const Icon(Icons.keyboard_arrow_right), title: Text( display, @@ -114,8 +112,6 @@ class _SettingPageState extends State { Widget _buildUpdateInterval() { return ExpansionTile( - tilePadding: roundRectCardPadding, - childrenPadding: roundRectCardPadding, textColor: priColor, title: Text( _s.updateServerStatusInterval, @@ -166,8 +162,6 @@ class _SettingPageState extends State { Widget _buildAppColorPreview() { return ExpansionTile( textColor: priColor, - tilePadding: roundRectCardPadding, - childrenPadding: roundRectCardPadding, trailing: ClipOval( child: Container( color: priColor, @@ -205,8 +199,6 @@ class _SettingPageState extends State { Widget _buildLaunchPage() { return ExpansionTile( textColor: priColor, - tilePadding: roundRectCardPadding, - childrenPadding: roundRectCardPadding, title: Text( _s.launchPage, style: textSize13, diff --git a/lib/view/page/sftp/downloading.dart b/lib/view/page/sftp/downloading.dart index 67a61e0d..69263db4 100644 --- a/lib/view/page/sftp/downloading.dart +++ b/lib/view/page/sftp/downloading.dart @@ -75,6 +75,7 @@ class _SFTPDownloadingPageState extends State { Widget _buildItem(SftpDownloadStatus status) { if (status.error != null) { showSnackBar(context, Text(status.error.toString())); + status.error = null; } switch (status.status) { case SftpWorkerStatus.finished: diff --git a/lib/view/page/sftp/view.dart b/lib/view/page/sftp/view.dart index 68045b59..16e5f42c 100644 --- a/lib/view/page/sftp/view.dart +++ b/lib/view/page/sftp/view.dart @@ -2,24 +2,25 @@ import 'dart:typed_data'; import 'package:dartssh2/dartssh2.dart'; import 'package:flutter/material.dart'; -import 'package:toolbox/core/extension/numx.dart'; -import 'package:toolbox/core/extension/stringx.dart'; -import 'package:toolbox/core/route.dart'; -import 'package:toolbox/core/utils.dart'; -import 'package:toolbox/data/model/server/server.dart'; -import 'package:toolbox/data/model/server/server_private_info.dart'; -import 'package:toolbox/data/model/sftp/absolute_path.dart'; -import 'package:toolbox/data/model/sftp/download_worker.dart'; -import 'package:toolbox/data/model/sftp/browser_status.dart'; -import 'package:toolbox/data/provider/server.dart'; -import 'package:toolbox/data/provider/sftp_download.dart'; -import 'package:toolbox/data/res/path.dart'; -import 'package:toolbox/data/store/private_key.dart'; -import 'package:toolbox/generated/l10n.dart'; -import 'package:toolbox/locator.dart'; -import 'package:toolbox/view/page/sftp/downloading.dart'; -import 'package:toolbox/view/widget/fade_in.dart'; -import 'package:toolbox/view/widget/two_line_text.dart'; + +import '../../../core/extension/numx.dart'; +import '../../../core/extension/stringx.dart'; +import '../../../core/route.dart'; +import '../../../core/utils.dart'; +import '../../../data/model/server/server.dart'; +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/download_item.dart'; +import '../../../data/provider/server.dart'; +import '../../../data/provider/sftp_download.dart'; +import '../../../data/res/path.dart'; +import '../../../data/store/private_key.dart'; +import '../../../generated/l10n.dart'; +import '../../../locator.dart'; +import '../../widget/fade_in.dart'; +import '../../widget/two_line_text.dart'; +import 'downloading.dart'; class SFTPPage extends StatefulWidget { final ServerPrivateInfo spi; @@ -62,38 +63,19 @@ class _SFTPPageState extends State { title: TwoLineText(up: 'SFTP', down: widget.spi.name), actions: [ IconButton( - onPressed: (() => showRoundDialog( - context, - _s.choose, - Column( - mainAxisSize: MainAxisSize.min, - children: [ - ListTile( - leading: const Icon(Icons.folder), - title: Text(_s.createFolder), - onTap: () => mkdir(context)), - ListTile( - leading: const Icon(Icons.insert_drive_file), - title: Text(_s.createFile), - onTap: () => newFile(context)), - ], - ), - [ - TextButton( - onPressed: () => Navigator.of(context).pop(), - child: Text(_s.close)) - ], - )), - icon: const Icon(Icons.add), - ) + icon: const Icon(Icons.downloading), + onPressed: () => + AppRoute(const SFTPDownloadingPage(), 'sftp downloading') + .go(context), + ), ], ), body: _buildFileView(), - bottomNavigationBar: _buildPath(), + bottomNavigationBar: _buildBottom(), ); } - Widget _buildPath() { + Widget _buildBottom() { return SafeArea( child: Container( padding: const EdgeInsets.fromLTRB(11, 7, 11, 11), @@ -112,6 +94,31 @@ class _SFTPPageState extends State { }, icon: const Icon(Icons.arrow_back), ), + IconButton( + onPressed: (() => showRoundDialog( + context, + _s.choose, + Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + leading: const Icon(Icons.folder), + title: Text(_s.createFolder), + onTap: () => mkdir(context)), + ListTile( + leading: const Icon(Icons.insert_drive_file), + title: Text(_s.createFile), + onTap: () => newFile(context)), + ], + ), + [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text(_s.close)) + ], + )), + icon: const Icon(Icons.add), + ), IconButton( padding: const EdgeInsets.all(0), onPressed: () async { @@ -307,25 +314,6 @@ class _SFTPPageState extends State { ); 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), ) diff --git a/lib/view/page/snippet/list.dart b/lib/view/page/snippet/list.dart index 2e937ee1..ab5bbbf8 100644 --- a/lib/view/page/snippet/list.dart +++ b/lib/view/page/snippet/list.dart @@ -2,9 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:toolbox/core/route.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/padding.dart'; import 'package:toolbox/generated/l10n.dart'; import 'package:toolbox/view/page/snippet/edit.dart'; import 'package:toolbox/view/widget/round_rect_card.dart'; @@ -17,8 +15,6 @@ class SnippetListPage extends StatefulWidget { } class _SnippetListPageState extends State { - final _textStyle = TextStyle(color: primaryColor); - late S _s; @override @@ -54,30 +50,18 @@ class _SnippetListPageState extends State { return ListView.builder( padding: const EdgeInsets.all(13), itemCount: key.snippets.length, - itemExtent: 57, itemBuilder: (context, idx) { return RoundRectCard( - Padding( - padding: roundRectCardPadding, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - key.snippets[idx].name, - textAlign: TextAlign.center, - ), - TextButton( - onPressed: () => AppRoute( - SnippetEditPage(snippet: key.snippets[idx]), - 'snippet edit page') - .go(context), - child: Text( - _s.edit, - style: _textStyle, - ), - ), - ], + ListTile( + title: Text( + key.snippets[idx].name, + ), + trailing: TextButton( + onPressed: () => AppRoute( + SnippetEditPage(snippet: key.snippets[idx]), + 'snippet edit page') + .go(context), + child: Text(_s.edit), ), ), );