# navigation\_in\_flutter

Navigation in a Flutter app is a crucial aspect for moving between different screens or pages. There are various ways to implement navigation in Flutter. Below are some common methods:

1. **Navigator**: The most fundamental way to navigate between screens is using the `Navigator` class. You can push and pop routes onto a navigation stack. For example:

   ```dart
   // Push to a new screen

   //first screen --button move to second ===second screen
   Navigator.push(
     context,
     MaterialPageRoute(builder: (context) => SecondScreen()),
   );

   // Pop back to the previous screen
   Navigator.pop(context);
   ```
2. **Named Routes**: Named routes provide a way to navigate to specific screens using a unique route name. In your app's `main.dart`, define the routes, and then you can use `Navigator.pushNamed` to navigate:

   ```dart
   void main() {
     runApp(MaterialApp(
       initialRoute: '/',
       routes: {
         '/': (context) => HomeScreen(),
         '/second': (context) => SecondScreen(),
       },
     ));
   }
   ```

   Then, navigate using:

   ```dart
   Navigator.pushNamed(context, '/second');
   ```
3. **MaterialPageRoute**: You can use `MaterialPageRoute` to create routes with transition animations:

   ```dart
   Navigator.push(
     context,
     MaterialPageRoute(
       builder: (context) => SecondScreen(),
       settings: RouteSettings(name: '/second'),
     ),
   );
   ```
4. **CupertinoPageRoute**: Similar to `MaterialPageRoute`, but for iOS-style transitions.
5. **BottomNavigationBar**: For apps with a bottom navigation bar, you can switch between tabs using a `BottomNavigationBar`.
6. **Drawer**: You can implement a drawer for side navigation in an `Scaffold`. You can open the drawer using a `Drawer` or `EndDrawer` property.
7. **TabBarView**: For apps with tabs, you can use a `TabBarView` to switch between tabbed screens.
8. **Custom Navigation**: You can also implement custom navigation by using `PageRouteBuilder`, allowing you to create custom animations or transitions.

Here's a basic example using `Navigator` for navigating to a new screen:

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

void main() {
  runApp(MaterialApp(
    home: HomeScreen(),
  ));
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Home Screen')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondScreen()),
            );
          },
          child: Text('Go to Second Screen'),
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Second Screen')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('Back to Home Screen'),
        ),
      ),
    );
  }
}
```

This example shows how to navigate between two screens using the `Navigator` and `MaterialPageRoute`. You can choose the navigation method that best fits your app's structure and design.
