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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...