Flutter学习初体验:真的不好用、不优雅

Flutter炒的很火,各种吹嘘多好多好。

抱着试试看的心态学了学,立马就被Flutter奇葩的语法和理念击垮了......

这是什么鬼语言?

我要列举一下Flutter最让我费解的一些语法特点:

1. 无穷的嵌套层级,让人反感的代码结构。

 @override
  Widget build(BuildContext context) {
    return Container(
       child: Scaffold(
        appBar: AppBar(
          title: Text("Welcome to Flutter!"),
        ),
        body: this._pageList[_currentIndex],
        bottomNavigationBar: BottomNavigationBar(
          items: [
            BottomNavigationBarItem(
              icon: Icon(Icons.home),
              title: Text("首页"),
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.category),
              title: Text("分类"),
            ),
          ],
          type: BottomNavigationBarType.fixed,
          currentIndex: _currentIndex,
          onTap: (index) {
            setState(() {
             this._currentIndex = index; 
            });
          },
        ),
      ),
    );
  }

之前写iOS的时候,创建UI的过程是顺序的,一个一个的UI对象顺序的创建,然后再绑定各个UI之间的关系和属性。而Flutter很有新意的把组件之间的父子关系映射到代码级别,让父组件包含子组件的代码。其实这个思路挺好的,但是复杂的UI组件的层级是非常深的。最大的痛点在于我很难找到一个组件的开头和结尾。不是找不到,是很不清晰。我要注释代码的时候,鼠标从开始往下拖,尴尬的事就是你不知道鼠标要拖到哪里......

2. 强迫症一般的“万物皆Widget”。

@override
  Widget build(BuildContext context) {
    return Container(
       child: Center(child: Text("首页"),),
    );
  }

Flutter强调一切都是Widget,小到一个字符串,大到一个页面,都是Widget。然而这就让我们写代码变得非常的繁琐。我只是想在一个按钮上写几个字符,我却不能只写:“Press me”,而是得写:Text("Press me")。非得包一个组件的构造函数,太太太繁琐了!而且Flutter不像HTML,把样式都交给CSS操作,而是样式和定义都混在一起,导致代码非常庞大。比如我想给一个Text赋予fontSize和Color,那么就不能单独写一个CSS文件,而是得在你定义的地方这么写:Text("Press me", style:TextStyle(fontSize:20))。我只写个fontsize不行么?为什么外面还要包一个TextStyle的构造函数???太繁琐!

3. 有状态Widget代码太复杂。

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Container(
       child: Center(child: Text("首页"),),
    );
  }
}

我只是想定义一个全屏的div,然后中间有一个文本显示“首页”俩字,就要写上面的一堆代码。需要两个类,第一个类还必须实现createState()方法。Flutter把太多东西暴露给开发者,这些东西都是无用的代码字符,当数量变得庞大起来之后非常影响阅读的清晰性。你想想,如果一个界面需要定义30个组件,每个组件都要这么写,那就是60个类,而且有一半的类都是固定写法,真的就觉得这个语言实在是太糟糕了。

然而,吐槽也没卵用,该学的还得学。其实可能是我对这种语法不适应,而不是Flutter语法糟糕。Flutter所呈现出来的功能和先进性是我不能否认的,因此在业务面前,这点技术洁癖就没必要坚持了。(我还是觉得Swift语言才是最有美学特质的编程语言,非常的严谨、优雅,而Dart却像个四不像,不如JS灵活,不如Java流行,不如C高效,且没有突破性的语法规则)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章