flutter 三:界面结构

1.Material 应用

如果不想flutter debug的时候模拟器右上角显示DEBUG,就添加:

debugShowCheckedModeBanner: false,

在这里插入图片描述
另外建dart文件,给main.dart减负。
因为post.dart在相对于listview_demo.dart的上一级目录往下找,所以加一个…/

import '../model/post.dart';

在这里插入图片描述

2.AppBar:工具栏上的图标按钮(IconButton)

Scaffold下设置导航栏。

class Home extends StatelessWidget{
 
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
    appBar:AppBar(
      title:Text('NINGHAO'),
      elevation:30.0,//阴影默认4.0

      leading: IconButton(
        icon: Icon(Icons.menu), 
        tooltip: 'Navigation',
        onPressed: ()=>debugPrint('Navigation button is pressed')
        ),

        actions: <Widget>[//actions: <Widget>里可以设置一组小部件
          IconButton(
            icon: Icon(Icons.search), 
            tooltip: 'search',
            onPressed: ()=>debugPrint('search button is pressed')
         ),
          IconButton(
            icon: Icon(Icons.more_horiz), 
            tooltip: 'more_horiz',
            onPressed: ()=>debugPrint('more_horiz button is pressed')
         ),
        ],
    ),
    body:ListViewDemo()
  );
  }
}

在这里插入图片描述

3.TabBar:用标签形式展示内容

用DefaultTabController控制

class Home extends StatelessWidget{
 
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return DefaultTabController(
      length: 3, 
    child: Scaffold(
    appBar:AppBar(
      title:Text('NINGHAO'),
      elevation:30.0,//阴影默认4.0

      leading: IconButton(
        icon: Icon(Icons.menu), 
        tooltip: 'Navigation',
        onPressed: ()=>debugPrint('Navigation button is pressed')
        ),

      actions: <Widget>[//actions: <Widget>里可以设置一组小部件
          IconButton(
            icon: Icon(Icons.search), 
            tooltip: 'search',
            onPressed: ()=>debugPrint('search button is pressed')
         ),
          IconButton(
            icon: Icon(Icons.more_horiz), 
            tooltip: 'more_horiz',
            onPressed: ()=>debugPrint('more_horiz button is pressed')
         ),
        ],
      bottom: TabBar(
        tabs: <Widget>[
          Tab(icon: Icon(Icons.local_florist)),
          Tab(icon: Icon(Icons.change_history)),
          Tab(icon: Icon(Icons.directions_bike)),
        ],
        ),
    ),
    body:TabBarView(
      children: <Widget>[
        ListViewDemo(),
        Icon(Icons.local_florist,size:128.0,color:Colors.black12),
        Icon(Icons.directions_bike,size:128.0,color:Colors.black12),
      ],
    )
  ),
    );
  }
}

在这里插入图片描述
在这里插入图片描述

4.TabBar:自定义标签栏的样式

unselectedLabelColor: Colors.black38,
        indicatorColor: Colors.black54,//
        indicatorSize: TabBarIndicatorSize.label,
        indicatorWeight: 1.0,

在这里插入图片描述

5.Material:自定义按钮水波纹样式

highlightColor: Color.fromRGBO(255, 255, 255, 0.5),//白色,不透明度是0.5
splashColor: Colors.white70//水波纹不透明度是70的白色

在这里插入图片描述

6.Drawer:抽屉(边栏)

左边滑动出现的抽屉

drawer: Text('This is drawer'),

右边滑动出现的抽屉

endDrawer: Text('This is drawer'),
drawer: Container(
      color:Colors.blue,
      padding: EdgeInsets.all(8.0),//内边距
      child: Column(
        mainAxisAlignment:MainAxisAlignment.center,
        children:<Widget>[
          Text('This is drawer')
        ],
      ),
    ),

在这里插入图片描述

7. Drawer:在抽屉里使用 ListView, DrawerHeader,ListTile

drawer: Drawer(
      child:ListView(
        padding:EdgeInsets.zero,
        children:<Widget>[
          DrawerHeader(
            child:Text('header'.toUpperCase()),
            decoration: BoxDecoration(
              color:Colors.grey[100],
            ),
          ),
          ListTile(
            title:Text('Messages',textAlign:TextAlign.right),
            trailing: Icon(Icons.message,color:Colors.black12,size:22.0),
          ),
          ListTile(
            title:Text('Favorite',textAlign:TextAlign.right),
            leading: Icon(Icons.favorite,color:Colors.black12,size:22.0),
          ),
          ListTile(
            title:Text('Setting',textAlign:TextAlign.right),
            trailing: Icon(Icons.settings,color:Colors.black12,size:22.0),
          )
        ]
      )
    )

在这里插入图片描述

8.Drawer:抽屉的打开与关闭

/*leading: IconButton(//  注释掉,就会默认把Draw添加上
        icon: Icon(Icons.menu), 
        tooltip: 'Navigation',
        onPressed: ()=>debugPrint('Navigation button is pressed')
        ),
      */

关闭

onTap:() =>Navigator.pop(context),

在这里插入图片描述# 9.UserAccountDrawerHeader:抽屉里的用户帐号信息

UserAccountsDrawerHeader(
            accountName: Text('wanghao',style:TextStyle(fontWeight:FontWeight.bold)),
            accountEmail: Text('wanghao@ninghao.net'),
            currentAccountPicture:CircleAvatar(
              backgroundImage: NetworkImage('https://resources.ninghao.org/images/wanghao.jpg'),
            ),
          ),

在这里插入图片描述

10.用户帐户头部的背景图像

decoration: BoxDecoration(//头部账户背景
              color:Colors.yellow[400],
              image: DecorationImage(
                image: NetworkImage('https://resources.ninghao.org/images/childhood-in-a-picture.jpg'),
                fit: BoxFit.cover,//填充方式,全部填满
                colorFilter: ColorFilter.mode(Colors.yellow[400].withOpacity(0.6), BlendMode.hardLight),//滤镜
                ),
            ),
            

在这里插入图片描述

11.创建 DrawerDemo 小部件

单独用个小部件存放抽屉
drawer_demo.dart:

import 'package:flutter/material.dart';
class Drawerdemo extends StatelessWidget{
@override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Drawer(
      child:ListView(
        padding:EdgeInsets.zero,
        children:<Widget>[
          /*DrawerHeader(
            child:Text('header'.toUpperCase()),
            decoration: BoxDecoration(
              color:Colors.grey[100],
            ),
          ),*/
          UserAccountsDrawerHeader(//头部账户
            accountName: Text('wanghao',style:TextStyle(fontWeight:FontWeight.bold)),
            accountEmail: Text('wanghao@ninghao.net'),
            currentAccountPicture:CircleAvatar(
              backgroundImage: NetworkImage('https://resources.ninghao.org/images/wanghao.jpg'),
            ),
            decoration: BoxDecoration(//头部账户背景
              color:Colors.yellow[400],
              image: DecorationImage(
                image: NetworkImage('https://resources.ninghao.org/images/childhood-in-a-picture.jpg'),
                fit: BoxFit.cover,//填充方式,全部填满
                colorFilter: ColorFilter.mode(Colors.yellow[400].withOpacity(0.6), BlendMode.hardLight),//滤镜
                ),
            ),

          ),
          
          ListTile(
            title:Text('Messages',textAlign:TextAlign.right),
            trailing: Icon(Icons.message,color:Colors.black12,size:22.0),
            onTap:() =>Navigator.pop(context),
          ),
          ListTile(
            title:Text('Favorite',textAlign:TextAlign.right),
            leading: Icon(Icons.favorite,color:Colors.black12,size:22.0),
            onTap:() =>Navigator.pop(context),
          ),
          ListTile(
            title:Text('Setting',textAlign:TextAlign.right),
            trailing: Icon(Icons.settings,color:Colors.black12,size:22.0),
            onTap:() =>Navigator.pop(context),
          )
        ]
      )
    );
  }
}

使用:
导入头文件

import 'demo/drawer_demo.dart';
drawer: Drawerdemo()

12.BottomNavigationBar:底部导航栏

bottomNavigationBar: BottomNavigationBar(
      type: BottomNavigationBarType.fixed,//底部导航栏超过4个就要设置这个type,不然不显示
      fixedColor: Colors.black,//激活状态的颜色
      items: [
        BottomNavigationBarItem(
          icon: Icon(Icons.explore),
          title: Text('Explore'),
          ),
        BottomNavigationBarItem(
          icon: Icon(Icons.history),
          title: Text('History'),
          ),
        BottomNavigationBarItem(
          icon: Icon(Icons.list),
          title: Text('List'),
          ),
        BottomNavigationBarItem(
          icon: Icon(Icons.person),
          title: Text('person'),
          ),
      ]
      ),

在这里插入图片描述

13.BottomNavigationBar:底部导航栏的激活状态

单独写个dart,存放底部导航栏
bottom_navigation_bar.dart:

import 'package:flutter/material.dart';
class BottomNavigationbarDemo extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _BottomNavigationBarDemoState();
  }
}
class _BottomNavigationBarDemoState extends State<BottomNavigationbarDemo>{
 int _currentIndex=0;//自定义变量和函数
 void _onTapHandler (int index){
    setState((){
      _currentIndex=index;
    }

    );
 }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return BottomNavigationBar(
      currentIndex: _currentIndex,//当前item
      onTap: _onTapHandler,//点击调用
      type: BottomNavigationBarType.fixed,//底部导航栏超过4个就要设置这个type,不然不显示
      fixedColor: Colors.black,//激活状态的颜色
      items: [
        BottomNavigationBarItem(
          icon: Icon(Icons.explore),
          title: Text('Explore'),
          ),
        BottomNavigationBarItem(
          icon: Icon(Icons.history),
          title: Text('History'),
          ),
        BottomNavigationBarItem(
          icon: Icon(Icons.list),
          title: Text('List'),
          ),
        BottomNavigationBarItem(
          icon: Icon(Icons.person),
          title: Text('person'),
          ),
      ]
      );
  }
}

在这里插入图片描述

demo

Demo

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值