新增 FlowScope Git 包雏形
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FlowScope.UI
|
||||
{
|
||||
public sealed class UIScreenNavigator : IUIScreenNavigator
|
||||
{
|
||||
private readonly UIManager _uiManager;
|
||||
private readonly Stack<Action> _closeStack = new();
|
||||
|
||||
public UIScreenNavigator(UIManager uiManager)
|
||||
{
|
||||
_uiManager = uiManager ?? throw new ArgumentNullException(nameof(uiManager));
|
||||
}
|
||||
|
||||
public bool CanGoBack => _closeStack.Count > 1;
|
||||
|
||||
public async Task<TPanel> PushAsync<TPanel, TViewModel>(
|
||||
TViewModel viewModel,
|
||||
CancellationToken cancellationToken)
|
||||
where TPanel : UIPanelBase<TViewModel>
|
||||
{
|
||||
var panel = await _uiManager.OpenAsync<TPanel, TViewModel>(viewModel, cancellationToken);
|
||||
_closeStack.Push(() => _uiManager.Close<TPanel>());
|
||||
return panel;
|
||||
}
|
||||
|
||||
public void GoBack()
|
||||
{
|
||||
if (!CanGoBack)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var close = _closeStack.Pop();
|
||||
close();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
while (_closeStack.Count > 0)
|
||||
{
|
||||
var close = _closeStack.Pop();
|
||||
close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user