A quick and powerful Flutter layout with a bottom navbar.

Related tags

Templates flutter
Overview

bottom_nav_layout

License: MIT

What is bottom_nav_layout?

It is a quick flutter app layout for building an app with a bottom nav bar. You can get an app with fluent behavior running in 15 lines of code.

Why bottom_nav_layout?

  • Eliminates all boilerplate code for bottom nav bar coordination.
  • Uses identical APIs with the underlying bottom bars.
  • Offers additional common features, all of which are optional.
    • Page state preservation
    • Lazy page loading
    • Page backstack
    • Back button navigation management
  • Works with any bottom bar you wish. Use the material desing, grab one from pub.dev or use your own.

Content

Usage

Installation

Add the following to your pubspec.yaml file.

dependencies:
  bottom_nav_layout: latest_version

Import

import 'package:bottom_nav_layout/bottom_nav_layout.dart';

Quick Start Example

void main() => runApp(MaterialApp(
      home: BottomNavLayout(
        // The app's top level destinations
        pages: [
          Center(child: Text("Welcome to bottom_nav_layout")),
          SliderPage(),
          Center(child: TextField(decoration: InputDecoration(hintText: 'Search...'))),
        ],
        
        // Delegates its properties to a BottomNavigationBar.
        navBarDelegate: BottomNavigationBarDelegate(
          items: [
            BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
            BottomNavigationBarItem(icon: Icon(Icons.linear_scale), label: 'Slider'),
            BottomNavigationBarItem(icon: Icon(Icons.search), label: 'Search'),
          ],
        ),
      ),
    ));

Done. You have a complete, working application.

SliderPage code

class SliderPage extends StatefulWidget {
  @override
  _SliderPageState createState() => _SliderPageState();
}

class _SliderPageState extends State<SliderPage> {
  double r = 0;

  @override
  Widget build(BuildContext context) => Center(
        child: Slider(
          value: r,
          onChanged: (double d) => setState(() => r = d),
        ),
      );
}

Parameters

Name Description
pages Top level destinations of your application.
pageBuilders Also top level destinations but can be lazily loaded.
savePageState Flag to enable/disable saving page state.
pageStack Navigation stack that remembers pages visited. Enhances back button management on Android.
keys Keys that help the layout manage in-page navigation.
bottomBarWrapper Widget that wrap bottom bar.
extendBody Passed to Scaffold.extendBody.
resizeToAvoidBottomInset Passed to Scaffold.resizeToAvoidBottomInset.
navBarDelegate Properties passed into it such as items, onTap, elevation, etc. are used to construct the underlying bottom bar.

Inner Widget Tree

inner_widget_tree


image

Page State Preservation

The state changes you made in a page such as scroll amount, sub-navigation, form inputs etc. are preserved. You can enable it as per Cupertino Design Guidelines or disable it as per Material Design Guidelines

savePageState: true, // Default is true

Lazy Page Loading

Instead of passing pages, pass pageBuilders.

pageBuilders are simple Functions that immediately return the corresponding page. When used, the pages are not created until they are navigated to for the first time. This is useful when a non-initial page has a load animation or runs an unnecessary heavy process.

pageBuilders: [
  () => Center(child: Text("Welcome to bottom_nav_layout")),
  () => GamePage('TicTacToe'),
  () => Center(child: TextField(decoration: InputDecoration(hintText: 'Search...'))),
],

If savePageState is set to false, pages and pageBuilders do the same thing.

Page Back Stack

The layout remembers the order of pages navigated and when back button is pressed, navigates back to the previously navigated page. There are different ways of organizing a page back stack, many of which are readily implemented. You can also implement your own.

pageStack: ReorderToFrontPageStack(initialPage: 0), // Default
// pageStack: StandardPageStack(initialPage: 0),
// pageStack: ReorderToFrontExceptFirstPageStack(initialPage: 0),
// pageStack: NoPageStack(initialPage: 0),
// pageStack: FirstAndLastPageStack(initialPage: 0),

Page Back Stack Types

Consider the following use case. After launching the app, the user;

  • Start at page 0
  • Navigate to page 1
  • Navigate to page 2
  • Navigate to page 1
  • Press back button
  • Navigate to page 0
  • Press back button

Let's look at how different PageStacks behave in this scenario.

StandardPageStack

This behavior is used by Google Play app.

Event Initial push(1) push(2) push(1) pop() push(0) pop()
Stack 0 0->1 0->1->2 0->1->2->1 0->1->2 0->1->2->0 0->1->2

ReorderToFrontPageStack

This is the default behavior. This behavior is used by Instagram, Reddit, and Netflix apps.

Event Initial push(1) push(2) push(1) pop() push(0) pop()
Stack 0 0->1 0->1->2 0->2->1 0->2 2->0 2

ReorderToFrontExceptFirstPageStack

This behavior is used by Youtube app.

Event Initial push(1) push(2) push(1) pop() push(0) pop()
Stack 0 0->1 0->1->2 0->2->1 0->2 0->2->0 0->2

NoPageStack

This behavior is the same as the behavior in BottomNavigationBar example given in flutter docs. It is used by a lot of applications. It is also both Cupertino's and Material's default behavior.

Event Initial push(1) push(2) push(1) pop() push(0) pop()
Stack 0 1 2 1 Exit App N/A N/A

FirstAndLastPageStack

This behavior is used by Google, Gmail, Facebook, and Twitter apps.

Event Initial push(1) push(2) push(1) pop() push(0) pop()
Stack 0 0->1 0->2 0->1 0 0 Exit App

In-Page Navigation Using GlobalKeys


Figure: Flat Navigation

  1. Allows the layout to manage a flat navigation pattern.
  2. Let's us go back to the root route, when the bottom bar item on the current index is selected again.

To do this, the page should have a Navigator widget and the same instance of the key should be used as the Navigator's key in the corresponding page.

Example code to be added here...

To use keys, pass all the keys you passed to the pages in the same order.

keys: <GlobalKey<NavigatorState>?>[
  homePageKey,
  null, // If a page doesn't use a key, pass null so that layout knows the order
  placePageKey,
],

Different Bottom Bars

So far, we only worked on Material design bottom nav bar. The layout also supports other bar designs. To use the design you want, pass the corresponding navBarDelegate to the layout.

The navBarDelegate's APIs are all identical with the respective packages. You will need to import the corresponding bottom bar package to be able to pass some of the parameters. Make sure to check out their documentation before using.

Warning: Some of the packages' index constructor parameter acts as an initialIndex, not as a currentIndex, therefore, selected item cannot be changed when the back button is pressed. To have the best result, only use NoPageStack with bottom bars that doesn't have the currentIndex property.

1. Material

Documentation NavBarDelegate Has currentIndex
BottomNavigationBar BottomNavigationBarDelegate Yes

2. convex_bottom_bar

Documentation NavBarDelegate Has currentIndex
convex_bottom_bar ConvexAppBarDelegate No

Example:

 navBarDelegate: ConvexAppBarDelegate(
   items: [
     TabItem(icon: Icon(Icons.home), title: 'Home'),
     TabItem(icon: Icon(Icons.linear_scale), title: 'Slider'),
     TabItem(icon: Icon(Icons.search), title: 'Search'),
   ],
 ),

3. flutter_snake_navigationbar

Documentation NavBarDelegate Has currentIndex
flutter_snake_navigationbar SnakeNavigationBarDelegate Yes

Example:

navBarDelegate: SnakeNavigationBarDelegate(
  items: [
    BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
    BottomNavigationBarItem(icon: Icon(Icons.linear_scale), label: 'Slider'),
    BottomNavigationBarItem(icon: Icon(Icons.search), label: 'Search'),
  ],
  height: 56,
),

4. salomon_bottom_bar

Documentation NavBarDelegate Has currentIndex
salomon_bottom_bar SalomonBottomBarDelegate Yes

Example:

navBarDelegate: SalomonBottomBarDelegate(
  items: [
    SalomonBottomBarItem(icon: Icon(Icons.home), title: Text('Home')),
    SalomonBottomBarItem(icon: Icon(Icons.linear_scale), title: Text('Slider')),
    SalomonBottomBarItem(icon: Icon(Icons.search), title: Text('Search')),
  ],
),

5. bottom_bar_with_sheet

Documentation NavBarDelegate Has currentIndex
bottom_bar_with_sheet BottomBarWithSheetDelegate No

Example:

navBarDelegate: BottomBarWithSheetDelegate(
  items: [
    BottomBarWithSheetItem(icon: Icons.home),
    BottomBarWithSheetItem(icon: Icons.linear_scale),
    BottomBarWithSheetItem(icon: Icons.linear_scale),
    BottomBarWithSheetItem(icon: Icons.search),
  ],
  sheetChild: Center(child: Text("Welcome to sheetChild")),
),

6. water_drop_nav_bar

Documentation NavBarDelegate Has currentIndex
water_drop_nav_bar WaterDropNavBarDelegate Yes

Example:

navBarDelegate: WaterDropNavBarDelegate(
  barItems: [
    BarItem(filledIcon: Icons.home_filled, outlinedIcon: Icons.home_outlined),
    BarItem(filledIcon: Icons.linear_scale, outlinedIcon: Icons.linear_scale_outlined),
    BarItem(filledIcon: Icons.search, outlinedIcon: Icons.search),
  ],
),

7. sliding_clipped_nav_bar

Documentation NavBarDelegate Has currentIndex
sliding_clipped_nav_bar SlidingClippedNavBarDelegate Yes

Example:

navBarDelegate: SlidingClippedNavBarDelegate(
  barItems: [
    BarItem(icon: Icons.home, title: 'Home'),
    BarItem(icon: Icons.linear_scale, title: 'Slider'),
    BarItem(icon: Icons.search, title: 'Search'),
  ],
  activeColor: Colors.blue,
),

Other Bar Designs

You can use any bottom bar design from pub.dev (even if the package is not included here) or create your own. To do this:

  • Extend NavBarDelegate class .
  • Pass an instance of it to BottomNavLayout.navBarDelegate.

Incompatible Packages:

Bar Styling

Bar Wrapper

Do you not like how your bottom bar looks? You can style it by wrapping it inside any widget.

bottomBarWrapper: (bottomBar) => Padding(
  padding: EdgeInsets.fromLTRB(16, 0, 16, 0),
  child: bottomBar,
),

Extend Body

You can have the page extend behind the bottom bar.

extendBody: true,

Improvements

  • I am planning to add more bottom bar designs, preferably from pub.dev.
  • Tell me if you want to see a feature your app has/needs in this package. I will do my best to integrate that.
  • I am also considering to make a drawer_nav_layout package. If you are interested, let me know!

Community

Any feedback is appreciated. 🚀 🚀

If you have queries, feel free to create an issue.

If you would like to contribute, feel free to create a PR.

Comments
  • Detect last pageStack element

    Detect last pageStack element

    Hello and thank you for this great package , What I'm trying to achieve is to be able to detect the last pageStack element so I can prevent the app from exiting once all screens are popped using android back button , what I did in the willPopScope : onWillPop: () { if (myPageStack.peek() == 0) return Future.value(false); return Future.value(true); }, This has 2 downsides , if somehow the last element isn't the initialPage(==0) a no element error raises and the app becomes no longer usable. If the last element is indeed the initialPage which is 0 then pressing the back button does nothing meaning if there are screens pushed (nested) into that initialPage they won't pop being unable to reach previous screens in that last pageStack. My question is , is there a way to simply find out whether the pageStack is pop-able or not like the (maybePop) function in order to know that the current screen is actually the last so we can anticipate the app from going into background ? Thank you looking forward to your input !

    how to use 
    opened by mohamoha6200 5
  • Is it possible to incorporate a FAB using this package?

    Is it possible to incorporate a FAB using this package?

    As of now, I couldn't find any way to do this directly from scaffold. I'll try doing it with Stack and all but I'd like to know if there is an easier way to do so.

    how to use 
    opened by nazrinharris 3
  • Is it possible to have an overlay widget appear with bottom navigation button press?

    Is it possible to have an overlay widget appear with bottom navigation button press?

    Is it possible to have an overlay widget appear with bottom navigation button press?

    With my current implementation when I press a bottom navigation button, it will always present a new blank screen and place widgets on top of that, here is what Ive tried doing:

        return BottomNavLayout(
          // The app's destinations
          pages: [
                      (...)
                       (navKey5) => BottomNavigationMoreButton()
                     ]
    
    class BottomNavigationMoreButton extends StatefulWidget {
      const BottomNavigationMoreButton({Key? key}) : super(key: key);
    
      @override
      _BottomNavigationMoreButtonState createState() => _BottomNavigationMoreButtonState();
    }
    
    class _BottomNavigationMoreButtonState extends State<BottomNavigationMoreButton> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.transparent,
          body: SizedBox.expand(
            child: DraggableScrollableSheet(
              key: UniqueKey(),
              minChildSize: 0.0,
              builder: (BuildContext context, ScrollController scrollController) {
                return Container(
                  color: Colors.blue[100],
                  child: ListView.builder(
                    controller: scrollController,
                    itemCount: 25,
                    itemBuilder: (BuildContext context, int index) {
                      return ListTile(title: Text('Item $index'));
                    },
                  ),
                );
              },
            ),
          ),
        );
      }
    }
    

    The idea here being that a DraggableScrollableScreen would appear over whatever content you are already looking at when you press one of the bottom navigation icons.

    Possible?

    opened by mark8044 2
  • Pushing Page from Application's Root Navigator Removes all Previous Routes

    Pushing Page from Application's Root Navigator Removes all Previous Routes

    Excellent plugin, and my apologies if this is a general Flutter inquiry not related to this package specifically.

    I want to have a page which can be pushed from anywhere in the app. The page is a full-screen pop-up dialog, and I do not want the bottom bar to appear on this page. However, I want the user to be able to pop from the dialog back to the position they were at (tab selected, page, etc.)

    I am using RootNavigator = true within my Navigator.push to accomplish this. However, when I use push a page from the root context, all my previous routes (the entirety of bottom_nav_layout routes) are immediately disposed.

    This became an even more apparent issue with a video plugin which uses rootNavigator for full-screen. Opening a video in full screen from the root context (to hide the bottombar) disposes the entirety of the bottom bar all together. Thus, when the user exits full screen, the app goes back to the very home of bottomNavLayout, not the video page they were at.

    As a temporary solution for the above, I had fullscreen open without root navigator, and hid the bottomBar using a changeNotifier. Still not the best solution.

    I want to be able to push a page directly on top of the entire navigation stack - independent of the bottombar - and return later with the navigator preserved.

    Thank you for your time.

    outside scope 
    opened by Colton127 2
  • ScrollController for the bar?

    ScrollController for the bar?

    Id like to have the bar scroll away as the user scrolls the screen (something like this: https://pub.dev/packages/scroll_bottom_navigation_bar)

    To do this I believe I need to program some animation with a scrollcontroller.

    Is there anyway to attach a scrollcontroller to your bar?

    PS. Bar is working outstanding!

    invalid 
    opened by mark8044 2
  • Can the bottom bar persist?

    Can the bottom bar persist?

    First off all, the package looks great so far.

    One key requirement some (myself included) may have: Persistent bar.

    We want our bottom navigation bar to always show, no matter what page is navigated to. currently, a new page will cover the bottom navigation bar.

    Can it somehow optionally be programmed to maintain the bottom nav bar at all times?

    how to use 
    opened by mark8044 2
  • Change Tab programmatically

    Change Tab programmatically

    First of all thank you very much for this brilliant package!

    Now my question: How can I programmatically select a screen? Example: Tab1 (ArticleScreen) is active. When I receive a push message, I want to go to Tab4 (FormationenScreen). Is this possible? Previously I have used named routes and get there. But with tabs I do not know the solution.

    :
      return BottomNavLayout(
        pages: [
          (navKey) => NavigatorWithoutRouteNames(
                navKey: navKey,
                initialPage: ArticleScreen(animationController: animationController),
              ),
          (navKey) => NavigatorWithoutRouteNames(
                navKey: navKey,
                initialPage: StageScreen(animationController: animationController),
              ),
          (navKey) => NavigatorWithoutRouteNames(
                navKey: navKey,
                initialPage: GuuggemusigScreen(animationController: animationController),
              ),
          (navKey) => NavigatorWithoutRouteNames(
                navKey: navKey,
                initialPage: FormationenScreen(animationController: animationController),
              ),
          // (navKey) => ArticleScreen(animationController: animationController),
        ],
        bottomNavigationBar: (int currentIndex, Function(int) onTap) => SalomonBottomBar(
          currentIndex: currentIndex,
          onTap: (int index) {
            animationController.reverse().then<dynamic>((data) {
              onTap(index);
              animationController.forward();
            });
          },
          margin: const EdgeInsets.only(left: 8.0, right: 8.0, top: 16.0, bottom: 20.0),
          items: [
            SalomonBottomBarItem(icon: const Icon(LineIcons.bullhorn), title: const Text('News'), selectedColor: AppTheme.bluevereinigte),
            SalomonBottomBarItem(icon: const Icon(LineIcons.music), title: const Text('Guuggerbühnen'), selectedColor: AppTheme.bluevereinigte),
            SalomonBottomBarItem(icon: const Icon(LineIcons.drum), title: const Text('Guuggemusigen'), selectedColor: AppTheme.bluevereinigte),
            SalomonBottomBarItem(icon: const Icon(LineIcons.users), title: const Text('Formationen'), selectedColor: AppTheme.bluevereinigte),
          ],
        ),
        // If savePageState is false, pages cannot be transitioned out.
        savePageState: true,
      );
    :
    
    how to use 
    opened by deezaster 1
  • Hide navigation bar on new screen

    Hide navigation bar on new screen

    Hi!

    To begin with, I will say that this is an excellent solution that is perfectly adapted to any concept. Just love it.

    Question: Is it possible to hide nav bar on a certain screen? (Ex: When user logOut from account and gets to the intro screen.) Thanks.

    how to use 
    opened by DenMarty 1
  • How to open a screen without the Nav bar.

    How to open a screen without the Nav bar.

    How do you navigate to a page without a nav bar. From a screen/widget which has nav bar. Is this possible?

    When I try to open a new screen it always open in the nav bar.

    how to use 
    opened by ajsatam 1
  • feat(willpopup)

    feat(willpopup)

    callback to customize action when there's one page on stack

    bottom_nav_layout: #^3.0.9
        git:
          url: https://github.com/nowjordanhappy/bottom_nav_layout/
          ref: new-feature-willpop
    
    Screen Shot 2022-07-14 at 01 45 51 Screen Shot 2022-07-14 at 01 46 02
    opened by nowjordanhappy 0
  • Unable to change bottom navigation from buttons on the page

    Unable to change bottom navigation from buttons on the page

    I want change the current bottom navigation bar to another. Like: When I click on add to cart button from product detail page it should show selected bottom navigation bar to cart page. Currently It shows me the page but selected page is still homepage.

    Also I can't handle navigation from button on the pages to change bottom navigation.

    opened by AniketDhanak 0
  • Nested pages onWillPop handling

    Nested pages onWillPop handling

    Hello , I'm back here after being stuck with an issue for a while , the problem im facing is that using willPopScope on top of the BottomNavLayout in order to control what happens when the android back button is pressed , makes it impossible of taking advantage of willPopScope again in the nested screens locally , I'm having few scenarios where I need to dismiss a sheet or an overlay on back btn press but instead the global willPopScope gets triggered and the local screen's one doesn't ! I noticed that if I hot reload (global willPopScope get's rebuilt) the local willPopScope starts triggering but the drawback is that the BottomNavLayout breaks completely with a "Bad state: No element" error , I tried using a state management solution to get the sheet controller into the global willPopScope and control it from there but it meant that it needs to be rebuilt but leads to BottomNavLayout breaking again ! I think this is more like a flutter issue , i've been looking into this thread : https://github.com/flutter/flutter/issues/47088 but don't you find it weird that the BottomNavLayout has to into "Bad state: No element" just for it getting rebuilt by a simple hot reload ? Thank you again for this great package man !

    needs investigation 
    opened by mohamoha6200 8
  • Scroll to top doesn't work

    Scroll to top doesn't work

    Have you noticed that if you have scrollviews or list views in the tabs that tapping on the very top bar on iOS no longer does a scroll to top?

    Any solution?

    I tried creating unique keys but that didn't seem to do anything

       return BottomNavLayout(
          // The app's destinations
          pages: [
                (navKey) => Navigator(
                              key: UniqueKey(),
                              initialRoute: "/",
                              onGenerateRoute: (routeSettings) => MaterialPageRoute(
                                builder: (context) {
                             return NewsScreen();
                                },
                              ),
                             ),
                (navKey) => Navigator(
                              key: UniqueKey(),
                              initialRoute: "/2",
                              onGenerateRoute: (routeSettings) => MaterialPageRoute(
                                builder: (context) {
                                  return SecondScreen();
                                },
                              ),
                            ),
                (navKey) => Navigator(
                              key: UniqueKey(),
                              initialRoute: "/3",
                              onGenerateRoute: (routeSettings) => MaterialPageRoute(
                                builder: (context) {
                                  return ThirdScreen();
                                },
                              ),
                            ),
    
          ],
            savePageState:true,
            lazyLoadPages:true,
          extendBody:false,
          pageStack: ReorderToFrontPageStack(initialPage: 0),
          bottomNavigationBar: (...)
    
    enhancement 
    opened by mark8044 14
An Adaptive Navigation Bar in flutter. Navbar changes according to the screen size.

Adaptive NavBar (adaptive_navbar) Table of contents General info Setup Conclusion Useful Resources Meet the developer General info adaptive_navbar is

Mouli Bheemaneti 3 Oct 17, 2022
A grid-based layout system for Flutter, inspired by CSS Grid Layout

Flutter Layout Grid A powerful grid layout system for Flutter, optimized for complex user interface design. Click images to see their code ✨ Featuring

Felt 307 Dec 24, 2022
A grid-based layout system for Flutter, inspired by CSS Grid Layout

Flutter Layout Grid A powerful grid layout system for Flutter, optimized for complex user interface design. Click images to see their code ✨ Featuring

Felt 307 Dec 24, 2022
Flutter After Layout - Brings functionality to execute code after the first layout of a widget has been performed

Flutter After Layout - Brings functionality to execute code after the first layout of a widget has been performed, i.e. after the first frame has been displayed. Maintainer: @slightfoot

Flutter Community 432 Jan 3, 2023
Flutter-nav-bottom-bar-tutorial - A flutter bottom navigation bar tutorial

Flutter Bottom Navigation Bar Tutorial A tutorial with various Flutter bottom na

Aleyna Eser 2 Oct 25, 2022
Custom bottom bar - A bottom tool bar that can be swiped left or right to expose more tools.

custom_bottom_bar A bottom tool bar that can be swiped left or right to expose more tools. usage Create your custom bottom bars with up to four custom

null 4 Jan 26, 2020
A quick sample app on how to implement a friend list and a profile page in Flutter.

FlutterMates All code resides in the /lib folder: there's no Android / iOS specific code needed. The article, slides and how this came to be, is here.

Codemate Ltd 528 Jan 8, 2023
Flutter plugin that provides a quick&dirty workaround for incompatibility between VMWare Airwatch MDM solution and Dart Sockets implementation

airwatch_socket_workaround This plugin has been created to enable flutter apps to reach endpoints that are only reachable using a VMWare airwatch per

Gonçalo Silva 5 Nov 11, 2022
[Flutter package] An easy and quick way to check if the local app is updated with the same version in their respective stores (Play Store / Apple Store ).

Retrieve version and url for local app update against store app Android and iOS Features Using as reference packages like in_app_update , version_chec

Kauê Murakami 11 Nov 9, 2022
Flutter quick code snippets - Feel free to contribute.

Flutter quick code snippets Points to be noted Here you can add your own quick flutter code snippets which can be referred while coding Please make a

Deepa Pandey 13 Sep 21, 2022
A Todo Notes Application developed with flutter, with basic functionalities to write quick Notes.

Notes Application - Flutter A Todo Notes Application developed with flutter, with basic functionalities to write quick Notes. NOTES PASSWORD-PROTECTED

Uttam 22 Jan 1, 2023
Vineet Kalghatgi 32 May 13, 2022
Ever want to create a quick form without wiring everything up? This might be the library for you.

Ever want to create a quick form without wiring everything up? This might be the library for you.

Adam Hammer 15 Sep 13, 2022
Example de layout in Flutter inspiration in Netflix App + Woody Woodpecker Characters

PicFlix Example de layout in Flutter inspiration in Netflix App + Woody Woodpecker Characters Cover extracted of https://twitter.com/winemcbride/statu

Tiago Danin 3 May 17, 2021
flutter development bootcamp layout challenge #2.1

MiCard App Challenge Hey folks! This app is the continuation of the layout_challenge_app. I coded this app from scratch because unfortunate things hap

Damla Çim 1 Jan 6, 2022
Layout of the flutter example.such as Row,Comlun,listview,Just for learning.

Just for learning ❤️ Star ❤️ the repo to support the project or ?? Follow Me.Thanks! Facebook Page Facebook Group QQ Group Developer Flutter Open Flut

Flutter开源社区 308 Nov 29, 2022
Application developed in Flutter with inspired layout in the Tinder

flutter_tinder_template This is an template implementation of the Tinder App with Flutter. How to Run the Project Ensure that you have the flutter ins

Gildson 41 Sep 21, 2021
Learn to build a basic app layout using only Flutter & Dart

basic-flutter-layout Created by Thai Duong Do (Tad Wilson) for non-commercial pu

TAD 5 Oct 12, 2022
Layout of the flutter example.such as Row,Comlun,listview,Just for learning.

Just for learning ❤️ Star ❤️ the repo to support the project or ?? Follow Me.Thanks! Facebook Page Facebook Group QQ Group Developer Flutter Open Flut

Flutter开源社区 308 Nov 29, 2022