您好,登錄后才能下訂單哦!
這篇“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項目手勢運用及單獨指針消歧問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。