首页 > 其他分享 >Flutter Scaffold

Flutter Scaffold

时间:2023-01-08 14:55:45浏览次数:34  
标签:Widget Icons Text Scaffold child Flutter Icon

Read about Flutter Scaffold, its uses, properties and the importance of Scaffold widget in Flutter Apps.
The Scaffold widget is the base of the screen for a single page. It is used to implement the basic functional layout structure of an app. You can easily implement functional widgets like AppBar, FloatingActionButton, ButtonNavigationBar, Drawer, and many more widgets on the app using the Scaffold widget.

You can easily build an app using Scaffold and implement basic components with very less code, it can allow you to put all the material components to give look and feel to your app.

Constructors of Scaffold() widget:

Scaffold({
  Key key, 
  PreferredSizeWidget appBar, 
  Widget body, 
  Widget floatingActionButton, 
  FloatingActionButtonLocation floatingActionButtonLocation, 
  FloatingActionButtonAnimator floatingActionButtonAnimator, 
  List persistentFooterButtons, 
  Widget drawer, 
  Widget endDrawer, 
  Widget bottomNavigationBar, 
  Widget bottomSheet, 
  Color backgroundColor, 
  bool resizeToAvoidBottomPadding, 
  bool resizeToAvoidBottomInset, 
  bool primary: true, 
  DragStartBehavior drawerDragStartBehavior: 
  DragStartBehavior.start, 
  bool extendBody: false, 
  bool extendBodyBehindAppBar: false, 
  Color drawerScrimColor, 
  double drawerEdgeDragWidth, 
  bool drawerEnableOpenDragGesture: true, 
  bool endDrawerEnableOpenDragGesture: true
})

The properties of the constructors are explained below:

1. appBar - PreferredSizeWidget

It is a horizontal bar displayed at the top of the screen. The app bar is one of the main components in your app, without it, your app may seem incomplete. The appBar widget has its own properties like elevation, title, actions, etc.

Scaffold(
  appBar: AppBar( 
      title:Text("AppBar"), //title aof appbar
      backgroundColor: Colors.redAccent, //background color of appbar
  ),
)

image

2. backgroundColor - Color

This property on Scaffold is used to change the background color of the Scaffold screen.

Scaffold(
    backgroundColor: Colors.blue, //set background color of scaffold to blue
)

image

3. body - Widget

This is the main content property on Scaffold. You have to pass the widget and it will be displayed on the screen.

Scaffold(
  body: Center( //content body on scaffold
       child: Text("Scaffold Widget")
  )
)

4. floatingActionButton - Widget

It is a floating button that is used for quick action.

Scaffold(
    floatingActionButton:FloatingActionButton( //Floating action button on Scaffold
        onPressed: (){
            //code to execute on button press
        },
        child: Icon(Icons.send), //icon inside button
    )
)

image

class HomePage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("AppBar"), // title of appbar
          backgroundColor: Colors.redAccent, // background color of appbar
        ),
        backgroundColor: Colors.yellow,
        floatingActionButton: FloatingActionButton(//Floating action button on Scaffold
          //To pass data to the back page, you need to put Navigator.push() method
          //on "Click on Me" or any back buttons like below:
          //传递参数到上一页时需要这样设置
            onPressed:() async {
              var backdata = await Navigator.push(context, MaterialPageRoute(builder:(context){
                return SecondScreen(word: "Hello", val: 4);
              }));
              print(backdata);
            },
          child: Icon(Icons.send), // icon inside button
        ),
        body: Center(
            child: TextButton(
                onPressed: () { print("scaffold widget text button clicked"); },
                child: Text("Scaffold Widget"),

            )
        )
    );
  }
}

效果如下
image

5. floatingActionButtonLocation - FloatingActionButtonLocation

This property is used to set location of Floating action button on the screen.
image

6. drawer - Widget

It is a navigation panel where you can put different menu items to navigate. When you add a drawer to Scaffold, the menu icon will appear on appBar.

Scaffold(
  drawer: Drawer( //drawer navigation on scaffold
    child: SafeArea(
     child:Column( //column widget
      children: [
          ListTile(
            leading: Icon(Icons.home),
            title: Text("Home Page"),
            subtitle: Text("Subtitle menu 1"),
          ),
          ListTile(
            leading: Icon(Icons.search),
            title: Text("Search Page"),
            subtitle: Text("Subtitle menu 1"),
          ),

          //put more menu items here
      ],
    ),
   ),
  ),
)

很形象的关键字——抽屉。
image

7. bottomNavigationBar - Widget

This component is similar to appBar which is displayed at bottom of the screen. You can pass BottomNavigationBar() widget or BottomAppBar() widget on this property.

Scaffold(
  bottomNavigationBar: BottomNavigationBar( //bottom navigation bar on scaffold
    items: [ //items inside navigation bar
        BottomNavigationBarItem(
          icon: Icon(Icons.add),
          label: "Button 1",
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.search),
          label: "Button 2",
        ),
        BottomNavigationBarItem(
          icon: Icon(Icons.camera),
          label: "Button 3",
        ),

        //put more items here
    ],
  ),
)

这个就是底部的appBar
image
如果用另一种

bottomNavigationBar: BottomAppBar(
	//bottom navigation bar on scaffold
	child: Text(
		"hello buttom",textAlign: TextAlign.center,
	),
)

效果如下
image

You can also set notched shape on bottomNavigationBar with BottomAppBar().

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("AppBar"), // title of appbar
          backgroundColor: Colors.redAccent, // background color of appbar
        ),
        backgroundColor: Colors.white,
        floatingActionButton: FloatingActionButton(
          //Floating action button on Scaffold
          //To pass data to the back page, you need to put Navigator.push() method
          //on "Click on Me" or any back buttons like below:
          //传递参数到上一页时需要这样设置
          onPressed: () async {
            var backdata = await Navigator.push(context,
                MaterialPageRoute(builder: (context) {
              return SecondScreen(word: "Hello", val: 4);
            }));
            print(backdata);
          },
          child: Icon(Icons.send), // icon inside button
        ),
        //This property is used to set location of Floating action button on the screen.
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        drawer: Drawer(
          //drawer navigation on scaffold
          child: SafeArea(
            child: Column(
              //column widget
              children: [
                ListTile(
                  leading: Icon(Icons.home),
                  title: Text("Home Page"),
                  subtitle: Text("Subtitle menu 1"),
                  onTap: () {
                    //fixme not work
                    (context) => HomePage();
                  },
                ),
                ListTile(
                    leading: Icon(Icons.search),
                    title: Text("Search Page"),
                    subtitle: Text("Subtitle menu 1"),
                    onTap: () {
                      //fixme not work
                      (context) => SecondScreen(word: "searchWord", val: 5);
                    }),

                //put more menu items here
              ],
            ),
          ),
        ),
        bottomNavigationBar: BottomAppBar(//bottom navigation bar on scaffold
          shape: CircularNotchedRectangle(), //shape of notch
          notchMargin: 10, //notche margin between floating button and bottom appbar
          //bottom navigation bar on scaffold
          child: Row( //children inside bottom appbar
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children:[
                IconButton(onPressed: (){}, icon: Icon(Icons.menu)),
                IconButton(onPressed: (){}, icon: Icon(Icons.search)),
              ]
          ),

          color: Colors.blue,
          // items: [ //items inside navigation bar
          //   BottomNavigationBarItem(
          //     icon: Icon(Icons.add),
          //     label: "Button 1",
          //   ),
          //   BottomNavigationBarItem(
          //     icon: Icon(Icons.search),
          //     label: "Button 2",
          //   ),
          //   BottomNavigationBarItem(
          //     icon: Icon(Icons.camera),
          //     label: "Button 3",
          //   ),
          //
          //   //put more items here
          // ],
        ),
        body: Center(
            child: TextButton(
          onPressed: () {
            print("scaffold widget text button clicked");
          },
          child: Text("Scaffold Widget"),
        )));
  }
}

效果perfect~
image

标签:Widget,Icons,Text,Scaffold,child,Flutter,Icon
From: https://www.cnblogs.com/ukzq/p/17034594.html

相关文章