【Flutter】Flutter 手勢交互 ( 跟隨手指運(yùn)動的小球 )

      網(wǎng)友投稿 982 2025-03-31

      文章目錄

      一、Flutter 手勢 - 跟隨手指運(yùn)動的小球

      三、完整代碼示例

      三、相關(guān)資源

      一、Flutter 手勢 - 跟隨手指運(yùn)動的小球

      設(shè)置小球坐標(biāo)變量 : 其中 currentX 是距離左側(cè)邊界的距離 , currentY 是距離右側(cè)邊界的距離 ;

      /// 當(dāng)前小球的 x 坐標(biāo) double currentX = 0; /// 當(dāng)前小球的 y 坐標(biāo) double currentY = 0;

      1

      2

      3

      4

      5

      小球的位置 : 小球是在 Stack 幀布局中的 Positioned 組件 , 其 left 和 top 字段值設(shè)置其坐標(biāo) , 分別對應(yīng) currentX 和 currentY 值 ;

      // 小球 Positioned( /// 當(dāng)前位置 left: currentX, top: currentY, )

      1

      2

      3

      4

      5

      6

      監(jiān)聽事件 : 監(jiān)聽 GestureDetector 組件的 onPanUpdate 事件 , 其回調(diào)方法是 void Function(DragUpdateDetails details) 類型的 方法 , 可以從 DragUpdateDetails 類型參數(shù)中獲取當(dāng)前 x , y 的移動距離 , 該距離需要與之前的距離累加 , 才能得到準(zhǔn)確的坐標(biāo)值 ;

      在回調(diào)方法中調(diào)用 setState 方法 , 修改成員變量 currentX 和 currentY , 從而修改 Positioned 組件的位置 , 以達(dá)到小球移動的目的 ;

      /// 手勢檢測組件 child: GestureDetector( /// 移動操作 onPanUpdate: (e){ setState(() { // e 中只能獲取到 delta 值 , 需要逐步累加 currentX += e.delta.dx; currentY += e.delta.dy; }); }, )

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      代碼示例 :

      // 小球 Positioned( /// 當(dāng)前位置 left: currentX, top: currentY, /// 手勢檢測組件 child: GestureDetector( /// 移動操作 onPanUpdate: (e){ setState(() { // e 中只能獲取到 delta 值 , 需要逐步累加 currentX += e.delta.dx; currentY += e.delta.dy; }); }, // 黑色小球 child: Container( width: 40, height: 40, decoration: BoxDecoration( color: Colors.black, borderRadius: BorderRadius.circular(20), ), ), ),),

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      三、完整代碼示例

      完整代碼示例 :

      import 'package:flutter/material.dart'; class GesturePage extends StatefulWidget { @override _GesturePageState createState() => _GesturePageState(); } class _GesturePageState extends State { /// 當(dāng)前小球的 x 坐標(biāo) double currentX = 0; /// 當(dāng)前小球的 y 坐標(biāo) double currentY = 0; @override Widget build(BuildContext context) { return MaterialApp( // 設(shè)置主題 theme: ThemeData( primarySwatch: Colors.amber, ), // 設(shè)置主體組件 home: Scaffold( // 設(shè)置標(biāo)題欄 appBar: AppBar( title: Text("手勢檢測"), // 返回按鈕設(shè)置 leading: GestureDetector( // 點擊事件回調(diào)函數(shù) onTap: (){ // 退出當(dāng)前界面 Navigator.pop(context); }, // 回退按鈕圖標(biāo) child: Icon(Icons.arrow_back), ), ), // 水平/垂直方向平鋪組件 body: FractionallySizedBox( // 水平方向平鋪 widthFactor: 1, // 幀布局 child: Stack( children: [ // 垂直方向線性布局 Column( children: [ // 手勢檢測組件 GestureDetector( // 點擊事件 onTap: (){ print("雙擊"); }, // 雙擊事件 onDoubleTap: (){ print("雙擊"); }, // 長按事件 , ()=>方法名(參數(shù)列表) 即可回調(diào)一個現(xiàn)有方法 onLongPress: () => _longPress(), // 點擊取消 onTapCancel: (){ print("點擊取消"); }, // 點擊按下 onTapDown: (e){ print("點擊按下"); }, // 點擊抬起 onTapUp: (e){ print("點擊抬起"); }, // 手勢檢測的作用組件 , 監(jiān)聽該組件上的各種手勢 child: Container( // 子組件居中 alignment: Alignment.center, // 內(nèi)邊距 padding: EdgeInsets.all(100), // 背景裝飾 decoration: BoxDecoration( color: Colors.green, ), child: Text( "手勢檢測", style: TextStyle( fontSize: 50, color: Colors.red, ), ), ), ) ], ), // 小球 Positioned( /// 當(dāng)前位置 left: currentX, top: currentY, /// 手勢檢測組件 child: GestureDetector( /// 移動操作 onPanUpdate: (e){ setState(() { // e 中只能獲取到 delta 值 , 需要逐步累加 currentX += e.delta.dx; currentY += e.delta.dy; }); }, // 黑色小球 child: Container( width: 40, height: 40, decoration: BoxDecoration( color: Colors.black, borderRadius: BorderRadius.circular(20), ), ), ),), ], ), ), ), ); } /// 長按事件 void _longPress(){ print("長按"); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      【Flutter】Flutter 手勢交互 ( 跟隨手指運(yùn)動的小球 )

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      126

      127

      128

      129

      130

      131

      132

      133

      134

      135

      136

      137

      138

      139

      140

      141

      142

      143

      144

      145

      146

      147

      148

      149

      150

      151

      152

      153

      154

      運(yùn)行效果 :

      三、相關(guān)資源

      參考資料 :

      Flutter 官網(wǎng) : https://flutter.dev/

      Flutter 開發(fā)文檔 : https://flutter.cn/docs ( 強(qiáng)烈推薦 )

      官方 GitHub 地址 : https://github.com/flutter

      Flutter 中文社區(qū) : https://flutter.cn/

      Flutter 實用教程 : https://flutter.cn/docs/cookbook

      Flutter CodeLab : https://codelabs.flutter-io.cn/

      Dart 中文文檔 : https://dart.cn/

      Dart 開發(fā)者官網(wǎng) : https://api.dart.dev/

      Flutter 中文網(wǎng) ( 非官方 , 翻譯的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/

      Flutter 相關(guān)問題 : https://flutterchina.club/faq/ ( 入門階段推薦看一遍 )

      博客源碼下載 :

      GitHub 地址 : https://github.com/han1202012/flutter_cmd ( 隨博客進(jìn)度一直更新 , 有可能沒有本博客的源碼 )

      博客源碼快照 : https://download.csdn.net/download/han1202012/15484718 ( 本篇博客的源碼快照 , 可以找到本博客的源碼 )

      Flutter

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:9個Word技巧,提高工作效率
      下一篇:如何在Excel中選擇所有未鎖定的單元格?
      相關(guān)文章
      亚洲精品国产福利一二区| 亚洲成aⅴ人片久青草影院| 国产精品亚洲mnbav网站| 亚洲福利秒拍一区二区| 久久久久亚洲精品美女| 国产成人无码综合亚洲日韩| 中文字幕乱码亚洲精品一区| 亚洲一区二区三区四区视频| 亚洲人成人77777网站| 中文字幕不卡亚洲| 亚洲综合网站色欲色欲| 美腿丝袜亚洲综合| 亚洲精品美女久久777777| 日韩亚洲国产综合久久久| 亚洲一级大黄大色毛片| 亚洲啪啪免费视频| 亚洲人妖女同在线播放| 亚洲精品伊人久久久久| 久久国产亚洲精品| 亚洲性色高清完整版在线观看| 亚洲综合一区二区精品导航| 亚洲高清中文字幕综合网| 91嫩草亚洲精品| 亚洲 日韩经典 中文字幕| 亚洲中文字幕无码中文| 亚洲国产精品精华液| 亚洲av无码不卡久久| 亚洲人成网站18禁止| 亚洲AV无码国产一区二区三区| 精品久久久久久亚洲中文字幕 | 亚洲国产成人久久综合野外| 国产精品手机在线亚洲| 国产成人高清亚洲| 人人狠狠综合久久亚洲婷婷| 亚洲影院在线观看| 亚洲人成网站看在线播放| 亚洲AV无码专区国产乱码不卡| 国产天堂亚洲精品| 亚洲日产韩国一二三四区| 亚洲天堂男人天堂| 四虎必出精品亚洲高清|