Передать событие касания ребенку позади в стеке - PullRequest
0 голосов
/ 24 апреля 2020

После просмотра обучающего видео о создании пользовательского PageView во Flutter я столкнулся с проблемой. Чтобы добиться пользовательского положения страницы PageView, я использовал стек элементов, которые смахивают влево / вправо в зависимости от PageView, который помещается в Stack.fill () над каждым другим элементом в стеке.

Вот пример кода:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Home(),
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Test')),
      body: Container(
        height: 200.0,
        child: Stack(
          children: <Widget>[
            Container(
              color: Colors.blueGrey,
              width: double.infinity,
              height: double.infinity,
              child: Material(
                type: MaterialType.transparency,
                child: InkWell(
                  onTap: () {
                    print('InkWell tapped');
                  },
                ),
              ),
            ),
            Positioned.fill(
              child: PageView.builder(
                itemBuilder: (context, index) {
                  return Container(
                    child: Center(
                      child: Text(
                        '$index',
                        style: TextStyle(
                          color: Colors.white,
                          fontSize: 25.0,
                        ),
                      ),
                    ),
                  );
                },
                itemCount: 4,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Проблема заключается в том, что я хочу вызвать событие Tap на InkWell за PageView, но при этом все еще могу пролистывать PageView.

Можно ли передать событие касания элементу позади PageView? Спасибо.


РЕДАКТИРОВАТЬ:

Поскольку вы не должны расширять виджеты во флаттере, я только что сделал копию класса Scrollable, который использует HitTestBehavior.translucent вместо HitTestBehavior.opaque . После этого вы создаете копию PageView с помощью этой новой прокрутки.

С такой модификацией - дети за PageView начинают получать жесты.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

РЕШЕНИЕ :

Поскольку вы не должны расширять виджеты во флаттере, я только что сделал копию класса Scrollable, который использует HitTestBehavior.translucent вместо HitTestBehavior.opaque . После этого вы создаете копию PageView с помощью этой новой прокрутки.

С такой модификацией - дети за PageView начинают получать жесты.

0 голосов
/ 24 апреля 2020

Это без использования стека,

   Scaffold(
            appBar: AppBar(title: Text('Test')),
            body: Container(
              color: Colors.red,
              height: 200.0,
              child: InkWell(
                onTap: () {
                  print('InkWell tapped');
                },
                child: PageView.builder(
                  itemCount: 4,
                  itemBuilder: (context, index) {
                    return Container(
                      child: Center(
                        child: Text(
                          '$index',
                          style: TextStyle(
                            color: Colors.white,
                            fontSize: 25.0,
                          ),
                        ),
                      ),
                    );
                  },
                ),
              ),
            ),
          ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...