Flutter基礎(基礎概念和方法)

概念比喻
StatefulWidget會變魔術的電視機
State電視機的小腦袋(記信息)
build 方法電視機變身顯示新畫面
setState按遙控器按鈕改變狀態
Scaffold電視機的外殼
  1. StatefulWidget:創建一個按鈕組件。
  2. State:保存點贊數(比如?int likes = 0)。
  3. build () 方法:顯示按鈕和當前點贊數。
  4. 點擊按鈕時:調用?setState(() { likes++; })
  5. Flutter 自動觸發:再次調用?build()?方法,更新 UI 顯示新的點贊數。

Scaffold 是什么?

Scaffold?是 Flutter 提供的一個?基礎頁面框架,就像蓋房子的 "腳手架" 一樣,幫你快速搭建出一個符合?Material Design 設計規范的頁面。

它提供了這些東西:

  • 頂部的導航欄(AppBar)
  • 中間的內容區域(body)
  • 底部的導航欄(BottomNavigationBar)
  • 浮動按鈕(FloatingActionButton)
  • 側邊欄(Drawer)
  • 底部彈窗(SnackBar)

Scaffold 的常用屬性

屬性名作用
appBar頂部導航欄,顯示標題、操作按鈕(如搜索、菜單)等。
body頁面的主體內容區域,可以是文本、圖片、列表等任何組件。
floatingActionButton懸浮按鈕,通常在右下角,用于執行主要操作(如 "添加")。
bottomNavigationBar底部導航欄,用于在不同頁面 / 功能之間切換(如微信底部的 "微信、通訊錄" 等)。
drawer側邊欄,從左側滑出,通常用于顯示菜單或用戶信息。
backgroundColor頁面背景顏色。

下面是一個包含 Scaffold 所有主要部分的代碼:

import 'package:flutter/material.dart';void main() => runApp(const MyApp());class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 1. 頂部導航欄appBar: AppBar(title: const Text('Scaffold 示例'),actions: [IconButton(icon: const Icon(Icons.search),onPressed: () {},),],),// 2. 中間內容區域body: const Center(child: Text('這是頁面的主體內容!'),),// 3. 懸浮按鈕(右下角)floatingActionButton: FloatingActionButton(onPressed: () {},child: const Icon(Icons.add),),// 4. 底部導航欄bottomNavigationBar: BottomNavigationBar(items: const [BottomNavigationBarItem(icon: Icon(Icons.home),label: '首頁',),BottomNavigationBarItem(icon: Icon(Icons.person),label: '我的',),],),// 5. 側邊欄(從左側滑出)drawer: Drawer(child: ListView(children: const [DrawerHeader(child: Text('側邊欄標題'),decoration: BoxDecoration(color: Colors.blue,),),ListTile(title: Text('菜單項 1'),),ListTile(title: Text('菜單項 2'),),],),),),);}
}

運行效果示意圖

+-----------------------------------+
|  <--  |  Scaffold 示例  |  [搜索]  |    ← AppBar(導航欄)
+-----------------------------------+
|                                   |
|                                   |
|        這是頁面的主體內容!        |    ← body(主體內容)
|                                   |
|                                   |
+-----------------------------------+
|  [首頁]        [我的]             |    ← BottomNavigationBar(底部導航)
+-----------------------------------+
|              [+]                  |    ← FloatingActionButton(懸浮按鈕)
+-----------------------------------+

屬性顯示位置示例代碼
MaterialApp(title: ...)操作系統任務管理器、應用列表MaterialApp(title: '計數器示例')
AppBar(title: ...)應用內當前頁面的導航欄AppBar(title: Text('計數器應用'))

完整代碼

import 'package:flutter/material.dart';void main() {// 啟動Flutter應用,運行MyApp組件runApp(const MyApp());
}// 應用的根組件(無狀態組件)
class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return MaterialApp(title: '計數器示例',theme: ThemeData(primarySwatch: Colors.blue, // 設置主題色為藍色),home: const CounterPage(), // 設置首頁為CounterPage);}
}// 計數器頁面(有狀態組件)
class CounterPage extends StatefulWidget {const CounterPage({Key? key}) : super(key: key);@override_CounterPageState createState() => _CounterPageState();
}// 計數器頁面的狀態類
class _CounterPageState extends State<CounterPage> {int _counter = 0; // 聲明一個變量存儲計數器的值,初始值為0// 增加計數器值的方法void _incrementCounter() {setState(() {// 修改狀態:將_counter的值加1// 調用setState后,Flutter會自動重新調用build()方法更新UI_counter++;});}// 減少計數器值的方法void _decrementCounter() {setState(() {if (_counter > 0) {_counter--; // 只有當計數器大于0時才減1}});}@overrideWidget build(BuildContext context) {// Scaffold是Material Design風格的頁面框架return Scaffold(appBar: AppBar(title: const Text('計數器應用'), // 設置導航欄標題),body: Center( // 將子組件居中顯示child: Column( // 垂直排列子組件mainAxisAlignment: MainAxisAlignment.center, // 垂直方向居中對齊children: <Widget>[const Text('當前計數:',style: TextStyle(fontSize: 20),),Text('$_counter', // 顯示計數器的值style: Theme.of(context).textTheme.headline3, // 使用主題中的大字體),const SizedBox(height: 20), // 添加間距Row( // 水平排列子組件mainAxisAlignment: MainAxisAlignment.center, // 水平方向居中對齊children: [ElevatedButton(onPressed: _decrementCounter, // 點擊時調用減少計數的方法child: const Icon(Icons.remove), // 按鈕圖標:減號),const SizedBox(width: 20), // 按鈕之間的間距ElevatedButton(onPressed: _incrementCounter, // 點擊時調用增加計數的方法child: const Icon(Icons.add), // 按鈕圖標:加號),],),],),),);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89409.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89409.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89409.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8s——Pod(1)

目錄 基本概念 ?一、Pod 的原理? ?二、Pod 的特性? ?三、Pod 的意義? 狀態碼詳解 ?一、Pod 核心狀態詳解? ?二、其他關鍵狀態標識? ?三、狀態碼運維要點? 探針 ?一、探針的核心原理? ?二、三大探針的特性與作用? ?參數詳解? ?三、探針的核心意義…

MySQL 存儲過程面試基礎知識總結

文章目錄 MySQL 存儲過程面試基礎知識總結一、存儲過程基礎&#xff08;一&#xff09;概述1.優點2.缺點 &#xff08;二&#xff09;創建與調用1.創建存儲過程2.調用存儲過程3.查看存儲過程4.修改存儲過程5.存儲過程權限管理 &#xff08;三&#xff09;參數1.輸入參數2.輸出參…

NLP文本數據增強

文章目錄 文本數據增強同義詞替換示例Python代碼示例 隨機插入示例Python代碼示例 隨機刪除示例Python代碼示例 回譯&#xff08;Back Translation&#xff09;示例Python代碼示例 文本生成模型應用方式示例Python代碼示例 總結 文本數據增強 數據增強通過對原始數據進行變換、…

(LeetCode 每日一題) 594. 最長和諧子序列 (哈希表)

題目&#xff1a;594. 最長和諧子序列 思路&#xff1a;哈希表&#xff0c;時間復雜度0(n)。 用哈希表mp來記錄每個元素值出現的次數&#xff0c;然后枚舉所有值x&#xff0c;看其x1是否存在&#xff0c;存在的話就可以維護最長的子序列長度mx。 C版本&#xff1a; class Sol…

FreePDF:讓看英文文獻像喝水一樣簡單

前言 第一次看英文文獻&#xff0c;遇到不少看不懂的英文單詞&#xff0c;一個個查非常費勁。 后來&#xff0c;學會了使用劃詞翻譯&#xff0c;整段整段翻譯查看&#xff0c;極大提升看文獻效率。 最近&#xff0c;想到了一種更快的看文獻的方式&#xff0c;那就是把英文PD…

Scikit-learn:機器學習的「萬能工具箱」

——三行代碼構建AI模型的全棧指南** ### **一、誕生背景&#xff1a;讓機器學習從實驗室走向大眾** **2010年前的AI困境**&#xff1a; - 學術界模型難以工程化 - 算法實現碎片化&#xff08;MATLAB/C主導&#xff09; - 企業應用門檻極高 > **破局者**&#xff1a;Da…

GPT-1論文閱讀:Improving Language Understanding by Generative Pre-Training

這篇論文提出了 GPT (Generative Pre-Training) 模型&#xff0c;這是 GPT系列&#xff08;包括 GPT-2, GPT-3, ChatGPT, GPT-4 等&#xff09;的奠基之作。它標志著自然語言處理領域向大規模無監督預訓練任務特定微調范式的重大轉變&#xff0c;并取得了顯著的成功。 文章鏈接…

Hadoop大數據-Mysql的數據同步工具Maxwell安裝與使用( 詳解)

目錄 一、前置基礎知識 1、主從復制&#xff08;Replication&#xff09; 2、數據恢復 3、數據庫熱備 4、讀寫分離 5、存儲位置及命名 二、Maxwell簡介 1、簡介 2、Maxwell同步數據特點 2.1.歷史記錄同步 2.2.斷點續傳 三、前期準備 1、查看網卡&#xff1a; 2、…

分布式系統的一致性模型:核心算法與工程實踐

目錄 一、分布式一致性的核心挑戰二、主流一致性算法原理剖析1. Paxos&#xff1a;理論基礎奠基者2. Raft&#xff1a;工業級首選方案3. ZAB&#xff1a;ZooKeeper的引擎 三、算法實現與代碼實戰Paxos基礎實現&#xff08;Python偽代碼&#xff09;Raft日志復制核心邏輯 四、關…

Apache HTTP Server部署全攻略

httpd 簡介 httpd&#xff08;Apache HTTP Server&#xff09;是一款歷史悠久的開源 Web 服務器軟件&#xff0c;由 Apache 軟件基金會開發和維護。自 1995 年首次發布以來&#xff0c;Apache 一直是 Web 服務器領域的領導者&#xff0c;以其穩定性、安全性和靈活性著稱。根據…

信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡(下)

書接上文: 信號處理學習——文獻精讀與code復現之TFN——嵌入時頻變換的可解釋神經網絡&#xff08;上&#xff09;-CSDN博客 接下來是重要的代碼復現&#xff01;&#xff01;&#xff01;GitHub - ChenQian0618/TFN: this is the open code of paper entitled "TFN: A…

線上故障排查:簽單合同提交報錯分析-對接e簽寶

在企業管理系統中&#xff0c;合同生成與簽署環節至關重要&#xff0c;尤其是在使用第三方平臺進行電子簽署時。本文將通過實際的報錯信息&#xff0c;分析如何進行線上故障排查&#xff0c;解決合同生成過程中出現的問題。 #### 1. 錯誤描述 在嘗試生成合同并提交至電子簽署…

知攻善防靶機 Linux easy溯源

知攻善防 【護網訓練-Linux】應急響應靶場-Easy溯源 小張是個剛入門的程序猿&#xff0c;在公司開發產品的時候突然被叫去應急&#xff0c;小張心想"早知道簡歷上不寫會應急了"&#xff0c;于是call了運維小王的電話&#xff0c;小王說"你面試的時候不是說會應急…

原神八分屏角色展示頁面(純前端html,學習交流)

原神八分屏角色展示頁面 - 一個精美的前端交互項目 項目簡介 這是一個基于原神游戲角色制作的八分屏展示頁面&#xff0c;采用純前端技術實現&#xff0c;包含了豐富的動畫效果、音頻交互和視覺設計。項目展示了一些熱門原神角色&#xff0c;每個角色都有獨立的介紹頁面和專屬…

華為認證二選一:物聯網 VS 人工智能,你的賽道在哪里?

一篇不講情懷只講干貨的科普指南 一、華為物聯網 & 人工智能到底在搞什么&#xff1f; 華為物聯網&#xff08;IoT&#xff09; 的核心是 “萬物互聯”。 通過傳感器、通信技術&#xff08;如NB-IoT/5G&#xff09;、云計算平臺&#xff08;如OceanConnect&#xff09;&…

CloudLens for PolarDB:解鎖數據庫性能優化與智能運維的終極指南

隨著企業數據規模的爆炸式增長,數據庫性能管理已成為技術團隊的關鍵挑戰。本文深入探討如何利用CloudLens for PolarDB實現高級監控、智能診斷和自動化運維,幫助您構建一個自我修復、高效運行的數據庫環境。 引言:數據庫監控的演進 在云原生時代,傳統的數據庫監控方式已不…

MySQL中TINYINT/INT/BIGINT的典型應用場景及實例

以下是MySQL中TINYINT/INT/BIGINT的典型應用場景及實例說明&#xff1a; 一、TINYINT&#xff08;1字節&#xff09; 1.狀態標識 -- 用戶激活狀態&#xff08;0未激活/1已激活&#xff09; ALTER TABLE users ADD is_active TINYINT(1) DEFAULT 0; 適用于布爾值存儲和狀態碼…

YOLOv13:最新的YOLO目標檢測算法

[2506.17733] YOLOv13: Real-Time Object Detection with Hypergraph-Enhanced Adaptive Visual Perception Github: https://github.com/iMoonLab/yolov13 YOLOv13&#xff1a;利用超圖增強型自適應視覺感知進行實時物體檢測 主要的創新點提出了HyperACE機制、FullPAD范式、輕…

【深入淺出:計算流體力學(CFD)基礎與核心原理--從NS方程到工業仿真實踐】

關鍵詞&#xff1a;#CFD、#Navier-Stokes方程、#有限體積法、#湍流模型、#網格收斂性、#工業仿真驗證 一、CFD是什么&#xff1f;為何重要&#xff1f; 計算流體力學&#xff08;Computational Fluid Dynamics, CFD&#xff09; 是通過數值方法求解流體流動控制方程&#xff0…

qt常用控件--04

文章目錄 qt常用控件labelLCD NumberProgressBar結語 很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 今天我們進一步c11中常見的新增表達 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&am…