【问题标题】:Changing an attribute in a parent widget from a child widget从子小部件更改父小部件中的属性
【发布时间】: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();
        },

        ...
     );
   }
}

【问题讨论】:

    标签: android ios flutter dart


    【解决方案1】:

    要实际调用(执行)函数,您必须使用()

    尝试像这样调用回调函数:

    onSubmitted: (query) {
      // use () to actually call the function
      widget.callback();
      controller.close();
    },
    

    【讨论】:

    • 谢谢你,成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多