From aabc7f04b7ec0671ae3220f26bf744a671cc12c7 Mon Sep 17 00:00:00 2001 From: FlorianDahn Date: Mon, 26 Jul 2021 15:38:47 +0200 Subject: [PATCH] Adding documentation about NavigationController --- README.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/README.md b/README.md index 11e605d..a345a76 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,16 @@ Thanks ! * [IgnoreState](#ignorestate) + +[Navigation and NavigationController (v4.0.0)](#navigiation-and-navigationcontroller) + + * [As of Now](#as-of-now) + + * [How to use](#how-to-use) + + + + - [Examples](#examples) --- @@ -1073,6 +1083,82 @@ public class Registration : STForm ``` +## Navigation and NavigationController + +### As of now + +As from earlier topics on this readme you alread know the default way for (cross) navigating between Forms. +It will look something like this: + +``` + +var f = new FormBase(); +await this.NavigateTo(f); + + +``` + +Depending on the model and structure of your bot it can make sense, to have more linear navigation instead of "cross" navigation. + +In example you have a bot which shows a list of football teams. And when clicking on it you want to open the team details and latest matches. + +After the matches you want to maybe switch to a different teams and take a look at their statistics and matches. + +At some point, you "just" want to get back to the first team so like on Android your clicking the "back" button multiple times. + +This can become really complicated, when not having some controller below which handle these "Push/Pop" calls. + +Thats why I introduced a NavigationController class which manages these situations and the stack. + + +### How to use ? + +First you need to create a NavigationController instance at the same position in code, where you want to start the navigation. + +You will use the current FormBase instance as a root class within the constructor. So you can later come back to this one. +Where are using the same Form instance as above. + + +``` + +var nc = new NavigationController(this); + +var f = new FormBase(); + +//Replace the current form in the context with the controller. +await this.NavigateTo(nc); + +//Push the new from onto the stack to render it +nc.PushAsync(f); + + +``` + +**Tip**: *By default the NavigationController has ForceCleanupOnLastPop enabled, which means that when the stack is again at 1 (due to PopAsync or PopToRootAsync calls) it will replace the controller automatically with the root form you have given to the constructor at the beginning.* + + +Later to open a new form use PushAsync again: + +``` + +await this.NavigationController.PushAsync(newForm); + +``` + +When you want to go back one Form on the stack use PopAsync: + + +``` + +await this.NavigationController.PopAsync(); + +``` + + + + + + ## Examples