Flutter 心得 和 URL 網址無法打開之踩雷

又是一種踩雷日常,想看看開發自己的 App 是什麼感覺

可是我又不想兩個平台語言都學
Android 陣營就是 Kotlin、Java
iOS 陣營就是 Swift、Objective-C

於是就選了 Google 旗下最新的框架 —— Flutter

心得

整體架構有點自由,自由到我都不知道 model 要放哪 LUL
UI 也很好編排,除非你要改一些位置
相關的 Code 也可以去 Google 找找看
我原本只想寫 UI
結果不小心就把資料一起 Get 進來了

而且整體 Code 也沒有不多

URL 網址無法打開之踩雷

前陣子才到的雷就是網址問題
cURL 拿到的是網址含有中文字
但是呢!瀏覽器會很有“智慧”的幫你轉成 URL Encode
但在 Dart 裡面就沒有這種“智慧”東西了
前面要求我們要先 canLaunch
才可以 launch 網址

1
2
3
4
5
6
7
_launchURL(String url) async {
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}

可是寫完之後要呼叫網址檔案時,就會 throw exception
結果後來觀察到用 PHP cURL 拿到的網址,全數字沒問題,但出現中文就會 throw exception
我還在想是不是中文問題,還去 Google url_launcher flutter chinese
但發現根本沒有相關結果
直到我看到有個結果是網址有空格,要轉成 URL Encode
我才想到,要先轉成 URL Encode 瀏覽器才知道
於是就改成這樣

1
2
3
4
5
6
7
8
_launchURL(String url) async {
url = Uri.encodeFull(url); // url to url encode.
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}

這個坑,害我想了一整晚,原來是 Encode 問題啊!


Flutter 心得 和 URL 網址無法打開之踩雷
https://blog.yangjerry.tw/2019/12/18/flutter-url-encoder/
作者
Jerry Yang
發布於
2019年12月18日
許可協議