top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

How to write platform specific code in PCL project of Xamarin.Forms?

+1 vote
485 views
How to write platform specific code in PCL project of Xamarin.Forms?
posted Nov 8, 2017 by Jdk

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

1 Answer

0 votes

This is a scenario which is easily resolved with dependency injection.

Have a interface with the desired methods on your shared or PCL code, like:

public interface IUserPreferences
{
void SetString(string key, string value);
string GetString(string key);
}

Have a property on your App class of that interface:

public class App
{
public static IUserPreferences UserPreferences { get; private set; }

public static void Init(IUserPreferences userPreferencesImpl) 
{
    App.UserPreferences = userPreferencesImpl;
}

(...)

}

Create platform-specific implementations on your target projects:

IOS

public class iOSUserPreferences : IUserPreferences
{
public void SetString(string key, string value)
{
NSUserDefaults.StandardUserDefaults.SetString(key, value);
}

public string GetString(string key)
{
    (...)
}

}

Android

public class AndroidUserPreferences : IUserPreferences
{
public void SetString(string key, string value)
{
var prefs = Application.Context.GetSharedPreferences("MySharedPrefs", FileCreationMode.Private);
var prefsEditor = prefs.Edit();

    prefEditor.PutString(key, value);
    prefEditor.Commit();
}

public string GetString(string key)
{
    (...)
}

}

Then on each platform-specific project create an implementation of IUserPreferences and set it using either App.Init(new iOSUserPrefernces()) and App.Init(new AndroidUserPrefernces()) methods.

Finally, you could change your code to:

public class MyPage : ContentPage
{
public MyPage()
{
//do work to initialize MyPage
}

public void LogIn(object sender, EventArgs eventArgs)
{
    bool isAuthenticated = false;
    string accessToken = string.Empty;

    //do work to use authentication API to validate users

    if(isAuthenticated)
    {
        App.UserPreferences.SetString("AccessToken", accessToken);
    }
}

}

Hope This Will be Helpful

answer Apr 11, 2019 by Rushabh Verma R.
...