Три разных действия на одном контейнереIOS

Программируем под IOS
Ответить
Anonymous
 Три разных действия на одном контейнере

Сообщение Anonymous »

Я хочу, чтобы эта вещь была в моем контейнере: одно действие при нажатии, одно при длительном нажатии и последнее при длительном нажатии + перетаскивание. Я хочу три разных действия в одном контейнере, и я не могу это сделать, если я исправлю какое-либо одно действие, если не удается другое, теперь я сделал долгое нажатие, показывающее всплывающее меню, и долгое нажатие + перетаскивание, перетаскивая контейнер сценария, и при нажатии открывается новый экран, но onTap вообще не работает, если я попытаюсь исправить onTap, и другие действия перестанут работать. Так что я действительно не знаю, как решить эту проблему, пожалуйста, помогите мне в этом
Widget _buildScriptsGrid() {
final scripts = filteredScripts;
_syncScriptKeys(scripts.length);

return GridView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
padding: EdgeInsets.zero,

gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
mainAxisSpacing: 16,
crossAxisSpacing: 16,
childAspectRatio: 0.70,
),

itemCount: scripts.length,
itemBuilder: (context, index) {
final item = scripts[index];
final key = _scriptKeys[index];

return LongPressDraggable(
data: item.id,
delay: const Duration(milliseconds: 350),

onDragStarted: () {
_scriptDragMoved = false;

final box = key.currentContext?.findRenderObject() as RenderBox?;
if (box == null) return;

const popupSize = Size(220, 130);
final pos = _calculatePopupPosition(box, popupSize);

_removeScriptPopup();
_scriptMenuEntry = _buildScriptPopup(position: pos, script: item);

Overlay.of(context).insert(_scriptMenuEntry!);
},

onDragUpdate: (_) {
if (!_scriptDragMoved) {
_scriptDragMoved = true;
_removeScriptPopup();
}
},

feedback: _scriptDragPreview(item),
childWhenDragging: Opacity(opacity: 0.25, child: _scriptTile(item)),

child: KeyedSubtree(
key: key,
child: InkWell(
borderRadius: BorderRadius.circular(12),
onTap: () {
_removeScriptPopup();

Navigator.push(
context,
MaterialPageRoute(
builder: (_) => TeleprompterReaderScreen(
script: item,
cameras: widget.cameras,
),
),
);
},
child: _scriptTile(item),
),
),
);
},
);
}

Метод сборки
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: ThemeColors.bgColorOnboard,
body: SafeArea(
bottom: false,
child: GestureDetector(
onTap: () {
FocusManager.instance.primaryFocus?.unfocus();
},
child: Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Align(
alignment: Alignment.topRight,
child: _buildMenuButton(),
),
),
const SizedBox(height: 8),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(
'Scripts',
style: const TextStyle(
color: Colors.white,
fontSize: 28,
fontWeight: FontWeight.bold,
),
),
),
const SizedBox(height: 8),
_buildSearchBar(),
const SizedBox(height: 32),

Expanded(
child: SingleChildScrollView(
controller: _scrollController,
physics: const BouncingScrollPhysics(),
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 8,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (searchQuery.isEmpty) ...[
_buildFoldersHeader(),
const SizedBox(height: 12),
if (foldersExpanded) _buildFoldersGrid(),
const SizedBox(height: 32),
],
_buildScriptsHeader(),
const SizedBox(height: 12),
isGrid ? _buildScriptsGrid() : _buildScriptsList(),
],
),
),
),
),
const SizedBox(height: 32),
],
),

if (showMenu) ...[
Positioned.fill(
child: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: _dismissMenu,
onPanDown: (_) => _dismissMenu(),
child: const SizedBox.expand(),
),
),

Positioned(
top: 55,
right: 16,
child: FadeTransition(
opacity: _menuOpacity,
child: ScaleTransition(
scale: _menuScale,
alignment: Alignment.topRight,
child: _buildCustomMenu(),
),
),
),
SizedBox(height: 32),
],
],
),
),
),
);
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... -container
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»