top button
Flag Notify
    Connect to us
      Facebook Login
      Site Registration Why to Join

Facebook Login
Site Registration

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

+1 vote
35 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 Google+ Share Button LinkedIn Share Button Multiple Social 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 by Rushabh Verma R.
Contact Us
+91 9880187415
sales@queryhome.net
support@queryhome.net
#280, 3rd floor, 5th Main
6th Sector, HSR Layout
Bangalore-560102
Karnataka INDIA.
QUERY HOME
...