Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add Floating action Button in Bottom Navigation Bar in Center with border?

I am trying to add a Floating Action Button in the middle of the Bottom Navigation bar. Problem is border is not appearing and also margin in Floating Action Button and icons not according to my requirement.

Here is a picture of the issue. Achieved Image

Here is a picture what I want Required Image

Code

    bottomNavigationBar: SafeArea(child: _buildBottomBar(context)),
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        floatingActionButton: CircularGradientButton(
          tooltip: 'Increment',
          child: new Image.asset(UIData.cameraIcon),
          gradient: LinearGradient(colors: <Color>[
            Color.fromARGB(255, 17, 153, 142),
            Color.fromARGB(255, 56, 239, 125)
          ]),
          callback: () => openCamera(),
          //_optionsDialogBox(),
          elevation: 2.0,
        ), 



    Widget _buildBottomBar(BuildContext context) {
    return Material(
      color: Colors.white,
      child: TabBar(
        isScrollable: false,
        unselectedLabelColor: Colors.white.withOpacity(0.3),
        indicatorColor: Colors.white,
        tabs: <Tab>[
          new Tab(
            // set icon to the tab
            icon: Image.asset(
              _tabController.index == 0 ? UIData.mapIconActive : UIData.mapIcon,
              width: 30,
              height: 30,
            ),
          ),
          new Tab(
            icon: Image.asset(
              _tabController.index == 1
                  ? UIData.listingIconActive
                  : UIData.listingIcon,
              width: 30,
              height: 30,
            ),
          ),
          new Tab(
            icon: Image.asset(
              _tabController.index == 2
                  ? UIData.messageIconActive
                  : UIData.messageIcon,
              width: 30,
              height: 30,
            ),
          ),
          new Tab(
            icon: Image.asset(
              _tabController.index == 3
                  ? UIData.settingsIconActive
                  : UIData.settingsIcon,
              width: 30,
              height: 30,
            ),
          ),
        ],
        controller: _tabController,
      ),
    );
  }
like image 705
Gursewak Singh Avatar asked Sep 13 '19 05:09

Gursewak Singh


People also ask

How do you give the border to the floating action button?

To change the shape of the Floating action button: You can use the shape property of FloatingActionButton() widget class. Implement BeveledRectangleBorder( ) on this property. The output will be a square floating action button, increase the border-radius value to make a circular type shape.

Where do you put the floating action button?

The button should be placed in the bottom right corner of the screen. The recommended margin for the bottom is 16dp for phones and 24dp for tablets. In the example above, 16dp was used. The actual drawable size should be 24dp according to the Google design specs.


3 Answers

There are many possible solutions, one of them is to add padding and border.

enter image description here

import 'package:charts_flutter/flutter.dart' as prefix0;
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        backgroundColor: Colors.blueAccent,
        floatingActionButton: Padding(
          padding: EdgeInsets.only(top: 20),
          child: SizedBox(
            height: 70,
            width: 70,
            child: FloatingActionButton(
              backgroundColor: Colors.transparent,
              elevation: 0,
              onPressed: () {},
              child: Container(
                height: 70,
                width: 70,
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.white, width: 4),
                  shape: BoxShape.circle,
                  gradient: LinearGradient(
                    begin: const Alignment(0.7, -0.5),
                    end: const Alignment(0.6, 0.5),
                    colors: [
                      Color(0xFF53a78c),
                      Color(0xFF70d88b),
                    ],
                  ),
                ),
                child: Icon(Icons.photo_camera, size: 30),
              ),
            ),
          ),
        ),
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        bottomNavigationBar: BottomAppBar(
          color: Colors.white,
          child: Container(
            height: 80,
            color: Colors.white,
          ),
        ),
      ),
    );
  }
}
like image 192
Kherel Avatar answered Oct 12 '22 14:10

Kherel


Here is a crystal clear official demonstration : https://youtu.be/2uaoEDOgk_I

Code will be something like this:

Scaffold(..
  floatingActionButton..
  bottomNavigationBar..
    floatingActionButtonLocation: FloatingActionButtonLocation.endDocked
like image 22
shaheer shukur Avatar answered Oct 12 '22 12:10

shaheer shukur


Another option is to use notchMargin in your BottomAppBar to get the opposite to your answer. It looks amazing so I decided to add that option too.

https://medium.com/codechai/flutter-hasnotch-property-disappeared-from-bottomappbar-solved-986552fa03a

return Scaffold(
  appBar: AppBar(
    title: Text('Flutter notch demo'),
  ),
  bottomNavigationBar: BottomAppBar(
    notchMargin: 2.0,
    shape: CircularNotchedRectangle(),
  ),
  floatingActionButtonLocation:
  FloatingActionButtonLocation.endDocked,
  floatingActionButton: FloatingActionButton(
  onPressed: () => Navigator.of(context).pop(),
  child: Icon(Icons.done_all),
  ),
);

enter image description here

like image 1
genericUser Avatar answered Oct 12 '22 12:10

genericUser