Flutter指针管理插件pointer_manger的使用
Flutter指针管理插件pointer_manger的使用
描述
pointer_manger
插件用于管理触摸指针的数量、类型、如何与你的小部件交互以及在何处进行交互。
如何出错?
假设你有以下设置,其中的数字可能表示一些非负量。
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _n = 0;
[@override](/user/override)
Widget build(BuildContext context) => Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _n <= 1 ? null : () => setState(() => _n = _n - 2),
child: const Text("-2"),
),
ElevatedButton(
onPressed: _n <= 0 ? null : () => setState(() => --_n),
child: const Text("-1"),
),
Text(_n.toString()),
ElevatedButton(
onPressed: () => setState(() => ++_n),
child: const Text("+1"),
),
],
);
}
然后用户可能会执行如下的操作:
- 这将导致你得到一个不希望的负值。
- 显然,你可以通过在修改值之前进行检查来解决这种情况,但这只是一个用例示例。
解决方案
最简单的解决方案是使用此插件。
- 只需将两个按钮包装在
PointerMangerWidget.withAll
中,并将PointerGroupHandler
作为Row
的父级。
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _n = 0;
[@override](/user/override)
Widget build(BuildContext context) => PointerGroupHandler( // 包含所有子组件的组处理
groupTag: "no-negative", // 组标签
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
PointerMangerWidget.withAll( // 管理所有指针的包装器
// groupTag: "no-negative", // 你可以指定父组标签。
child: ElevatedButton(
onPressed: _n <= 1 ? null : () => setState(() => _n = _n - 2),
child: const Text("-2"),
),
),
PointerMangerWidget.withAll( // 管理所有指针的包装器
child: ElevatedButton(
onPressed: _n <= 0 ? null : () => setState(() => --_n),
child: const Text("-1"),
),
),
Text(_n.toString()),
ElevatedButton(
onPressed: () => setState(() => ++_n),
child: const Text("+1"),
),
],
),
);
}
更多关于Flutter指针管理插件pointer_manger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter指针管理插件pointer_manger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pointer_manger
是一个 Flutter 插件,用于管理和处理指针事件。它可以帮助你在复杂的 UI 场景中更好地处理多个指针事件,例如在拖拽、缩放或旋转等手势操作中。下面是如何使用 pointer_manger
插件的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 pointer_manger
插件的依赖:
dependencies:
flutter:
sdk: flutter
pointer_manger: ^0.0.1 # 请确保使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 pointer_manger
插件:
import 'package:pointer_manger/pointer_manger.dart';
3. 使用 PointerManger
PointerManger
是一个 Widget
,它可以包裹你需要处理指针事件的子部件。你可以通过 PointerManger
来监听和处理指针事件。
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PointerManger Example'),
),
body: Center(
child: PointerManger(
onPointerDown: (PointerDownEvent event) {
print('Pointer down at ${event.position}');
},
onPointerMove: (PointerMoveEvent event) {
print('Pointer moved to ${event.position}');
},
onPointerUp: (PointerUpEvent event) {
print('Pointer up at ${event.position}');
},
child: Container(
width: 200,
height: 200,
color: Colors.blue,
child: Center(
child: Text(
'Touch me',
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
),
),
),
);
}
}
4. 处理多个指针
PointerManger
可以处理多个指针事件。你可以通过 event.pointer
来区分不同的指针:
PointerManger(
onPointerDown: (PointerDownEvent event) {
print('Pointer ${event.pointer} down at ${event.position}');
},
onPointerMove: (PointerMoveEvent event) {
print('Pointer ${event.pointer} moved to ${event.position}');
},
onPointerUp: (PointerUpEvent event) {
print('Pointer ${event.pointer} up at ${event.position}');
},
child: Container(
width: 200,
height: 200,
color: Colors.blue,
child: Center(
child: Text(
'Touch me',
style: TextStyle(color: Colors.white, fontSize: 20),
),
),
),
)