【发布时间】:2021-11-01 10:37:11
【问题描述】:
我正在尝试创建一个应用程序。在子类(搜索栏)中提交查询后,我想更改父类中的属性(以便它可以显示 Visibility 项 SlidingUpPanel)。
我尝试使用回调函数并关注How can I pass the callback to another StatefulWidget?,但当我在搜索栏中提交查询时它似乎没有做任何事情。之前我也尝试过使用 Navigator.push 直接调用 SlidingUpPanel,结果黑屏只有 SlidingUpPanel。
父类(地图):
class MapPage extends StatefulWidget {
const MapPage({Key? key}) : super(key: key);
@override
_MapPageState createState() => _MapPageState();
}
class _MapPageState extends State<MapPage> {
bool IsVisible = false;
void callbackFunction() {
setState(() {
IsVisible = true;
});
}
...
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
body: Stack(
children: [
...
Visibility(
visible: IsVisible,
child: SlidingUpPanel()),
SearchPage(callbackFunction),
]),
);
}
}
子类(搜索栏):
class SearchPage extends StatefulWidget {
final Function callback;
SearchPage(this.callback);
@override
_SearchPageState createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage> {
...
@override
Widget build(BuildContext context) {
return FloatingSearchBar(
...
onSubmitted: (query) {
// callback here, but doesn't seem to do anything
widget.callback;
controller.close();
},
...
);
}
}
【问题讨论】: