A はa の内部にStack
含まれています。MyWidget
Positioned
Stack(
overflow: Overflow.visible,
children: [
Positioned(
top: 0.0,
left: 0.0,
child: MyWidget(),
)],
);
オーバーフローは でありOverflow.visible
、MyWidget
より大きいためStack
、 の外側に表示されますStack
。これが私の希望どおりです。
MyWidget
ただし、エリア外のエリアをタップすることはできませんStack
。タップしても無視されます。
MyWidget
そこでジェスチャーを確実に受け入れるにはどうすればいいでしょうか?
ベストアンサー1
この動作は、スタックが子がヒットしたかどうかを確認する前に、ポインターがその境界内にあるかどうかを確認するために発生します。
クラス: RenderBox (RenderStack が拡張)
bool hitTest(BoxHitTestResult result, { @required Offset position }) {
...
if (_size.contains(position)) {
if (hitTestChildren(result, position: position) || hitTestSelf(position)) {
result.add(BoxHitTestEntry(this, position));
return true;
}
}
return false;
}
私の回避策は、
if (_size.contains(position))
チェック。残念ながら、フレームワークからコードをコピーしなければこれは不可能です。
私がやったことは次のとおりです:
- StackクラスをコピーしてStack2と名付けました
- RenderStackをコピーしてRenderStack2と名付けました
- Stack2 リファレンス RenderStack2 を作成しました
- _size.contains チェックなしで上記の hitTest メソッドを追加しました
- PositionedをコピーしてPositioned2という名前を付け、汎用パラメータとしてStack2を参照するようにしました。
- コード内でStack2とPositioned2を使用
このソリューションは決して最適ではありませんが、目的の動作を実現します。