Flutter基金管理App| 8月更文挑戰

NoBugBoy發表於2021-08-02

基於Flutter寫的基金管理app

整體只有三個頁面,首頁的收藏列表,點選列表進入的詳情頁,和搜尋頁面,整個專案沒有使用 StatefulWidget,所有狀態均使用Provider進行管理(其實是不會用statefulwidget,這種設計使用起來很難受,很難想象是google設計的)

基於iphone11pro做的適配,如果需要打包Android或其他可能需要簡單的調整 僅供學習使用,原始碼 github.com/NoBugBoy/jj 喜歡可以點一個star謝謝

首頁會顯示大盤資訊,以及收藏的基金

資料會快取到sharedPreferences,重啟APP不會丟,頁面下拉可以重新整理列表的數值,配置了1.5秒重新整理一次的定時器,會自動重新整理頁面

在這裡插入圖片描述

在頁面的列表左右滑動可以刪除收藏,使用provider進行狀態管理

Future getList(){
  Future f  =  matchJJName();
  f.then((value) => {
    dataList = value,
    notifyListeners()
  });
複製程式碼

整個App的資料來源是爬的天天基金的Api

 Future<List<Map>> matchJJName() async {
    Uri uri1 =  Uri.parse(URL);
    var request1 = await httpClient.getUrl(uri1);
    var response1 = await request1.close();
    String responseBody1 = await response1.transform(utf8.decoder).join();
    int begin = responseBody1.indexOf("diff")+6;
    String newstr = responseBody1.substring(begin,responseBody1.length-2);
    var dplsit = json.decode(newstr);
    this.dplsit = dplsit;

   String code = this.codes.join(",");
    Uri uri =  Uri.parse(URL);
    var request = await httpClient.getUrl(uri);
    var response = await request.close();
    String responseBody = await response.transform(utf8.decoder).join();
    String newStr = responseBody.substring(17);
    newStr = newStr.substring(0,newStr.length-3);
    List<String> split = newStr.split(""");
    
    int i =0;
    List<Map> list = List();
    for (String value in split) {
        if(i%2 == 0){
          List<String> model = value.split(",");
          Map m = new Map();
          m.addEntries({
            MapEntry("code", model[0]),
            MapEntry("name", model[1]),
            MapEntry("jz", model[4]),
            MapEntry("zdf", model[5]),
            MapEntry("now", model[6]),
          });
          list.add(m);
        }
        i++;
    }
    return list;
  }
複製程式碼

詳情頁面

點選列表會進入該基金的詳情,顯示歷史每日的漲跌幅(從建立基金開始到今天全部的資料),收益率等資訊

在這裡插入圖片描述

在首頁右上角的加號可以進入搜尋(模糊匹配),點選加入即可加入到首頁中,此時會儲存到sharedPreferences,下次開啟app依然存在這些資料

在這裡插入圖片描述

相關文章