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;}
}
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;}
}