Flutter之搖一搖功能的實現
阿新 • • 發佈:2021-06-23
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())); }