Flutter-指针变乱知识

手机软件开发 2024-9-20 10:24:40 45 0 来自 中国

在Flutter开发当中,我们大概会遇到下面的需求:
定位用户手指当前处于的位置,以及点击了多少次。
遇到这种需求,我们就须要利用指针变乱来帮我们实现。这篇博客分享指针变乱的知识,渴望对看文章的小搭档有所资助。
指针变乱

怎么获取指针变乱?这是一个很关键的标题,大概的实现思绪是:

  • Flutter应用中每个表现在屏幕中的页面都会被Listener组件包裹,我们起首要获取Listener组件;
  • 我们通过Listener组件获取用户和屏幕交互的原始数据。
指针变乱对象中存放了这个指针的位置、偏移量等用户与装备屏幕交互的原始数据信息。
Listener组件源码

  const Listener({    Key? key,    this.onPointerDown, // 手指按下回调    this.onPointerMove, // 手指移动回调    this.onPointerUp, // 手指抬起回调    this.onPointerHover, // 悬停    this.onPointerCancel, // 触摸变乱取消回调    this.onPointerSignal, //     this.behavior = HitTestBehavior.deferToChild,    Widget? child,  })Listener组件API

变乱API变乱形貌onPointerDown用户按下时回调的参数onPointerMove用户在屏幕上移动时的回调PointerEvent用户抬起手指回调的对象简单的代码示例

import 'package:flutter/material.dart';void main() {  runApp(const MyApp());}class MyApp extends StatelessWidget {  const MyApp({Key? key}) : super(key: key);  @override  Widget build(BuildContext context) {    return MaterialApp(      title: 'Flutter Demo',      theme: ThemeData(        primarySwatch: Colors.blue,      ),      home: const MyHomePage(title: 'Listener Demo'),    );  }}class MyHomePage extends StatefulWidget {  const MyHomePage({Key? key, required this.title}) : super(key: key);  final String title;  @override  State<MyHomePage> createState() => _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> {  int downCounter = 0;  int upCounter = 0;  double x = 0.0;  double y = 0.0;  // 按下变乱的处理方法  void incrementDown(PointerDownEvent event) {    updateLocation(event);    setState(() {      downCounter++;    });  }  // 抬起变乱的处理方法  void incrementUp(PointerUpEvent event) {    updateLocation(event);    setState(() {      upCounter++;    });  }  // 移动变乱的处理方法  void updateLocation(PointerEvent event) {    setState(() {      x = event.position.dx;      y = event.position.dy;    });  }  @override  Widget build(BuildContext context) {    return Scaffold(      appBar: AppBar(        title: Text(widget.title),      ),      body: Center(        child: ConstrainedBox(          constraints: BoxConstraints.tight(const Size(300, 200)),          child: Listener(            onPointerDown: incrementDown,            onPointerMove: updateLocation,            onPointerUp: incrementUp,            child: Container(              color: Colors.redAccent,              child: Column(                mainAxisAlignment: MainAxisAlignment.center,                children: <Widget>[                  const Text('按下抬起的次数:'),                  Text('按下$downCounter次,抬起$upCounter次'),                  Text(                      '现在点击的位置(${x.toStringAsFixed(2)},${y.toStringAsFixed(2)})')                ],              ),            ),          ),        ),      ),    );  }}小搭档们可以直接复制上面的代码运行。结果如下:

2.png
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 20:31, Processed in 0.161706 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表