推广

Flutter动态创建UI(flutter_dynamic)最佳实践

iseeyu2年前 (2024-02-22)推广122

ezgif-1-fbcbc15ebc8f.gif

Step 1

先创建具有两个输入框和一个按扭的描述UI的数据

TextFieldA

var _textFieldA = {
  "xKey": "_TextFieldA", 
  "widgetName": "TextField",      
  "props": { 
    "style": {
      "color": "0xff000000",
      "fontWeight": "bold"
    },
    "keyboardType": "number",
    "value": "Input",
    "decoration" : {          
      "hint": "I am TextFieldA",
      "border": {
        "color": "0xffffff00",
        "width": "2"
      }
    }        
  }   
};

TextFieldB

var _textFieldB = {
  "xKey": "_TextFieldB", 
  "widgetName": "TextField",      
  "props": { 
    "style": {
      "color": "0xff000000",
      "fontWeight": "bold"
    },
    "value": "Input",
    "decoration" : {          
      "hint": "I am TextFieldB",
      "border": {
        "color": "0xffffff00",
        "width": "2"
      }
    }        
  }   
};

button

var _button = {
  "xKey": "_RawMaterialButton",
  "widgetName": "RawMaterialButton",
  "props": {
    "fillColor": "0xfff2f2f2",
    "padding": "[10,0,10,0]",
    "child": {
      "type": "sysWidget",
      "widgetName": "Text",
      "props": {
        "data": "'RawMaterialButton'. Click",
        "color": "0xff123456",
        "backgroundColor": "0xff00ff00",
        "fontSize": "16",
        "fontWeight": "bold",
        "lineHeight": "1.2"
      }
    }
  }
};

Step 2

为了更好地演示效果,我们需要将Step 1的json数据放在Scaffold类型的Material widget里,并通过单独的页面来展示它:

var _dslRootWidget = {
  "xKey": "",
  "widgetName": "Scaffold",
  "props": {
    "appBar": {
      "xKey": "",
      "widgetName": "AppBar",
      "props": {
        "title": {
          "widgetName": "Text",
          "props": {"data": "Navigator"}
        }
      }
    },
    "body": {
      "xKey": "",
      "widgetName": "SafeArea",
      "props": {
        "child": {
          "xKey": "",
          "widgetName": "Column",
          "props": {
            "children": [
              _textFieldA,
              _textFieldB,
              _button                
            ]
          }
        }
      }
    }
  }      
};

Step 3

通过Step 1和Step 2,我们就可以创建一个完整的UI了。具体效果见example/lib/main.dart里的Best Practice演示效果:


Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext contex){
    return YZDynamic.buildWidget(context, bestPraticeDsl, preConfig: null);
}));

Step 4

如果点击button的时候需要获取TextFieldA和TextFieldB的值,我们该如何实现呢?很简单,在button json里加入如下定义就可以了:

event

 "xEvents": [
    {
      "eventType": "onClick",
      "code": '''
      <c:valueA>=<w:_TextFieldA>;
      action:yzToast(tip:<c:valueA>)
      '''
    }       
  ]

and button json will show as:

var _button = {
  "xKey": "_RawMaterialButton",
  "widgetName": "RawMaterialButton",
  "props": {
    "fillColor": "0xfff2f2f2",
    "padding": "[10,0,10,0]",
    "child": {
      "type": "sysWidget",
      "widgetName": "Text",
      "props": {
        "data": "Button",
        "color": "0xff123456",
        "backgroundColor": "0xff00ff00",
        "fontSize": "16",
        "fontWeight": "bold",
        "lineHeight": "1.2"
      }
    }
  },
  "xEvents": [
    {
      "eventType": "onClick",
      "code": '''
      <c:valueA>=<w:_TextFieldA>;
      action:yzToast(tip:<c:valueA>)
      '''
    }       
  ]
}; 

Step 5

Building more wonderful application, Please read Document

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56357.html

相关文章

文章再创造的三个级别。

文章再创造的三个级别。

随着百度算法的不断更新,搜索引擎的眼睛越来越雪亮了,网站的内容页越来越重视原创,但是网站编辑或者文案的灵感是有限的,在实在是写不出原创文章的时候,就不得不对已有的文章进行再创造了,也就是大家俗称的伪原创。 但是伪原创的文章也有个高低优劣之分,并不随便拿来一篇文章进行复制黏贴就能够顺利通过搜索引擎的...

《没完没了》的“富人思维”

《没完没了》大概可以分为铺垫和正片两个部分。笼统的说,就是讲了一个雇主欠雇员的钱迟迟不还,雇员想办法要钱的事儿。正片植入桥段,搞笑煽情,当然更具价值。不过在我看来,前面短短十五分钟左右的铺垫,更具现实意义:开旅行社的老板阮大伟(姓阮ruan,被朋友称作“伟哥”,不知是不是冯...

什么是死链。

什么是死链。

很多人认为只有页面不存在(404页面)的才称为死链,其实并不是这样的。死链是指已经无法到达的链接,也称作无效连接。从返回的http状态码(http状态码都代表什么?)来看可以分为以下几种: 1.404页面   404页面就是已经不存在的页面,通常因为页面被误删除或者其他原因导致找不到页...

企业网站SEO要怎样优化关键词上首页。

企业网站SEO要怎样优化关键词上首页。

现今做网站推广的人有很多,他们最终的目的都是想要自己的网站关键词能够霸屏百度首页,并且获得更多的用户流量和转化,而要达到这一目的,就要坚持不懈的做网站更新及优化。那么,网络优化排名该如何霸屏百度首页? 1、关键词定位 企业网站在做SEO推广之前,首先要确定自己的网站优化关键词,这也就相...

创意没有密码,就这6种思维

创意没有密码,就这6种思维

编辑导语:很多人都认为很神秘,觉得只可意会不可言传,特别是广告创意,更加需要丰富的想象力。但是,创意的产生必定有一些规律存在。本篇文章里作者总结了6种常用的创意方式,希望对你有帮助。 99%的创意人都听詹姆斯·韦伯·扬说过一句...

网站主页应该如何简化有利于优化?

网站主页应该如何简化有利于优化?

我们说一个简单的主页其实是相当重要的,那么我们究竟是应该如何简化呢?最好的办法就是重视文字而避免使用大量的图片。其实我们很多的人喜欢用图片,觉得这样的一个效果很好,其实不然,你要知道的是可能对于一个网页来说,很重要的事情就是能够吸引用户的眼球,那么我们都知道文字是可以诛心的!所以一定要重视文字,图片...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片