微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将父状态传递给通用子小部件

如何解决将父状态传递给通用子小部件

我正在构建一个 Flutter 应用程序,并为其构建了一个自定义的 AppBar 小部件。这个应用栏有一个 SearchBar 小部件,它调用任何传递给它的回调 onChange。现在,有多个屏幕使用这个 SearchBar,每个屏幕都会对用户输入做一些不同的事情。但是我注意到在每个使用 appbar 的屏幕上,我都必须使用状态来控制 SearchBar 输入的文本。所以,我试图不必为每个屏幕创建状态,并有一个小部件来包装我的屏幕,并控制其状态中的输入,并将其状态传递给我提供给这个应用程序的孩子。这将类似于 React 的高阶组件,它包装另一个组件并可以将 props 传递给它。

这在我看来是一个很好的设计模式,但我不知道如何实现它。由于我将传递给将包装我的屏幕的这个二阶组件的子小部件不会从中获取任何信息,因此子小部件只是作为小部件传递(注意:代码还做其他事情,作为用于替换我所有屏幕中类似重复代码的通用包装器):

class CustomScaffold extends StatefulWidget {
  final ScreenInfo appBarInfo;
  final Builder child;
  final Widget bottomBarapp;
  final Widget appBar;
  final EdgeInsetsGeometry padding;

  const CustomScaffold({
    @required this.child,Key key,this.bottomBarapp,this.appBar,this.padding,this.appBarInfo,}) : super(key: key);

  @override
  _CustomScaffoldState createState() => _CustomScaffoldState();
}

class _CustomScaffoldState extends State<CustomScaffold> {
  String searchTerm = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: [
            widget.appBar ??
                GradientAppBar(
                  title: widget.appBarInfo.label,searchBar: SearchBar(
                    callback: (String input) {
                      setState(() {
                        searchTerm = input;
                      });
                    },placeholder: widget.appBarInfo.searchPlaceholder,),Padding(
              padding: widget.padding,child: widget.child,],bottomNavigationBar: widget.bottomBarapp ?? CustomBottomBarNavigator(),);
  }
}

我想我可以通过一个构建器而不是一个小部件作为孩子,但我不确定这将如何工作。此外,我仍在学习 bloc,所以我不确定使用 bloc 是否是个好主意。我猜 bloc 的目的有点不同,会使这个特定模式复杂化。

这个想法有意义吗?实现它的最佳方法是什么?

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。