XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

STHApplication

【MAUI】寄当家——安卓端交易管理系统

公开
关注 0 Fork 0 Star 0
UTF-8
namespace JiDangJia.Views;

public sealed class PasswordDialog : PrivatePage
{
    private readonly TaskCompletionSource<string?> answer=new(TaskCreationOptions.RunContinuationsAsynchronously);
    private INavigation? owner;private bool closing;
    private PasswordDialog(string title,string message)
    {
        Title=title;var input=new Entry{IsPassword=true,Placeholder=message,MaxLength=128};
        var body=Ui.Stack(Ui.Text(title,24,bold:true),Ui.Text(message,13,Ui.Muted),Ui.Card(input,12,new Thickness(12,0),Ui.Paper),Ui.Button("确认",()=>Close(input.Text??"")),Ui.Button("取消",()=>Close(null),false));body.Padding=new Thickness(24,40);Content=body;
    }
    private async Task Close(string? value){if(closing)return;closing=true;try{await Navigation.PopModalAsync();answer.TrySetResult(value);}catch{closing=false;throw;}}
    protected override bool OnBackButtonPressed(){_ = Close(null);return true;}
    protected override void OnDisappearing(){base.OnDisappearing();Dispatcher.Dispatch(()=>{if(!closing&&owner is not null&&!owner.ModalStack.Contains(this))answer.TrySetResult(null);});}
    public static async Task<string?> Ask(Page page,string title,string message){var dialog=new PasswordDialog(title,message){owner=page.Navigation};await page.Navigation.PushModalAsync(dialog);return await dialog.answer.Task;}
}