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

Setting 2 second delay not working in xamarin

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

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

如果我删除第 BindingContext = new SplashscreenViewModel(); 行,则会显示动画,但不会进入视图模型 class

SplashscreenPage.xaml.cs - 查看 class

    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

启动画面 - 视图模型class

 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 class 或分配 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);
        }
}