我的第一个小部件有一个FlutterMap,当我导航到另一个屏幕并返回时,由于某种原因映射会重新加载,所以我想隐藏它(维护状态),我尝试使用Visibility,但是它不起作用,在一些推荐之后,我被告知使用OffStage小部件,但是我不知道如何实现它。这是逻辑,第一个屏幕有一个布尔检查isVisible,如果是真的话,那么地图将显示在屏幕上,当我从主屏幕导航时,布尔值被设置为false,因此可见性是隐藏的。同样,当我从第二个屏幕返回时,可见性被重新设置为true,从而显示了地图。如果我要用Offstage代替Visibility做同样的事情,我会怎么做呢?
class _MainScreenState extends State<MainScreen> {
bool isVisible= true;
Future testFunction(bool checkValue) async {
setState(() {
isVisible= checkValue;
});
@override
Widget build(BuildContext context) {
.....
Scaffold(
body: Container(
//change the margin
margin: EdgeInsets.fromLTRB(0, 0, 0, 300),
child:
Visibility(
visible: isVisible,
maintainAnimation: true,
maintainState: true,
child: (FlutterMap()
))
.........
GestureDetector(
onTap: () {
setState(() {
isVisible= !isVisible;
});
Navigator.push(
//send to search screen
context,
MaterialPageRoute(
builder: (context) => (SearchScreen(
testFunction: testFunction))));第二页
class SearchScreen extends StatefulWidget {
final Function testFunction;
const SearchScreen({this.testFunction});
GestureDetector(
onTap: () {
Navigator.pop(
//send back data
context,
widget.testFunction(true));
},
child: Icon(Icons.arrow_back)),发布于 2021-07-05 20:57:30
,如果我要做同样的事情,在舞台外使用可见性代替可见性,我会怎么做?
Offstage的工作方式类似于Visibility,因为它们都有一个布尔标志,您可以使用它来切换每个小部件的操作。
因此,要使用Offstage代替Visibility,可以使用:
Scaffold(
body: Container(
margin: EdgeInsets.fromLTRB(0, 0, 0, 300),
child: Offstage(
offstage: isVisible,
child: FlutterMap()
)https://stackoverflow.com/questions/68261904
复制相似问题