示范
说明
想象一棵Widget
树,其中direction
中有一个水平(引用Dismissible
参数)Row
或Dismissible
中有一个垂直Column
。
在这两种情况下, Dismissible
都被其他两个Widget
包围。
这两种情况:
Row(
children: <Widget>[
WillAppearBelowDismissibleThatIsBeingSwipedToTheLeft(),
Dismissible(
direction: DismissDirection.horizontal, child...),
WillAppearAboveDismissibleThatIsBeingSwipedToTheRight(),
],)
// other case
Column(
children: <Widget>[
WillAppearBelowDismissibleThatIsBeingSwipedUpwards(),
Dismissible(
direction: DismissDirection.vertical, child...),
WillAppearAboveDismissibleThatIsBeingSwipedDownwards(),
],)
如您可能理解的那样,在
Dismissible
朝某个方向滑动的过程中,掩盖了Widgets
的,但掩盖了另一个。如何在
Dismissible
或Widget
和中将所有 Row
的下的Column
的子对象呈现为,反之亦然?在标题中,我谈论“稍后”和“更早”。我的意思是它们在
List
中出现的顺序,因为它们出现在Dismissible
中的时间越晚,它们将被呈现的越高。我认为可以轻松地从我的演示中观察到这一点,因为ojit_code掩盖了一个圆圈,但另一个圆圈掩盖了。我想为两个红色圆圈实现相同的行为。
尝试代码:
import 'package:flutter/material.dart';
void main() => runApp(
MaterialApp(
home: Scaffold(
body: SafeArea(
child: Row(
children: <Widget>[
Expanded(
child: Container(
decoration: BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle,
),
),
),
Dismissible(
key: ObjectKey(0),
direction: DismissDirection.horizontal,
child: Container(
height: 150.0,
width: 150.0,
decoration: BoxDecoration(
color: Colors.amber,
shape: BoxShape.circle,
),
),
),
Expanded(
child: Container(
decoration: BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle,
),
),
),
],
),
),
),
),
);
最佳答案
经过一番修补后,我得到了令人满意的结果。我使用了Stack
,但是仅从我的Dismissible
中删除了Row
。
对于我的问题中的示例代码,它看起来像这样:
import 'package:flutter/material.dart';
void main() => runApp(
MaterialApp(
home: Scaffold(
body: SafeArea(
child: Stack(
children: <Widget>[
Row(
children: <Widget>[
Expanded(
child: Center(
child: Container(
decoration: BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle,
),
),
),
),
Expanded(
child: Container(),
),
Expanded(
child: Center(
child: Container(
decoration: BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle,
),
),
),
),
],
),
Center(
child: Dismissible(
key: ObjectKey(0),
direction: DismissDirection.horizontal,
child: Container(
height: 150.0,
width: 150.0,
decoration: BoxDecoration(
color: Colors.amber,
shape: BoxShape.circle,
),
),
),
),
],
),
),
),
),
);
本质上,我将所有内容都用
Stack
包围,用另一个Dismissible
替换Row
中的Expanded
,然后将Dismissible
放在Stack
内的Center
中。