easyui如何在父容器打开一个窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyui如何在父容器打开一个窗口相关的知识,希望对你有一定的参考价值。

比如说,我现在用easyui的tabs如何在tabs打开一个新的easyui window,必须是在父容器,直接打开窗口,窗口的范围只限于TAB里面,现在我打开这个easyui window 必须跳出TAB,详情见图片。

参考技术A inline:true的属性干掉

在父窗口小部件中访问子窗口小部件的变量(Flutter with Dart)

【中文标题】在父窗口小部件中访问子窗口小部件的变量(Flutter with Dart)【英文标题】:Access child widget's variable in parent widget (Flutter with Dart) 【发布时间】:2020-01-29 06:17:28 【问题描述】:

我有一个按钮,按下它会打开一个模态底部表。该工作表有一个表单小部件,它需要很少的文本字段和一个图像(来自画廊/相机)。对于这个图像输入,我创建了另一个在上一个视图(模式表)中调用的有状态小部件。 现在,通过用户接收到的图像文件被设置在子状态小部件中的变量中。我的问题是,如何在父小部件中访问此变量(子小部件中的 File 对象)?

请参考以下代码:

底页:(请参阅调用子小部件的注释。)

        context: _scaffoldKey.currentContext,
        builder: (BuildContext context) 
          return Scaffold(
              backgroundColor: Colors.white,
              appBar: AppBar(
                elevation: 0.0,
                automaticallyImplyLeading: false,
                backgroundColor: Colors.white,
                title: Center(
                  child: _formTitleWidget(),
                ),
              ),
              body: Container(
              height: MediaQuery.of(context).size.height* 0.5,
              margin: EdgeInsets.all(MediaQuery
                  .of(context)
                  .copyWith()
                  .size
                  .width * 0.05),
              child: Form(
                key: _addChildFormKey,
                child: SingleChildScrollView(
                  child: Container(
                    height: MediaQuery.of(context).size.height* 0.4,
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        // Calling the child widget here - where 'image' variable is set
                        AddChildView(),
                        Container(
                          height: MediaQuery.of(context).size.height* 0.4,
                          width:  MediaQuery.of(context).size.width* 0.65,
                          child: Column(
                            children: [
                              _childNameInput(),
                              _childBirthDateInput(),
                              _childHeightInput(),
                              _childWeightInput(),
                              _addChildWithInfo()
                            ],
                          ),
                        )
                      ],
                    ),
                  ),
                ),
              ),
            )
          );
        ```

【问题讨论】:

我会通过回调或与Navigator.pop 合作发送结果。 【参考方案1】:

如果您不使用状态管理解决方案,则必须使用回调。

在父级中创建一个变量。 创建一个接收值并将其分配给刚刚创建的变量的方法。

创建一个最终函数并将其添加到您孩子的构造函数中。 现在,当您在 Parent 中实例化 Child Widget 时,它将接受您刚刚创建的方法。

适当时在您的孩子中运行该函数。

class ParentWidget extends StatelessWidget 
  Image image;

  callBack(Image imageFromChild) 
    this.image = imageFromChild;
  

  @override
  Widget build(BuildContext context) 
    return Container();
  


class ChildWidget extends StatelessWidget 
  final Function callBack;

  const ChildWidget(Key key, this.callBack) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Container(
      child: FlatButton(
        child: Text('Press'),
        onPressed: () 
          var image = uploadImageMethod();
          callBack(image);
        ,
      ),
    );
  

【讨论】:

父小部件和子小部件都是有状态小部件。 当我说状态管理解决方案时,我指的是应用状态解决方案而不是临时状态。例如 bloc、mobx、redux、provider。【参考方案2】:

class someChildWidget extends StatefulWidget 
  
  String someValue ;  // this is the value that should be accesible from a parent widget
  
  @override
  _someChildWidgetState createState() => _someChildWidgetState();


class _someChildWidgetState extends State<someChildWidget> 
  .
  .
  .
  
    metodInTheChild(String something) 
    setState(() 
       widget.someValue = something;
    
      );
   
  
  
  
  
  
class parentWidget extends StatefulWidget 
  @override
  _someChildWidgetState createState() => _someChildWidgetState(esRequerido);


class _parentWidgetState extends State<parentWidget> 
someChildWidget scw= someChildWidget();

    .
    .
    .
     metodInTheParent() 
      String value=swc.someValue; // now here is where you can access the value of the child widget
      
  

【讨论】:

以上是关于easyui如何在父容器打开一个窗口的主要内容,如果未能解决你的问题,请参考以下文章

easyui 中,openTab如何设置点击只在窗口中打开一个,而不是多个在一起的

jquery.easyui如何关闭窗口

delphi如何实现像excel中那样,有多个窗口,窗口可以最大化。但是只能在父窗口移动

异步分页 EasyUI

如何使用HTML实现点击一个链接打开新窗口49

如何在父窗口中运行子窗口