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高效,且沒有突破性的語法規則)

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