91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flutter項目手勢運用及單獨指針消歧問題怎么解決

發布時間:2022-12-27 17:21:54 來源:億速云 閱讀:100 作者:iii 欄目:開發技術

這篇“Flutter項目手勢運用及單獨指針消歧問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Flutter項目手勢運用及單獨指針消歧問題怎么解決”文章吧。

對于手勢的運用

指針表示用戶與設備屏幕交互的原始數據。有四種類型的指針事件 PointerDownEvent指針觸摸屏幕上的特定位置 PointerMoveEvent指針從屏幕上的一個位置移動到另一個位置 PointerUpEvent指針停止觸摸屏幕 PointerCancelEvent指針的輸入事件不再針對此應用程序(事件取消)

 Widget build(BuildContext context) {
    return new GestureDetector(
      onTap: _handleTap,
      child: new Container(
        child: new Center(
          child: new Text(
            _active ? 'Active' : 'Inactive',
            style: new TextStyle(fontSize: 32.0, color: Colors.white),
          ),
        ),
        width: 200.0,
        height: 200.0,
        decoration: new BoxDecoration(
          color: _active ? Colors.lightGreen[700] : Colors.grey[600],
        ),
      ),
    );
  }
}

當按下指針時,框架將在應用程序上執行_點擊測試_,以確定指針與屏幕相交的位置存在哪些小部件。然后,指針按下事件(以及該指針的后續事件)被分發到_命中測試_找到的最里面的小部件。從那里,這些事件將在小部件樹中彈出。這些事件將從最里面的小部件分發到小部件根路徑上的所有小部件。沒有取消或停止冒泡過程的機制。 要直接從窗口小部件層偵聽指針事件,請使用偵聽器窗口小部件。然而,一般來說,考慮使用手勢(如下所述)。要直接從小部件層偵聽指針事件,可以使用Listenerwidgets。

單獨指針

手勢表示可以從多個單獨指針事件(甚至多個單獨的指針)中識別的語義動作(如敲擊、拖動和縮放)。一個完整的手勢可以調度多個事件,對應于手勢的生命周期(例如,拖動開始、拖動更新和拖動結束):

class ParentWidget extends StatefulWidget {
  @override
  _ParentWidgetState createState() => new _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
  bool _active = false;
  void _handleTapboxChanged(bool newValue) {
    setState(() {
      _active = newValue;
    });
  }
  @override
  Widget build(BuildContext context) {
    return new Container(
      child: new TapboxC(
        active: _active,
        onChanged: _handleTapboxChanged,
      ),
    );
  }
}

TaponTapDown指針已在特定位置與屏幕接觸onTapUp指針停止在特定位置接觸屏幕onTap tap事件觸發onTapCancel之前由指針觸發的onTapDown不會觸發tap事件 雙擊DoubleTap可在同一位置連續兩次快速點擊屏幕 長按onLongPress指針可在同一位置長時間與屏幕保持接觸 垂直拖動onVerticalDragStart指針已接觸屏幕,并可能開始垂直移動。onVerticalDragUpdate指針已與屏幕接觸并垂直移動OnVerticalDragEnd先前與屏幕接觸且垂直移動的指針不再與屏幕接觸,并在停止觸摸屏幕時以特定速度移動 水平拖動onHorizontalDragStart指針已觸摸屏幕,并可能開始水平移動onHorizontalDragUpdate指針接觸屏幕并已水平移動onHorizontalDragEnd指針(以前接觸屏幕并水平移動)不再接觸屏幕,并在停止觸摸屏幕時以特定速度移動 要從控件層監視手勢,請使用手勢檢測器

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new Text('Hello World', style: new TextStyle(fontSize: 32.0)),
      ),
    );
  }
}

如果使用“材質組件”,大多數小部件都會響應輕敲或手勢。例如,IconButton和FlatButton響應按下(輕擊),ListView響應滑動事件以觸發滾動。如果不使用這些小部件,但希望在單擊時具有“潑墨”效果,則可以使用InkWell。

消歧

在屏幕上的指定位置可能有多個手勢檢測器。當指針事件流通過并試圖識別特定手勢時,所有這些手勢檢測器都會監聽指針事件流。手勢檢測器小部件確定它是哪個手勢。 當屏幕上有多個給定指針的手勢識別器時,框架通過向每個識別器添加“手勢競爭場”來確定所需的手勢。“手勢比賽場”使用以下規則來確定哪個手勢獲勝 在任何時候,識別器都可以宣布失敗并離開“手勢比賽場”。如果“比賽場地”中只剩下一個標識符,則該標識符為獲勝者

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //...
    Widget buttonSection = new Container(
      child: new Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          buildButtonColumn(Icons.call, 'CALL'),
          buildButtonColumn(Icons.near_me, 'ROUTE'),
          buildButtonColumn(Icons.share, 'SHARE'),
        ],
      ),
    );
  //...
}

在任何時候,識別器都可以宣布勝利,這將導致勝利,而所有剩余的識別器都將失敗 例如,當消除水平和垂直拖動的歧義時,兩個識別器在接收到指針向下事件時進入“手勢競爭場”。識別器觀察指針移動事件。如果用戶將指針水平移動超過一定數量的邏輯像素,則水平識別器將宣布勝利,手勢將被解釋為水平拖動。類似地,如果用戶垂直移動超過一定數量的邏輯像素,則垂直識別器將宣布獲勝。 當僅水平(或垂直)拖動識別器時,“手勢競爭場”是有益的。在這種情況下,“手勢競爭領域”中只有一個識別器,水平拖動將立即被識別,這意味著第一個水平移動的像素可以被視為拖動,用戶不需要等待進一步的手勢消歧。

依賴包中的字體

如果包中定義的字體在內部使用,則在創建文本樣式時還應指定包參數,如上面的示例所示。 包還可以提供字體文件,而無需輸入pubspec Yaml。這些文件應位于包的lib/文件夾中。字體文件不會自動綁定到應用程序,應用程序可以在聲明字體時選擇性地使用這些字體。假設a_包中有一個包:

 flutter:
   fonts:
     - family: Raleway
       fonts:
         - asset: assets/fonts/Raleway-Regular.ttf
         - asset: packages/my_package/fonts/Raleway-Medium.ttf
           weight: 500

family是字體的名稱。可以在TextStyle的fontFamily屬性中使用它 資產相對于pubspec yaml文件的路徑這些文件包含字體中的字形輪廓。構建應用程序時,這些文件將包含在應用程序的資產包中。 可以設置字體的粗細、傾斜和其他樣式 weight屬性指定字體的粗細。值范圍是100到900(100的倍數)的整數。這些值對應于FontWeight,可用于TextStyle的FontWeight屬性 樣式指定字體是斜體還是普通字體。相應的值為斜體和普通值。這些值對應于fontStyle可用于TextStyle的fontStyle TextStyle屬性

import 'package:flutter/material.dart';
const String words1 = "Almost before we knew it, we had left the ground.";
const String words2 = "A shining crescent far beneath the flying vessel.";
const String words3 = "A red flair silhouetted the jagged edge of a wing.";
const String words4 = "Mist enveloped the ship three hours out from port.";
void main() {
  runApp(new MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Fonts',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new FontsPage(),
    );
  }
}

在Flutter應用程序中使用字體需要兩個步驟。首先在pubspec.yaml中聲明它們,以確保它們包含在應用程序中。

以上就是關于“Flutter項目手勢運用及單獨指針消歧問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂平县| 高密市| 平陆县| 科尔| 东港市| 银川市| 长沙市| 海晏县| 信宜市| 河西区| 石屏县| 乌审旗| 巩义市| 汉阴县| 孟连| 兴化市| 广安市| 横山县| 邢台县| 海宁市| 玉林市| 铜梁县| 珠海市| 赫章县| 渭源县| 东安县| 黄浦区| 正蓝旗| 隆林| 天等县| 隆化县| 玛曲县| 新郑市| 温泉县| 宣汉县| 稷山县| 商丘市| 志丹县| 额济纳旗| 漳平市| 灌阳县|