diff --git a/lib/note_viewer.dart b/lib/note_viewer.dart index 309cbd93..9013184b 100644 --- a/lib/note_viewer.dart +++ b/lib/note_viewer.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:journal/widgets/swipe_detector.dart'; import 'note.dart'; @@ -64,7 +65,7 @@ class NoteViewer extends StatelessWidget { @override Widget build(BuildContext context) { - return new SingleChildScrollView( + var view = new SingleChildScrollView( child: new Column( children: [ _buildHeader(context), @@ -75,6 +76,12 @@ class NoteViewer extends StatelessWidget { ), padding: const EdgeInsets.all(16.0), ); + + return new SwipeDetector( + child: view, + onLeftSwipe: showNextNoteFunc, + onRightSwipe: showPrevNoteFunc, + ); } Widget _buildHeader(BuildContext context) { diff --git a/lib/widgets/swipe_detector.dart b/lib/widgets/swipe_detector.dart new file mode 100644 index 00000000..43bfdc48 --- /dev/null +++ b/lib/widgets/swipe_detector.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; + +class SwipeDetector extends StatelessWidget { + final VoidCallback onLeftSwipe; + final VoidCallback onRightSwipe; + final Widget child; + + SwipeDetector({ + @required this.onLeftSwipe, + @required this.onRightSwipe, + @required this.child, + }); + + @override + Widget build(BuildContext context) { + double primaryDelta; + + return new GestureDetector( + child: child, + onHorizontalDragUpdate: (DragUpdateDetails details) { + primaryDelta = details.primaryDelta; + }, + onHorizontalDragEnd: (DragEndDetails _) { + if (primaryDelta > 0) { + onRightSwipe(); + } else { + onLeftSwipe(); + } + }, + ); + } +}