{"id":13713155,"url":"https://github.com/galadril/Xam.Plugin.SimpleAppIntro","last_synced_at":"2025-05-06T23:30:42.333Z","repository":{"id":97409215,"uuid":"138586146","full_name":"galadril/Xam.Plugin.SimpleAppIntro","owner":"galadril","description":"Just a nice and simple AppIntro for your Xamarin Forms project","archived":false,"fork":false,"pushed_at":"2022-01-25T09:20:44.000Z","size":2152,"stargazers_count":137,"open_issues_count":0,"forks_count":17,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-06T09:09:53.670Z","etag":null,"topics":["app","appintro","carousel","carouselview","forms","intro","slider","xamarin"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/Xam.Plugin.SimpleAppIntro","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/galadril.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-06-25T11:31:48.000Z","updated_at":"2025-04-09T13:22:48.000Z","dependencies_parsed_at":"2023-03-04T05:45:41.803Z","dependency_job_id":null,"html_url":"https://github.com/galadril/Xam.Plugin.SimpleAppIntro","commit_stats":null,"previous_names":[],"tags_count":100,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galadril%2FXam.Plugin.SimpleAppIntro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galadril%2FXam.Plugin.SimpleAppIntro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galadril%2FXam.Plugin.SimpleAppIntro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galadril%2FXam.Plugin.SimpleAppIntro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/galadril","download_url":"https://codeload.github.com/galadril/Xam.Plugin.SimpleAppIntro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252787171,"owners_count":21804211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app","appintro","carousel","carouselview","forms","intro","slider","xamarin"],"created_at":"2024-08-02T23:01:28.672Z","updated_at":"2025-05-06T23:30:40.393Z","avatar_url":"https://github.com/galadril.png","language":"C#","funding_links":["https://www.paypal.me/markheinis"],"categories":["UI"],"sub_categories":[],"readme":"[![nuget](https://img.shields.io/nuget/v/Xam.Plugin.SimpleAppIntro.svg)](https://www.nuget.org/packages/Xam.Plugin.SimpleAppIntro/) ![Nuget](https://img.shields.io/nuget/dt/Xam.Plugin.SimpleAppIntro)\n\n![Icon](https://raw.githubusercontent.com/galadril/Xam.Plugin.SimpleAppIntro/master/Samples/Xam.Plugin.SimpleAppIntro.Samples/Xam.Plugin.SimpleAppIntro.Samples.Android/Resources/mipmap-xxhdpi/Icon.png)\n\n\n# Xam.Plugin.SimpleAppIntro\nJust a nice and simple AppIntro for your Xamarin Forms project \n\n\n# Setup\n* Available on Nuget:\nhttps://www.nuget.org/packages/Xam.Plugin.SimpleAppIntro\n\n!!Install into your .net standaard project. !!\n\n\n# Example\n![simpleappintro](https://user-images.githubusercontent.com/14561640/45887098-2c072580-bdbb-11e8-9084-3136bd911062.gif)\n\n\n\n# Usage\nYou can now create new simple sliders and add them to a SimpleAppIntro page.\nWe support 5 per-build types of slides at this moment, Slide/ButtonSlide/SwitchSlide/CheckboxSlide/RadioButtonSlide(new).\nI these doesn't work for you, you can always use a custom ContentView as a slide\n\n```\n\n var welcomePage = new SimpleAppIntro(new List\u003cobject\u003e() {\n            new Slide(new SlideConfig(\"Welcome\", \"This is a sample app showing off the new App Intro\", \"cup_icon.png\",\n            null, \"#FFFFFF\", \"#FFFFFF\",\n            FontAttributes.Bold, FontAttributes.Italic, 24, 16)),\n\n            new ButtonSlide(new ButtonSlideConfig(\"Slides\", \"You can add slides and have a clean app intro\", \"cup_icon.png\",\n            null, \"Click here\", null,\"#FFFFFF\", new Command(() =\u003e OnButtonClicked()), \"#FFFFFF\", \"#FFFFFF\",\n            FontAttributes.Bold, FontAttributes.Italic, 24, 16)),\n\n            new SwitchSlide(new SwitchSlideConfig(\"Other\", \"Tell your user what they can do with your app\",  \"cup_icon.png\",\n            null, true, new Command\u003cbool\u003e((value) =\u003e OnSwitchClicked(value)), \"#FFFFFF\", \"#FFFFFF\",\n            FontAttributes.Bold, FontAttributes.Italic, 24, 16)),\n\n            new SwitchSlide(new SwitchSlideConfig(\"Other\", \"Tell your user what they can do with your app\",  \"cup_icon.png\",\n            null, true, new Command\u003cbool\u003e((value) =\u003e OnSwitchClicked(value)), \"#FFFFFF\", \"#FFFFFF\",\n            FontAttributes.Bold, FontAttributes.Italic, 24, 16)),\n\t    \n\t    new CheckboxSlide(new CheckboxSlideConfig(\"Checkbox\", \"Let your user set specific settings via a AppIntro screen.\",  \t     \"cup_icon.png\",\n            null, true, new Command\u003cbool\u003e((value) =\u003e OnCheckboxClicked(value)), \"#FFFFFF\", \"#FFFFFF\",\n            FontAttributes.Bold, FontAttributes.Italic, 24, 16)),\n\n\n            new RadioButtonSlide(new RadioButtonSlideConfig(\"RadioButtons\", \"Let users flip some radiobuttons via the app intro:\",  \"world.json\",\n                null, new List\u003cRadioButtonItem\u003e()\n                {\n                    new RadioButtonItem(){Content= \"option 1 - group 1\", GroupName=\"slide1\", IsChecked = false, TextColor =  \"#FFFFFF\", FontAttributes = FontAttributes.None, FontSize = 16, Command =new Command\u003cRadioButtonItem\u003e((value) =\u003e OnRadioButtonChanged(value)) },\n                    new RadioButtonItem(){Content= \"option 2 - group 1\", GroupName=\"slide1\", IsChecked = false, TextColor =  \"#FFFFFF\", FontAttributes = FontAttributes.None, FontSize = 16, Command =new Command\u003cRadioButtonItem\u003e((value) =\u003e OnRadioButtonChanged(value)) },\n                    new RadioButtonItem(){Content= \"option 3 - group 2\", GroupName=\"slide2\", IsChecked = false, TextColor =  \"#FFFFFF\", FontAttributes = FontAttributes.None, FontSize = 16, Command =new Command\u003cRadioButtonItem\u003e((value) =\u003e OnRadioButtonChanged(value)) },\n                    new RadioButtonItem(){Content= \"option 4 - group 2\", GroupName=\"slide2\", IsChecked = false, TextColor =  \"#FFFFFF\", FontAttributes = FontAttributes.None, FontSize = 16, Command =new Command\u003cRadioButtonItem\u003e((value) =\u003e OnRadioButtonChanged(value)) }\n                }, \"#FFFFFF\", \"#FFFFFF\",\n\n      });\n\nMainPage.Navigation.PushModalAsync(welcomePage);\n\n```\n\n\n# Animated\nYou can also specify your own Lottie animated icon for each slide. Just create an AnimatedSimpleAppIntro like:\nWe support 5 types of slides at this moment, Slide/ButtonSlide/SwitchSlide/CheckboxSlide/RadioButtonSlide (same usage as above)\n\n```\n\nvar welcomePage = new AnimatedSimpleAppIntro(new List\u003cobject\u003e() {\n            new Slide(new SlideConfig(\"Welcome\", \"This is a sample app showing off the new App Intro\", \"world.json\",\n            null, \"#FFFFFF\", \"#FFFFFF\",\n            FontAttributes.Bold, FontAttributes.Italic, 24, 16))\n\t    \n```\n\n\n# Properties\nYou can set the next properties\n\n```\n\nwelcomePage.DoneText = \"Finish\";\nwelcomePage.SkipText = \"Skip\";\nwelcomePage.NextText = \"Next\";\nwelcomePage.BackText = \"Next\";\n\nwelcomePage.ShowPositionIndicator = true;\nwelcomePage.ShowSkipButton = true;\nwelcomePage.ShowNextButton = true;\nwelcomePage.ShowBackButton = true;\n\n// Vibrate\n// NOTE: you will probably need to ask VIBRATE permission in Manifest.\nwelcomePage.Vibrate = true;\nwelcomePage.VibrateDuration = 0.2;\n\n```\n\n\n# Theming\nYou can set the next colors\n\n```\n\nwelcomePage.BarColor = \"#607D8B\";\nwelcomePage.SkipButtonBackgroundColor = \"#FF9700\";\nwelcomePage.DoneButtonBackgroundColor = \"#8AC149\";\nwelcomePage.NextButtonBackgroundColor = \"#8AC149\";\nwelcomePage.BackButtonBackgroundColor = \"#8AC149\";\n\nwelcomePage.SkipButtonTextColor = \"#FFFFFF\";\nwelcomePage.NextButtonTextColor = \"#FFFFFF\";\nwelcomePage.BackButtonTextColor = \"#FFFFFF\";\nwelcomePage.DoneButtonTextColor = \"#FFFFFF\";\n\n```\n\nAnd you can also specify an image instead of the default skip/done/next buttons:\n\n```\n\nwelcomePage.DoneButtonImage = \"baseline_done_white_24.png\";\nwelcomePage.BackButtonImage = \"baseline_done_white_24.png\";\nwelcomePage.NextButtonImage = \"baseline_done_white_24.png\";\nwelcomePage.SkipButtonImage = \"baseline_done_white_24.png\";\n\n```\n\n# Custom ContentViews\nYou can now set a ContentView as a custom slide in this control!\n\n```\n\n var welcomePage = new SimpleAppIntro(new List\u003cobject\u003e() {\n            \n                new CustomSlide\n                {\n                    BindingContext = this\n                },\n               \n      })\n      \n```\n\nYou can also use 2 interfaces while using custom slide views, ISave and IValidate.\nFor example you have a custom contentview slide with a profile firstname/lastname view that needs to be validated and saved on the slide.\n\n\n(See sample project for a custom view with implemented interfaces)\n```\n    [XamlCompilation(XamlCompilationOptions.Compile)]\n    public partial class CustomSlide : ContentView, IValidate, ISave\n    {\n\n\n    ...\n\n      public async void Save()\n      {\n         await viewmodel.SaveProfileName();\n      }\n\n      public bool Validate()\n      {\n         return viewmodel.ValidateName();\n      }\n\n\n      ...\n\n```\n\n\n\n\n# Callbacks\nYou can use the next callback methods to get more info on the events \n\n```\n\n      welcomePage.OnSkipButtonClicked = OnSkipButtonClicked;\n      welcomePage.OnDoneButtonClicked = OnDoneButtonClicked;\n      welcomePage.OnPositionChanged = OnPositionChanged;\n\t  \n      /// \u003csummary\u003e\n      /// On skip button clicked\n      /// \u003c/summary\u003e\n      private void OnSkipButtonClicked()\n      {\n         DisplayAlert(\"Result\", \"Skip\", \"OK\");\n      }\n\n      /// \u003csummary\u003e\n      /// On done button clicked\n      /// \u003c/summary\u003e\n      private void OnDoneButtonClicked()\n      {\n         DisplayAlert(\"Result\", \"Done\", \"OK\");\n      }\n\n\t  /// \u003csummary\u003e\n      /// On slide position changed event\n      /// \u003c/summary\u003e\n      private void OnPositionChanged(int page)\n      {\n         Console.Write($\"Slide changed to page {page}\");\n      }\n\n```\n\n\n\n\n# Donation\n\nIf you like to say thanks, you could always buy me a cup of coffee (/beer)!   \n(Thanks!)  \n[![PayPal donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/markheinis)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaladril%2FXam.Plugin.SimpleAppIntro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaladril%2FXam.Plugin.SimpleAppIntro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaladril%2FXam.Plugin.SimpleAppIntro/lists"}