#flutter
#flutter
Вопрос:
Я хочу, чтобы пользователь сдвинул вправо, чтобы закрыть страницу сведений о статье и вернуться на страницу списка статей в Flutter. Теперь я использую GestureDetector, и я смог успешно захватить слайд-правый жест. Это мой код:
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_html/style.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:Cruise/src/component/part_snippet.dart';
import 'package:Cruise/src/common/helpers.dart';
import 'package:Cruise/src/models/Item.dart';
import 'package:Cruise/src/page/profile.dart';
import 'package:Cruise/src/common/Repo.dart';
import 'package:url_launcher/url_launcher.dart';
final partsProvider = FutureProvider.family((ref, int id) async {
return await Repo.fetchItem(id);
});
class StoryInformation extends HookWidget {
const StoryInformation({
Key key,
@required this.item,
}) : super(key: key);
final Item item;
void launchUrl(url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
@override
Widget build(BuildContext context) {
final parts = item.parts.map((i) => useProvider(partsProvider(i))).toList();
Offset _initialSwipeOffset;
Offset _finalSwipeOffset;
void _onHorizontalDragStart(DragStartDetails details) {
_initialSwipeOffset = details.globalPosition;
}
void _onHorizontalDragUpdate(DragUpdateDetails details) {
_finalSwipeOffset = details.globalPosition;
}
void _onHorizontalDragEnd(DragEndDetails details) {
if (_initialSwipeOffset != null) {
final offsetDifference = _initialSwipeOffset.dx - _finalSwipeOffset.dx;
final direction = offsetDifference > 0 ? print('left') : print('right');
if (offsetDifference > 0) {
// detect the right gesture, then back to main list page
}
}
}
return Container(
color: Theme.of(context).scaffoldBackgroundColor,
child: GestureDetector(
onHorizontalDragStart: _onHorizontalDragStart,
onHorizontalDragUpdate: _onHorizontalDragUpdate,
onHorizontalDragEnd: _onHorizontalDragEnd,
child: Padding(),
),
)
}
это работает нормально. Но есть серьезная проблема: когда пользователь перемещается слева за пределы экрана вправо, жест не срабатывает, поэтому использование должно выполнять правильный жест внутри экрана от начала до конца. Этот опыт был очень сложным.Как сделать так, чтобы он мог захватывать жест снаружи с левого экрана, например, ios silde right back action?
Что я пробовал:
-
если начальная позиция x равна 0, начинать с левой стороны? но не работает, действие жеста не срабатывает
-
добавить
onTapDown and onTapUp
, все еще не работает, не срабатывает.
Я прочитал официальный документ, но не перечислил ситуацию. что я должен сделать, чтобы заставить его работать для захвата действия слайда за пределами экрана слева направо?
Ответ №1:
если вы обнаруживаете слева направо, почему у вас есть условие для справа налево?
if (offsetDifference > 0) {}
У вас должно быть:
if (offsetDifference < 0) {}
Комментарии:
1. Это реализовано, я хочу захватить начало слайда снаружи экрана. @человек знаний