這是一個使用flutter寫的天氣預報APP,主要使用瞭如下幾個插件,入門級練練手。 dio
:網絡請求插件,用於獲取天氣信息 fluttertoast
:彈出toast提示信息 shared_preferences
:簡單的數據存儲,用於保存設置過的天氣預報信息 intl
:日期格式化 項目GitHub地址:d9l_weathergit
首先蒐集一些天氣預報APP的設計稿,肯定一下本身的界面。看到有不少好看的,可是並不想作的太複雜。因而選擇了一些簡潔的,背景圖也都去掉了。而後在PS裏大概出一個界面,以下: github
頁面都寫好以後就須要把數據替換成真實數據了,這裏使用了和風天氣的API獲取天氣數據,註冊以後就能使用。可是普通用戶有些接口是不能用的,可是對這個APP來講,可以查到天氣信息以及足夠了。 新建一個dio_client.dart
文件,裏面放全部API請求方法,這裏寫成單例模式,以下。網絡
class DioClient {
factory DioClient() => _getInstance();
static DioClient get instance => _getInstance();
static DioClient _instance; // 單例對象
static DioClient _getInstance() {
if (_instance == null) {
_instance = DioClient._internal();
}
return _instance;
}
DioClient._internal();
}
複製代碼
在main函數中初始化單例對象app
DioClient();
複製代碼
使用方法async
DioClient().getRealTimeWeather();
複製代碼
如獲取實時天氣的方法以下:函數
Future<RealTimeWeather> getRealTimeWeather(String cid) async {
String url = rootUrl + '/now';
try {
Response response = await Dio().get(url, options: options, queryParameters: {
'location': cid, // 查詢的城市id
'key': key,
});
// 根據API返回的參數定義的model
RealTimeWeather realTimeWeather;
realTimeWeather = RealTimeWeather.fromJson(response.data['HeWeather6'].first);
if (realTimeWeather.status.contains('permission')) {
return realTimeWeather;
}
realTimeWeather.basic = Basic.fromJson(realTimeWeather.mBasic);
realTimeWeather.update = Update.fromJson(realTimeWeather.mUpdate);
realTimeWeather.now = Now.fromJson(realTimeWeather.mNow);
return realTimeWeather;
} catch (e) {
print('getRealTimeWeather error= $e');
return null;
}
}
複製代碼
在搜索完一個城市的天氣後,須要把這個城市的id
保存在shared_preferences
中,這樣關閉app下次再打開的時候才能顯示上一次查詢的城市天氣,或者須要保存多個城市天氣預報的時候,也能夠保存。 保存只須要一行代碼:佈局
SpClient.sp.setString('cid', cid);
複製代碼
shared_preferences
的使用也是使用了單例模式,和dio_client.dart
同樣ui
這個項目很簡單,也只是用了不多的東西,主要是練練手吧。也沒太多東西可以介紹的。後面有時間的話會繼續完善,好比加上國際化、使用狀態管理,多城市保存等等。感興趣的能夠關注一下。GitHub給star支持,謝謝! 最後再放一下本項目的GitHub地址 d9l_weatherurl