推广

Flutter动态创建UI实现方案

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

Simulator Screen Shot – iPhone 12 – 2020-12-17 at 09.22.41.png

Widgets

目前我们支持如下Widget。

Container
Text
TextField
Column
Expanded
Image
Padding
Row
SafeArea
SingleChildScrollView
Scaffold
AppBar
RawMaterialButton
SizedBox
Dialog

Customize-Widget

当引擎提供的组件不满足使用需求时,可以通过扩展组件的方式添加自定义的组件。自定义组件的方式如下,或者参考 Container:

Define CustomerWidget

/// CustomerWidget handler
class YZCustomerWidgetHandler extends YZDynamicBasicWidgetHandler {

  @override
  String get widgetName => 'CustomerWidget';

  @override
  Widget build(Map<String, dynamic> json, {Key key, BuildContext buildContext}) {
    return _Builder(json, key:key);
  }
  
}

class _Builder extends YZDynamicBaseWidget {

  final Map<String, dynamic> json;

  _Builder(this.json, {Key key}): super(json, key: key);

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

class _BuilderState extends YZDynamicWidgetBasicState<_Builder> {

  //Deal with props / 处理控件属性
  Map props;
  Alignment _alignment;

  @override
  void initState() {
    super.initState();

    //Deal with props / 处理控件属性
    props = super.config.props;
    _alignment = YZDinamicWidgetUtils.alignmentAdapter(props["alignment"]);   
  }

  @override
  Widget build(BuildContext context) {
    Widget _widget;

    CustomerWidget _subwidget = CustomerWidget(
      alignment: _alignment,
    );  

    //Deal with events / 处理事件
    _widget = super.buildWithEvents(_subwidget, super.config.xEvents);

    return _widget;
  }

  @override
  void registerActions() {
    //Deal with action / 处理事件实现
    actionFunctions['setState'] = stateSetter; 
  }

  void stateSetter({
      Map params, 
      YZDynamicRequest request,
      List<YZDynamicActionRule> rules,
      Map localVariables,
      State state,
    }) {
    print('Execute xAction: ${this.runtimeType} setState');
    if (mounted) {
      setState(() {});
    }
  }

}

Register CustomerWidget

YZDynamicCommon.reginsterWidgetHandler(YZCustomerWidgetHandler)

User CustomerWidget

{
  "xKey": "globalKeyOfWidget", 
  "widgetName": "CustomerWidget",      
  "props": { 
     "alignment": "[10, 10, 0, 0]"
  },
  "xEvents": [
  {
    "eventType": "onClick",
    "code": '''
      [code...]      
    '''
  },
  "xVar": {
  
  }
  ]           
}

Customize-Grammar

当引擎提供的伪代码语法不满足使用需求时,可以通过扩展action的方式添加自定义的语法。

Define action

/*
 * Custum action
 * 自定义 action 
 */
class YZToastHandler extends YZDynamicPublicActionHandler{
  @override
  void action(BuildContext context, {
      Map params, 
      YZDynamicRequest request,
      List<YZDynamicActionRule> rules,
      Map localVariables,
      State state,
    }) {
      String tip = params['tip'];
      Fluttertoast.showToast(
        msg: tip,
        toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.CENTER,
        timeInSecForIosWeb: 1,
        backgroundColor: Colors.red,
        textColor: Colors.white,
        fontSize: 16.0
    );
  }

  @override
  String get actionName => 'yzToast';

}

Register action

YZDynamicCommon.reginsterPublicActionHandler(YZToastHandler());

User action

yzToast(tip:content);

Contact

Created by 153768151@qq.com – feel free to contact me

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

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

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

相关文章

淘宝店群还能做吗,无货源电商要交980元靠谱吗(店群真正挣钱的有几个)

淘宝店群还能做吗,无货源电商要交980元靠谱吗(店群真正挣钱的有几个)

淘宝无货源店群就是以中间商的方式来赚取差价,不用进货囤货,甚至连快递都是上家来发。现在想要做淘宝店群还是可以做的,但是需要改变一些方法,抛弃固有的观念,店铺的商品必须要做细分。...

运营应该读什么书?这里送你15本运营类书单!

运营应该读什么书?这里送你15本运营类书单!

总都有运营朋友让我推荐书单,但我不知道推荐什么,因为我不认为读书能解决急迫的入行或解惑需求。   读书应该是一种生活方式,收益也是经过长期沉淀才能感受到。本文就说说我对运营从业者读书的建议,最后再推荐我认为不错的15本书。   运营的核心素...

岗位内推丨9月招聘新鲜出炉~

半撇私塾2022年9月的内推岗位新鲜出炉啦!本次内推岗位都是全职岗位哦!祝大家都能抓住秋招的小尾巴,把亮闪闪的Offer带回家~岗位内推仅面向半撇私塾付费学员开放,优秀学员将会获得优先内推机会。1、蓝月亮1.1 关于我们蓝月亮(中国)有限公司成立于2001年,总部坐落于广州...

淘宝店铺刷浏览量赚钱吗(淘宝店铺刷销量)

淘宝店铺刷浏览量赚钱吗(淘宝店铺刷销量)

商品的权重其实也就是关键词的权重,商品的权重增加了,那么在“人气商品”的搜索结果里面出现的几率也会大大增加。因此,很多店主都会选择在短时间内通过刷流量这个方法来提高商品的关键字排名。...

2022《财富》世界500强榜单出炉,中国蝉联第一,总营收首 ...

2022《财富》世界500强榜单出炉,中国蝉联第一,总营收首 ...

世界500强一直是顶级企业的 身份认证 就像985、211对于名校的意义与之不同的是,世界500强的名单每年都在变!在北京时间2022年8月3日,《财富》全球同步发布了最新的《财富》世界500强排行榜。我们来一睹为快吧~《秋招岗位汇总表》【秋鸟内推群】01、中国蝉联榜首,总...

从拉新、留存、促活、营收四要素谈谈APP用户运营

从拉新、留存、促活、营收四要素谈谈APP用户运营

《人民的名义》这部令人走火入魔的反腐剧,体现了人与人之间复杂的关系链,盒子菌得到了做人做事的领悟!网红达康书记这么说:共产党人是为人民服务的,不是为人民币服务的。而从用户运营本职工作中,也能从剧中塑造的人物形象获得启示。从用户中来,到用户中去,了解用户,传递产品价值给用户,服务好用户!...

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

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