# Dynamic Home Route in a Flutter App


*This blog was originally published on [RavSam blog](https://www.ravsam.in/blog/dynamic-home-route-in-flutter-app/).*

In any production app, the user is directed to a route based on some authentication logic whenever the app is opened. In our Flutter App, we have at least two routes, **Login** and **Dashboard**. The problem is how can we decide which route should a user be redirected to?

In this app, we will check the value of a locally stored boolean variable to dynamically decide the home route. We can use any method for writing our authentication logic, like checking the validity of the API token, but for the sake of simplicity, we will explore a simple logic.

![Flutter Dynamic Home Route Flowchart](https://cdn.hashnode.com/res/hashnode/image/upload/v1631429626314/yTtwZh8Ln.png)*Flutter Dynamic Home Route Flowchart*

### Installing Dependencies

In our pubspec.yaml, let us add the following dependencies that we will be using in our Flutter application:

```yml
dependencies:
  shared_preferences: ^0.5.12+4
  async: ^2.4.2
```

> Make sure to install the latest version of the dependencies.

[Shared Preferences](https://pub.dev/packages/shared_preferences) is a simple Flutter plugin for reading and writing simple key-value pairs to the local storage. [Async](https://pub.dev/packages/async) contains the utility functions and classes related to the *dart:async* library.

After adding these dependencies, it is now time to install them. In the terminal, let us execute the following command:

```shell
flutter pub get
```


### 2. Writing Code

In our `main.dart`, let us add the following code:

```dart
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {

  // handle exceptions caused by making main async
  WidgetsFlutterBinding.ensureInitialized();

  // init a shared preferences variable
  SharedPreferences prefs = await SharedPreferences.getInstance();
  
  // get the locally stored boolean variable
  bool isLoggedIn = prefs.getBoolean('is_logged_in');
  
  // define the initial route based on whether the user is logged in or not
  String initialRoute = isLoggedIn ? '/' : 'login';

  // create a flutter material app as usual
  Widget app = MaterialApp(
    ...
    initialRoute: initialRoute,
  );

  // mount and run the flutter app
  runApp(app);
}
```


The code is pretty self-explanatory. All we are doing is getting the value of the `is_logged_in` boolean variable, and then decide the value of the `initialRoute` in our Flutter Material App.

One important thing in the above code is the use of the *async-await* pattern. We can also use `then` but it makes the code a little messy and that’s what we are trying to avoid here. Making our `main()` function asynchronous can cause some exceptions, so to solve this, we need to add `WidgetsFlutterBinding.ensureInitialized()`.

### Results

That’s it. We have successfully written a code that allows us to redirect the user to the **Dashboard** page if they are logged in, otherwise to the **Login** page.

Thanks for reading 💜

***

If you enjoyed my blog, follow me for more informative content like this.

I publish a [monthly newsletter](https://www.ravsam.in/newsletter/) in which I share personal stories, things that I am working on, what is happening in the world of tech, and some interesting dev related posts which I across while surfing on the web.

Connect with me through [Twitter](https://twitter.com/ravgeetdhillon) • [LinkedIn](https://linkedin.com/in/ravgeetdhillon) • [Github](https://github.com/ravgeetdhillon) or send me an [Email](mailto:ravgeetdhillon@gmail.com).

— [Ravgeet](https://www.ravgeet.in), *Full Stack Developer and Technical Content Writer*

