设置 2 秒延迟在 xamarin 中不起作用

问题描述

我正在视图类中显示 2 秒的淡入淡出动画,2 秒后,我想转到视图模型类来运行加载登录页面注册页面的逻辑

现在它跳过 2 秒动画并直接进入视图模型。知道这里有什么问题

如果我删除了第 BindingContext = new Splashscreenviewmodel(); 行,动画会出现,但它不会进入视图模型类

SplashscreenPage.xaml.cs - 视图类

    public SplashscreenPage ()
    {
        InitializeComponent ();
        Animation();
        BindingContext = new Splashscreenviewmodel();
    }

    async void Animation()
    {
        ssImage.Opacity = 0;
        await Task.WhenAll(
            ssImage.Fadeto(1,2000),ssImage.Scaleto(1.1,2000)
            );
    }//end of method

启动画面 - 视图模型类

 public Splashscreenviewmodel()
        {
            WhichPagetoLoad();
        }
 
  async void WhichPagetoLoad()
    {

            var getToken = await SecureStorage.GetAsync("Save_Pin_1");
            if(getToken == null)
            {
                var route = $"{ nameof(SignupPage)}";
                await Shell.Current.GoToAsync(route);
            }
            else
            {
                var route = $"{ nameof(LoginPage)}";
                await Shell.Current.GoToAsync(route);
            }
}

解决方法

拥有 VM 类或分配 BindingContext 确实没有意义,因为您没有进行任何数据绑定。您可以在动画完成后调用导航代码。您无法从构造函数进行异步调用,因此将动画和导航登录移动到 OnAppearing 中将允许您进行异步调用

public SplashscreenPage ()
{
    InitializeComponent ();
}

async override void OnAppearing()
{
    ssImage.Opacity = 0;

    await Task.WhenAll(
        ssImage.FadeTo(1,2000),ssImage.ScaleTo(1.1,2000)
        );

    var getToken = await SecureStorage.GetAsync("Save_Pin_1");
      
    if(getToken == null)
        {
            var route = $"{ nameof(SignupPage)}";
            await Shell.Current.GoToAsync(route);
        }
        else
        {
            var route = $"{ nameof(LoginPage)}";
            await Shell.Current.GoToAsync(route);
        }
}