Here the code for displayWord call at user swipe :
import 'package:flutter/material.dart';
import 'dart:async';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
body: SafeArea(
child: MyHomePage(),
),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage>
with SingleTickerProviderStateMixin {
String txt ='';
@override
void initState() {
super.initState();
}
void displayWord() {
setState(() {
txt = 'random txt';
});
print('User swiped');
}
@override
Widget build(BuildContext context) {
return Stack(children: [
SwipeZone(displayWord: displayWord),
Container(child: Text('$txt'))]);
}
}
class SwipeZone extends StatefulWidget {
const SwipeZone({Key? key, required this.displayWord})
: super(key: key);
final void Function()displayWord;
@override
_SwipeZoneState createState() => _SwipeZoneState();
}
class _SwipeZoneState extends State<SwipeZone> {
double startPointX = 0;
void onPanStart(DragStartDetails details) {
startPointX = details.globalPosition.dx;
}
@override
bool _enabled = true ;
void onPanUpdate(DragUpdateDetails details) {
var x = details.globalPosition.dx;
var endPointX = x - startPointX;
if(endPointX>100){
widget.displayWord();
setState(() {
_enabled = false;
});
Timer(Duration(seconds: 1), ()
{setState(() {
_enabled = true;
});}); /*Make the Swipe Stop, user can swipe every 1 second*/
}
}
Widget build(BuildContext context) {
return GestureDetector(
onPanStart: onPanStart,
onPanUpdate: _enabled ? onPanUpdate: null,
child: Container(color: Colors.grey.withOpacity(0.5)),
);
}
}