Merge pull request #5433 from 21pages/ab

replace offstage with if-else for LinearProgressIndicator in dialog
This commit is contained in:
RustDesk 2023-08-18 16:19:36 +08:00 committed by GitHub
commit 08af0d4bf2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 96 additions and 60 deletions

View File

@ -46,6 +46,7 @@ class _AddressBookState extends State<AddressBook> {
}
return Column(
children: [
// NOT use Offstage to wrap LinearProgressIndicator
if (gFFI.abModel.retrying.value) LinearProgressIndicator(),
_buildErrorBanner(
err: gFFI.abModel.pullError,
@ -397,8 +398,8 @@ class _AddressBookState extends State<AddressBook> {
const SizedBox(
height: 4.0,
),
Offstage(
offstage: !isInProgress, child: const LinearProgressIndicator())
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
],
),
actions: [
@ -463,8 +464,8 @@ class _AddressBookState extends State<AddressBook> {
const SizedBox(
height: 4.0,
),
Offstage(
offstage: !isInProgress, child: const LinearProgressIndicator())
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
],
),
actions: [

View File

@ -156,8 +156,8 @@ void changeIdDialog() {
}).toList(),
)).marginOnly(bottom: 8)
: SizedBox.shrink(),
Offstage(
offstage: !isInProgress, child: const LinearProgressIndicator())
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
],
),
actions: [
@ -202,8 +202,8 @@ void changeWhiteList({Function()? callback}) async {
const SizedBox(
height: 4.0,
),
Offstage(
offstage: !isInProgress, child: const LinearProgressIndicator())
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
],
),
actions: [
@ -1435,8 +1435,8 @@ void editAbTagDialog(
.toList(growable: false),
),
),
Offstage(
offstage: !isInProgress, child: const LinearProgressIndicator())
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
],
),
actions: [
@ -1496,9 +1496,9 @@ void renameDialog(
),
),
),
Obx(() => Offstage(
offstage: isInProgress.isFalse,
child: const LinearProgressIndicator())),
// NOT use Offstage to wrap LinearProgressIndicator
Obx(() =>
isInProgress.value ? const LinearProgressIndicator() : Offstage())
],
),
actions: [

View File

@ -12,7 +12,15 @@ import 'package:url_launcher/url_launcher.dart';
import '../../common.dart';
import './dialog.dart';
const kOpSvgList = ['github', 'google', 'apple', 'okta', 'facebook', 'azure', 'auth0'];
const kOpSvgList = [
'github',
'google',
'apple',
'okta',
'facebook',
'azure',
'auth0'
];
class _IconOP extends StatelessWidget {
final String op;
@ -27,7 +35,8 @@ class _IconOP extends StatelessWidget {
@override
Widget build(BuildContext context) {
final svgFile = kOpSvgList.contains(op.toLowerCase()) ? op.toLowerCase() : 'default';
final svgFile =
kOpSvgList.contains(op.toLowerCase()) ? op.toLowerCase() : 'default';
return Container(
margin: margin,
child: icon == null
@ -345,9 +354,8 @@ class LoginWidgetUserPass extends StatelessWidget {
autoFocus: false,
errorText: passMsg,
),
Offstage(
offstage: !isInProgress,
child: const LinearProgressIndicator()),
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
const SizedBox(height: 12.0),
FittedBox(
child:
@ -664,9 +672,8 @@ Future<bool?> verificationCodeDialog(UserPayload? user) async {
},
),
*/
Offstage(
offstage: !isInProgress,
child: const LinearProgressIndicator()),
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
],
),
onCancel: close,

View File

@ -27,11 +27,13 @@ final peerCardUiType = PeerUiType.grid.obs;
class _PeerCard extends StatefulWidget {
final Peer peer;
final PeerTabIndex tab;
final Function(BuildContext, String) connect;
final PopupMenuEntryBuilder popupMenuEntryBuilder;
const _PeerCard(
{required this.peer,
required this.tab,
required this.connect,
required this.popupMenuEntryBuilder,
Key? key})
@ -71,10 +73,14 @@ class _PeerCardState extends State<_PeerCard>
if (peerTabModel.multiSelectionMode) {
peerTabModel.select(peer);
} else {
if (!isWebDesktop) connect(context, peer.id);
if (!isWebDesktop) {
connectInPeerTab(context, peer.id, widget.tab);
}
}
},
onDoubleTap: isWebDesktop ? () => connect(context, peer.id) : null,
onDoubleTap: isWebDesktop
? () => connectInPeerTab(context, peer.id, widget.tab)
: null,
onLongPress: () {
peerTabModel.select(peer);
},
@ -443,7 +449,9 @@ abstract class BasePeerCard extends StatelessWidget {
Widget build(BuildContext context) {
return _PeerCard(
peer: peer,
connect: (BuildContext context, String id) => connect(context, id),
tab: tab,
connect: (BuildContext context, String id) =>
connectInPeerTab(context, id, tab),
popupMenuEntryBuilder: _buildPopupMenuEntry,
);
}
@ -477,9 +485,10 @@ abstract class BasePeerCard extends StatelessWidget {
style: style,
),
proc: () {
connect(
connectInPeerTab(
context,
peer.id,
tab,
isFileTransfer: isFileTransfer,
isTcpTunneling: isTcpTunneling,
isRDP: isRDP,
@ -552,7 +561,7 @@ abstract class BasePeerCard extends StatelessWidget {
],
)),
proc: () {
connect(context, id, isRDP: true);
connectInPeerTab(context, id, tab, isRDP: true);
},
padding: menuPadding,
dismissOnClicked: true,
@ -1309,3 +1318,26 @@ class TagPainter extends CustomPainter {
return true;
}
}
void connectInPeerTab(BuildContext context, String id, PeerTabIndex tab,
{bool isFileTransfer = false,
bool isTcpTunneling = false,
bool isRDP = false}) async {
if (tab == PeerTabIndex.ab) {
// If recent peer's alias is empty, set it to ab's alias
// Because the platform is not set, it may not take effect, but it is more important not to display if the connection is not successful
Peer? p = gFFI.abModel.find(id);
if (p != null &&
p.alias.isNotEmpty &&
(await bind.mainGetPeerOption(id: id, key: "alias")).isEmpty) {
await bind.mainSetPeerAlias(
id: id,
alias: p.alias,
);
}
}
connect(context, id,
isFileTransfer: isFileTransfer,
isTcpTunneling: isTcpTunneling,
isRDP: isRDP);
}

View File

@ -208,28 +208,26 @@ class _PeerTabPageState extends State<PeerTabPage>
}
Widget _createRefresh() {
if (gFFI.peerTabModel.currentTab < 3) return Offstage();
final textColor = Theme.of(context).textTheme.titleLarge?.color;
return Offstage(
offstage: gFFI.peerTabModel.currentTab < 3, // local tab can't see effect
child: Container(
padding: EdgeInsets.all(4.0),
child: AnimatedRotationWidget(
onPressed: () {
if (gFFI.peerTabModel.currentTab < entries.length) {
entries[gFFI.peerTabModel.currentTab].load();
}
},
spinning: gFFI.abModel.abLoading,
child: RotatedBox(
quarterTurns: 2,
child: Tooltip(
message: translate('Refresh'),
child: Icon(
Icons.refresh,
size: 18,
color: textColor,
)))),
),
return Container(
padding: EdgeInsets.all(4.0),
child: AnimatedRotationWidget(
onPressed: () {
if (gFFI.peerTabModel.currentTab < entries.length) {
entries[gFFI.peerTabModel.currentTab].load();
}
},
spinning: gFFI.abModel.abLoading,
child: RotatedBox(
quarterTurns: 2,
child: Tooltip(
message: translate('Refresh'),
child: Icon(
Icons.refresh,
size: 18,
color: textColor,
)))),
);
}

View File

@ -2065,9 +2065,9 @@ void changeSocks5Proxy() async {
),
],
),
Offstage(
offstage: !isInProgress,
child: const LinearProgressIndicator().marginOnly(top: 8))
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress)
const LinearProgressIndicator().marginOnly(top: 8),
],
),
),

View File

@ -182,8 +182,8 @@ class _InstallPageBodyState extends State<_InstallPageBody>
.marginOnly(bottom: em),
InkWell(
hoverColor: Colors.transparent,
onTap: () =>
launchUrlString('https://rustdesk.com/privacy.html'),
onTap: () => launchUrlString(
'https://rustdesk.com/privacy.html'),
child: Tooltip(
message: 'https://rustdesk.com/privacy.html',
child: Row(children: [
@ -204,11 +204,10 @@ class _InstallPageBodyState extends State<_InstallPageBody>
Row(
children: [
Expanded(
child: Obx(() => Offstage(
offstage: !showProgress.value,
child:
LinearProgressIndicator().marginOnly(right: 10),
)),
// NOT use Offstage to wrap LinearProgressIndicator
child: Obx(() => showProgress.value
? LinearProgressIndicator().marginOnly(right: 10)
: Offstage()),
),
Obx(
() => OutlinedButton.icon(

View File

@ -223,9 +223,8 @@ void showServerSettingsWithValue(
labelText: 'Key',
),
),
Offstage(
offstage: !isInProgress,
child: LinearProgressIndicator())
// NOT use Offstage to wrap LinearProgressIndicator
if (isInProgress) const LinearProgressIndicator(),
])),
actions: [
dialogButton('Cancel', onPressed: () {