1.在pubspec.yaml引入插件
sensors: ^0.4.0+1
2.编写shake.dart,代码如下:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:sensors/sensors.dart';
class Shake extends StatefulWidget {
@override
_ShakeState createState() => _ShakeState();
}
class _ShakeState extends State<Shake> {
/// 是否已经显示摇一摇弹窗。
bool isShow = false;
@override
void initState() {
accelerometerEvents.listen((AccelerometerEvent event) {
// 摇一摇阀值,不同手机能达到的最大值不同,如某品牌手机只能达到20。
int value = 20;
if (event.x >= value ||
event.x <= -value ||
event.y >= value ||
event.y <= -value ||
event.z >= value ||
event.z <= -value) {
if (isShow == false) {
isShow = true;
showDialog<bool>(
context: context,
barrierDismissible: true,
builder: (BuildContext context) {
return CupertinoAlertDialog(
title: Text('摇一摇'),
content: Text('您摇动了屏幕'),
actions: [
CupertinoDialogAction(
child: Text('确定'),
onPressed: () {
Navigator.of(context).pop(true);
},
),
],
);
},
).then((onValue) {
if (onValue != null) {
// 点击确定后返回的业务逻辑。
}
isShow = false;
});
}
}
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('摇一摇'),
),
body: Center(
child: Text('请摇动手机'),
),
);
}
}
3.从其他页面跳转过去
void shake(){
Navigator.of(context).push(MaterialPageRoute(builder: (_) => Shake()));
}