最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter Widget移動UI框架使用Material和密匙Key實戰(zhàn)

 更新時間:2022年12月23日 10:18:35   作者:黎燃  
這篇文章主要為大家介紹了Flutter Widget移動UI框架使用Material和密匙Key實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Flutter

Flutter是谷歌的移動UI框架,可以在IOS和Android上快速構(gòu)建高質(zhì)量的本地用戶界面。Flutter可以使用現(xiàn)有代碼。

在世界上,F(xiàn)lutter正被越來越多的開發(fā)人員和組織使用,F(xiàn)lutter是完全免費和開源的。這也是構(gòu)建未來Google Fuchsia應(yīng)用程序的主要方式。

import 'package:flutter/material.dart';
void main() {
  runApp(
    new Center(
      child: new Text(
        'Hello, world!',
        textDirection: TextDirection.ltr,
      ),
    ),
  );
}

runApp函數(shù)接受給定的小部件,并使其成為小部件樹的根。在本例中,小部件樹由兩個小部件組成:Center(及其子小部件)和Text。框架強制根小部件覆蓋整個屏幕,這意味著文本“Hello,world”將位于屏幕中心。需要在text實例中指定文本顯示的方向。使用MaterialApp時,將自動設(shè)置文本方向,稍后將進行演示。 編寫應(yīng)用程序時,通常會創(chuàng)建新的小部件。這些小部件是無狀態(tài)無狀態(tài)小部件或有狀態(tài)有狀態(tài)小部件。具體選擇取決于小部件是否需要管理某些狀態(tài)。小部件的主要工作是實現(xiàn)一個構(gòu)建函數(shù)來構(gòu)建自己。小部件通常由一些較低級別的小部件組成。Flutter框架將依次構(gòu)建這些小部件,直到構(gòu)建最低級別的子小部件。這些最低級別的小部件通常是RenderObject,它將計算和描述小部件的幾何結(jié)構(gòu)。

Material

Flutter提供了許多小部件來幫助構(gòu)建遵循Material Design的應(yīng)用程序。Material應(yīng)用程序從MaterialApp小部件開始,它在應(yīng)用程序的根位置創(chuàng)建一些有用的小部件,包括一個Navigator,它管理由字符串標識的小部件堆棧(即頁面路由堆棧)。導(dǎo)航器允許應(yīng)用程序在頁面之間平滑過渡。是否使用MaterialApp是完全可選的,但使用它是一個很好的做法。 Scaffold是Material中主要的布局組件.

import 'package:flutter/material.dart';
void main() {
  runApp(new MaterialApp(
    title: 'Flutter Tutorial',
    home: new TutorialHome(),
  ));
}
class TutorialHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        leading: new IconButton(
          icon: new Icon(Icons.menu),
          tooltip: 'Navigation menu',
          onPressed: null,
        ),
        title: new Text('Example title'),
        actions: <Widget>[
          new IconButton(
            icon: new Icon(Icons.search),
            tooltip: 'Search',
            onPressed: null,
          ),
        ],
      ),
      body: new Center(
        child: new Text('Hello, world!'),
      ),
      floatingActionButton: new FloatingActionButton(
        tooltip: 'Add', // used by assistive technologies
        child: new Icon(Icons.add),
        onPressed: null,
      ),
    );
  }
}

更完整的示例

讓我們考慮一個更完整的示例,它將上面介紹的概念結(jié)合在一起。讓我們假設(shè)一個顯示各種待售產(chǎn)品并維護購物車的購物應(yīng)用程序。讓我們先定義ShoppingListItem:

class Product {
  const Product({this.name});
  final String name;
}
typedef void CartChangedCallback(Product product, bool inCart);
class ShoppingListItem extends StatelessWidget {
  ShoppingListItem({Product product, this.inCart, this.onCartChanged})
      : product = product,
        super(key: new ObjectKey(product));
  final Product product;
  final bool inCart;
  final CartChangedCallback onCartChanged;
  Color _getColor(BuildContext context) {
    return inCart ? Colors.black54 : Theme.of(context).primaryColor;
  }
  TextStyle _getTextStyle(BuildContext context) {
    if (!inCart) return null;
    return new TextStyle(
      color: Colors.black54,
      decoration: TextDecoration.lineThrough,
    );
  }
  @override
  Widget build(BuildContext context) {
    return new ListTile(
      onTap: () {
        onCartChanged(product, !inCart);
      },
      leading: new CircleAvatar(
        backgroundColor: _getColor(context),
        child: new Text(product.name[0]),
      ),
      title: new Text(product.name, style: _getTextStyle(context)),
    );
  }
}

ShoppingListItem小部件是無狀態(tài)的。它將在構(gòu)造函數(shù)中接收的值存儲在最終成員變量中,然后在構(gòu)建函數(shù)中使用它們。例如,inCart布爾值表示在兩種視覺呈現(xiàn)效果之間切換:一種使用當前主題的主色,另一種使用灰色。 當用戶單擊列表項時,小部件不會直接修改其inCart值。相反,小部件將調(diào)用其父小部件賦予它的onCartChanged回調(diào)函數(shù)。此模式允許在小部件層次結(jié)構(gòu)中存儲更高的狀態(tài),從而使狀態(tài)持續(xù)更長時間。在極端情況下,存儲并傳遞給runApp應(yīng)用程序的小部件的狀態(tài)將持續(xù)整個生命周期。 當父項收到onCartChanged回調(diào)時,父項將更新其內(nèi)部狀態(tài),這將觸發(fā)父項使用新的inCart值重新生成ShoppingListItem的新實例。盡管父ShoppingListItem在重建時創(chuàng)建了一個新實例,但操作成本很低,因為Flutter框架會將新構(gòu)建的小部件與先前構(gòu)建的小組件進行比較,并且只將差異應(yīng)用于底層RenderObject。

Key

可以使用該鍵控制在重新構(gòu)建小部件時框架將匹配哪些其他小部件。默認情況下,框架根據(jù)其runtimeType和顯示順序進行匹配。當使用鍵時,框架要求兩個小部件具有相同的鍵和runtimeType。 鍵對于構(gòu)建相同類型的小部件的多個實例非常有用。例如,ShoppingList構(gòu)建了足夠的ShoppingListItem實例來填充其可見區(qū)域: 如果沒有密鑰,則當前生成中的第一個項將始終與上一個生成中的首個項同步。即使在語義上,如果列表中的第一個項目滾動到屏幕外,它在窗口中也不再可見。 通過將列表中的每個項目指定為“語義”鍵,無限列表可以更有效,因為框架將使項目與匹配的語義鍵同步,從而具有相似(或相同)的視覺外觀。此外,語義同步條目意味著在有狀態(tài)的子窗口小部件中,保留狀態(tài)將附加到相同的語義條目,而不是附加到相同編號位置的條目。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Widget titleSection = new Container(
      padding: const EdgeInsets.all(32.0),
      child: new Row(
        children: [
          new Expanded(
            child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                new Container(
                  padding: const EdgeInsets.only(bottom: 8.0),
                  child: new Text(
                    'Oeschinen Lake Campground',
                    style: new TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
                new Text(
                  'Kandersteg, Switzerland',
                  style: new TextStyle(
                    color: Colors.grey[500],
                  ),
                ),
              ],
            ),
          ),
          new Icon(
            Icons.star,
            color: Colors.red[500],
          ),
          new Text('41'),
        ],
      ),
    );
  //...
}

將第一行文本放入容器,然后在底部添加8個像素。列中的第二個子項(也是文本)顯示為灰色。 標題行中的最后兩項是紅星圖標和文本“41”。將整行放在容器中,沿每條邊填充32個像素

以上就是Flutter Widget移動UI框架使用Material和密匙Key實戰(zhàn)的詳細內(nèi)容,更多關(guān)于Flutter Widget移動UI Material的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android制作微信app頂部menu菜單(ActionBar)

    Android制作微信app頂部menu菜單(ActionBar)

    這篇文章主要為大家詳細介紹了Android利用ActionBar制作微信app頂部menu菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 淺析Android手機衛(wèi)士讀取聯(lián)系人

    淺析Android手機衛(wèi)士讀取聯(lián)系人

    這篇文章主要介紹了淺析Android手機衛(wèi)士讀取聯(lián)系人的相關(guān)內(nèi)容,通過getContentResolver()方法獲取獲取ContentResolver內(nèi)容解析器對象,對android手機衛(wèi)士讀取聯(lián)系人相關(guān)知識感興趣的朋友參考下吧
    2016-04-04
  • Android小程序?qū)崿F(xiàn)訪問聯(lián)系人

    Android小程序?qū)崿F(xiàn)訪問聯(lián)系人

    這篇文章主要為大家詳細介紹了Android小程序?qū)崿F(xiàn)訪問聯(lián)系人,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一
    2020-05-05
  • 使用adb命令向Android模擬器中導(dǎo)入通訊錄聯(lián)系人的方法

    使用adb命令向Android模擬器中導(dǎo)入通訊錄聯(lián)系人的方法

    這篇文章主要介紹了使用adb命令向Android模擬器中導(dǎo)入通訊錄聯(lián)系人的方法,實例分析了導(dǎo)入通訊錄存儲文件的技巧,需要的朋友可以參考下
    2015-01-01
  • Android 控件GridView使用案例講解

    Android 控件GridView使用案例講解

    這篇文章主要介紹了Android 控件GridView使用案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Android自定義View實現(xiàn)時鐘功能

    Android自定義View實現(xiàn)時鐘功能

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)時鐘功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android UI新組件學(xué)習(xí)和使用

    Android UI新組件學(xué)習(xí)和使用

    在本篇文章中我們給大家總結(jié)了關(guān)于學(xué)習(xí)Android UI新組件的知識點總結(jié)以及注意點詳解,有需要的朋友跟著學(xué)習(xí)下。
    2018-03-03
  • Android中CountDownTimer類詳解

    Android中CountDownTimer類詳解

    本文詳細講解了Android中CountDownTimer類,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 使用Broadcast實現(xiàn)Android組件間的通信

    使用Broadcast實現(xiàn)Android組件間的通信

    這篇文章主要為大家詳細介紹了使用Broadcast實現(xiàn)Android組件間的通信,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android開發(fā)雙向滑動選擇器范圍SeekBar實現(xiàn)

    Android開發(fā)雙向滑動選擇器范圍SeekBar實現(xiàn)

    這篇文章主要為大家介紹了Android開發(fā)雙向滑動范圍選擇器SeekBar實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論

翼城县| 古交市| 建宁县| 白银市| 新化县| 桦川县| 湘潭县| 镇宁| 合川市| 沙田区| 澎湖县| 宜兰市| 嘉峪关市| 黔江区| 合作市| 姚安县| 阜阳市| 保德县| 东兰县| 始兴县| 磐安县| 登封市| 南岸区| 和政县| 邳州市| 桂林市| 铁岭市| 方正县| 福建省| 托克逊县| 阳城县| 黔东| 台安县| 本溪| 兴和县| 白朗县| 平泉县| 稷山县| 西青区| 丰镇市| 长沙县|