移动开发作家群(719776724)分享专题

用Java的方式模拟Flutter的Widget的实现

2019-07-23  本文已影响114人  AWeiLoveAndroid

我已经研究Flutter很长时间了。我就想既然Flutter用的Dart语言,而且括号又是嵌套多层,很多人都表示不是很理解,也不是很喜欢那么多层括号嵌套。其实完全不用担心,既然选择了它,就要接受它,当然是选择原谅它。废话少说,其实Java也是可以实现类似的语法的,下面带领大家作死的尝试一下使用Java模拟Flutter的Widget,欢迎各类开发人员前来观战。

Flutter最重要的是Widget,首先我们来写一个类Widget,然后有一个build函数。如下所示:

public class Widget {

    private BuildContext mContext;

    public Widget build(BuildContext context){
        this.mContext = context;
        return this;
    }
}

接着我们写一个重要的类BuildContext,如下所示:

我们直接跳过细节了,这里写的都是核心点。

public class BuildContext {

    public BuildContext(){

    }
}

接下来就是一个关键的类StatelessWidget,我们写一个StatelessWidget类继承自Widget,如下所示:

这里面我们不做任何的逻辑处理。只是先把这个类写出来。

public class StatelessWidget extends Widget{
    @Override
    public Widget build(BuildContext context) {
        return super.build(context);
    }
}

接下来,我们写写一个Column类继承自StatelessWidget,如下所示:

 public class Column extends StatelessWidget {

        Widget[] childrens;
        int width;
        int height;

        public Column(int width, int height, Widget... children) {
            this.width = width;
            this.height = height;
            this.childrens = children;
        }


        @Override
        public Widget build(BuildContext context) {
            return super.build(context);
        }
    }

接下来,我们写写一个Row类继承自StatelessWidget,如下所示:

 public class Row extends StatelessWidget {

        Widget[] childrens;
        int width;
        int height;

        public Row(int width, int height, Widget... children) {
            this.width = width;
            this.height = height;
            this.childrens = children;
        }


        @Override
        public Widget build(BuildContext context) {
            return super.build(context);
        }
    }

接下来,我们写写一个Container类继承自StatelessWidget,如下所示:

 public class Container extends StatelessWidget {

        Widget[] childrens;
        int width;
        int height;

        public Container(int width, int height, Widget... children) {
            this.width = width;
            this.height = height;
            this.childrens = children;
        }

        @Override
        public Widget build(BuildContext context) {
            return super.build(context);
        }
    }

接下来,我们写写一个Text类继承自StatelessWidget,如下所示:

    public class Text extends StatelessWidget {

        String text;
        float size;

        public Text(String text, float size) {
            this.text = text;
            this.size = size;
        }

        @Override
        public Widget build(BuildContext context) {
            return super.build(context);
        }
    }

接下来就是我们的main函数的处理了,精彩不容错过:

首先我们写一个runApp函数,参数为Widget。具体逻辑我们暂时不做处理。如下所示:

public class Main {

    public static void main(String[] args) {
        runApp(new Home());
    }

    public static void runApp(Widget widget) {

    }
}

接下来我们写一个类Home继承自StatelessWidget,如下所示:

public class Home extends StatelessWidget {
        @Override
        public Widget build(BuildContext context) {
            return new Column(
                    50,
                    30,
                    new Column(
                            100,
                            50,
                            new Row(
                                    200,
                                    100,
                                    new Text(
                                            "contents",
                                            20
                                    )
                            )
                    ),
                    new Container(
                            100,
                            150,
                            new Column(
                                    200,
                                    100,
                                    new Row(
                                            50,
                                            50,
                                            new Text(
                                                    "contents2",
                                                    30
                                            )
                                    )
                            )
                    )
            );
        }
    }

OK,到此为止,就用Java语言实现了Flutter里面的多个括号嵌套的类似场景,是不是很相似?其实还是那就话,语言都是想通的,Java也好,Dart也好,都是面向对象的语言,掌握面向对象编程思想很关键。哪怕以后换成了其它的面向对象的语言,只要掌握了面向对象编程思想,同样也可以快速上手开发。

感谢大家观看,欢迎大家来喷我。

上一篇下一篇

猜你喜欢

热点阅读