隨着Flutter1.9版本在上海宣佈發佈,Flutter對web的支持也合併到Flutter主倉庫。終於不需要修改包名了。 現在是完全基於同一份codebase。Flutter1.9的其他一些新特性可以看這裏:https://developers.googleblog.com/2019/09/flutter-news-from-gdd-china-flutter1.9.html。
Dynamic Widget 是一個後端驅動的動態UI庫,通過json描述你的Flutter頁面,這個json基本上跟flutter widget代碼是一樣的,所以如果你知道Flutter widget怎麼寫,你也就知道json怎麼寫。很久沒有看了,現在發現已經有了250個星星。這次Flutter1.9對web支持了,自然會想讓Dynamic widget也支持web。
首先需要讓dynamic widget項目支持web application,你需要按照https://flutter.dev/docs/get-started/web步驟一步一步來。
1、切到flutter master channel分支,執行以下命令:
flutter channel master
flutter upgrade
這裏要注意,需要翻牆纔行。
2、激活flutter對web的支持,執行以下命令:
flutter config --enable-web
3、進入項目工程目錄,讓項目支持web,執行以下命令:
cd <into project directory>
flutter create .
4、運行web項目。
flutter run -d chrome
到第四步的時候,你會覺得原來世界這麼美好,這麼簡單的4步就加上對web的支持。當你帶着微笑在command上按下flutter run -d chrome
這一刻,Google chrome起來的時候,你內心肯定是非常愉悅的。但是在等待一兩分鐘之後你會發現Google Chrome還是一片白屏,然後切到command,你發現有打印如下的log:
WTF!說好的幸福呢,看這個log,應該是我們代碼依賴在web平臺上不支持,所以停止了編譯。具體哪個依賴並沒有直接支持,只是告訴了我們下面的幾個dart文件裏面有。沒有關係,把這個log貼到google上,做了一些排查後發現,原來是import 'dart:io';
在web平臺不支持,我的代碼裏面只是用到dart:io發了網絡請求而已,dart自己的內部的庫都不支持,看了flutter的這個issue說是要用http package來做網絡請求。
改成使用http庫來做網絡請求後,趕緊切到command上,小心翼翼的打上flutter run -d chrome
,懷着忐忑的心慢慢的按下Enter。靜靜的看了command上的log。我操,log沒打印出錯誤呀,怎麼還是白屏?
在command上按下ctrl + c
,然後輸入flutter run -d chrome -v
。多加個-v看看詳細日誌。好了,這次知道爲什麼是白屏了,原來是404,但是我怎麼知道爲什麼404呀,我又不清楚dart編譯成js是怎樣的過程,沒辦法繼續Google,廢了一杯咖啡的時間,終於找到一個類似的兄弟報了類似的問題。https://github.com/flutter/flutter/issues/40151,直接按照有點讚的兄弟方法搞一下。執行flutter run --release -d chrome -v
,其實就加了個--release,這個是編譯成release包?
yeah!沒有404了,終於跑起來了。
Flutter支持web後,可以說目前來說已經幾乎就是全端了,對桌面端的支持目前也在發力中。給大家看看同時運行在Android,iPhone和Web端情況,帥,再次希望Flutter能一統江湖。
代碼已經commit到https://github.com/dengyin2000/dynamic_widget的flutter-web-support分支,有興趣的同學可以fork下。
Warning:目前flutter 1.9版本對web的支持還是處於非常早期階段,會缺失一些功能,還有性能方面的問題,不建議用在生產環境。
Reference:
https://github.com/dengyin2000/dynamic_widget 大家高擡貴手star下唄
https://developers.googleblog.com/2019/09/flutter-news-from-gdd-china-flutter1.9.html
https://flutter.dev/docs/get-started/web