Flutter學習筆記(18)--Drawer抽屜組件

来源:https://www.cnblogs.com/upwgh/archive/2019/08/18/11374576.html
-Advertisement-
Play Games

Drawer(抽屜組件)可以實現類似抽屜拉出和推入的效果,可以從側邊欄拉出導航面板。通常Drawer是和ListView組件組合使用的。 Drawer組件可以添加頭部效果,用DrawerHeader和UserAccountsDrawerHeader這兩個組件可以實現。 DrawerHeade... ...


如需轉載,請註明出處:Flutter學習筆記(18)--Drawer抽屜組件

Drawer(抽屜組件)可以實現類似抽屜拉出和推入的效果,可以從側邊欄拉出導航面板。通常Drawer是和ListView組件組合使用的。

Drawer組件屬性及說明
屬性名 類型 預設值 說明
child Widget   Drawer的child可以放置任意可顯示的對象
elevation double 16 墨紙設計中組件的z坐標順序

 

 

 

 

 

 

 

Drawer組件可以添加頭部效果,用DrawerHeader和UserAccountsDrawerHeader這兩個組件可以實現。

DrawerHeader:展示基本信息

UserAccountsDraweHeader:展示用戶頭像、用戶名、Email等信息

 

DrawerHeader組件屬性及描述
屬性名 類型 說明
decoration Decoration header區域的decoration,通常用來設置背景顏色或者背景圖片
curve Curve 如果decoration發生了變化,則會使用curve設置的變化曲線和duration設置的動畫時間來做一個切換動畫
child Widget header裡面所顯示的內容控制項
padding EdgeInsetsGeometry header裡面內容控制項的padding指。如果child為null的話,則這個值無效
margin EdgeInsetsGeometry header四周的間隙

 

 

 

 

 

 

 

 

 

UserAccountsDrawerHeader組件屬性及說明
屬性名 類型 說明
margin EdgeInsetsGeometry Header四周的間隙
decoration Decoration header區域的decoration,通常用來設置背景顏色或者背景圖片
currentAccountPicture Widget 用來設置當前用戶的頭像
otherAccountsPictures List<Widget> 用來設置當前用戶其他賬號的頭像
accountName Widget 當前用戶名
accountEmail Widget 當前用戶Email
onDetailsPressed VoidCallBack 當accountName或accountEmail被點擊的時候所觸發的回調函數,可以用來顯示其他額外的信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Demo示例:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget{
  final List<Tab> _mTabs = <Tab>[
    Tab(text: 'Tab1',icon: Icon(Icons.airline_seat_flat_angled),),
    Tab(text: 'Tab2',icon: Icon(Icons.airline_seat_flat_angled),),
    Tab(text: 'Tab3',icon: Icon(Icons.airline_seat_flat_angled),),
  ];
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Drawer Demo',
      home: DefaultTabController(
          length: _mTabs.length,
          child: new Scaffold(
            appBar: new AppBar(
              //自定義Drawer的按鈕
              leading: Builder(
                  builder: (BuildContext context){
                    return IconButton(
                        icon: Icon(Icons.wifi_tethering),
                        onPressed: (){
                          Scaffold.of(context).openDrawer();
                        }
                    );
                  }
              ),
              title: new Text('Drawer Demo'),
              backgroundColor: Colors.cyan,
              bottom: new TabBar(
                  tabs: _mTabs
              ),
            ),
            body: new TabBarView(
                children: _mTabs.map((Tab tab){
                  return new Center(
                    child: new Text(tab.text),
                  );
                }).toList()
            ),
            drawer: Drawer(
              child: ListView(
                children: <Widget>[
                  Container(
                    height: 150,
                    child: UserAccountsDrawerHeader(
                        //設置用戶名
                        accountName: new Text('Drawer Demo 抽屜組件'),
                        //設置用戶郵箱
                        accountEmail: new Text('www.baidu.com'),
                        //設置當前用戶的頭像
                        currentAccountPicture: new CircleAvatar(
                          backgroundImage: new AssetImage('images/timg.jpg'),
                        ),
                        //回調事件
                        onDetailsPressed: (){
                        },
                    ),
                  ),
                  ListTile(
                    leading: Icon(Icons.wifi),
                    title: new Text('無線網路1'),
                    subtitle: new Text('我是副標題'),
                  ),
                  ListTile(
                    leading: Icon(Icons.wifi),
                    title: new Text('無線網路2'),
                    subtitle: new Text('我是副標題'),
                  ),
                  ListTile(
                    leading: Icon(Icons.wifi),
                    title: new Text('無線網路3'),
                    subtitle: new Text('我是副標題'),
                    onTap: (){
                      print('ssss');
                    },
                  ),
                  ListTile(
                    leading: Icon(Icons.wifi),
                    title: new Text('無線網路4'),
                    subtitle: new Text('我是副標題'),
                  ),
                ],
              ),
            ),
          )
      ),
    );
  }
}

 

效果截圖:

Demo感覺沒什麼好解釋的,就是一般的簡單用法,特別說一下,添加Drawer組件,Scaffold會自動給我們生成一個Drawer的按鈕,如果我們在appBar中手動設置leading,確實是會更改這個按鈕的圖標,但是點擊這個圖標就不會彈出Drawer了,所以如果我們有需要自定義Drawer的圖標的話,需要如下處理:

            leading: Builder(
                  builder: (BuildContext context){
                    return IconButton(
                        icon: Icon(Icons.wifi_tethering),
                        onPressed: (){
                          Scaffold.of(context).openDrawer();
                        }
                    );
                  }
              ),    

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • cdh6.3企業級大數據視頻教程 鏈接:https://pan.baidu.com/s/1NSAWV4qD-mLN-jWNg8UUlA 提取碼:plnt 系統和軟體版本1,操作系統:Centos7.62,Cloudera Manager : 6.3 下載地址:https://archive.clou ...
  • 前言: 前面幾篇文章為大家介紹了DML以及DDL語句的使用方法,本篇文章將主要講述常用的查詢語法。其實MySQL官網給出了多個示例資料庫供大家實用查詢,下麵我們以最常用的員工示例資料庫為準,詳細介紹各自常用的查詢語法。 1.員工示例資料庫導入 官方文檔員工示例資料庫介紹及下載鏈接: "https:/ ...
  • 前言: 在上篇文章中,主要為大家介紹的是DDL語句的用法,可能細心的同學已經發現了。本篇文章將主要聚焦於DML語句,為大家講解表數據相關操作。 這裡說明下DDL與DML語句的分類,可能有的同學還不太清楚。 DDL(Data Definition Language):數據定義語言,用於創建、刪除、修改 ...
  • 刷新許可權,將某些許可權從硬碟刷新到記憶體中(修改root密碼自帶隱式刷新許可權操作) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> 查看服務埠 mysql> show variables like 'port';... ...
  • MySQL管理——操作和查看資料庫的命令 摘要:本文主要學習了操作和查詢資料庫的常用命令。 查看資料庫的基本信息 查詢所有的資料庫 語法: 示例: 指定要使用的資料庫 語法: 示例: 查詢指定資料庫所有的表 語法: 示例: 查詢指定表的欄位 語法: 示例: 查詢指定表的索引 語法: 示例: ...
  • 概述 越來越多的企業選擇上雲,最基礎的雲服務就是IaaS(Infrastructure as a Service)服務,直觀理解就是虛擬主機,用戶不用再自建機房,自己購買伺服器,而是直接向雲廠商購買虛擬主機服務ECS(Elastic Compute Service),按時按量付費。對於資料庫而言,將 ...
  • 1.安裝 下載地址:https://dev.mysql.com/downloads/mysql/ 常見問題及解決辦法:https://blog.csdn.net/chen97_08/article/details/81484286 1.1.添加環境變數 將解壓後的mysql 5.7.21 winx6 ...
  • 需要安裝Navicat軟體 可以複製百度雲鏈接,若失效,請聯繫我,我會儘快回覆 將鏈接中的破解文件複製到軟體安裝的位置即完成破解 鏈接:https://pan.baidu.com/s/1sIkjsd3TXyNZF9vdhOAnUQ 提取碼:kq7t 複製這段內容後打開百度網盤手機App,操作更方便哦 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...