Flutter chart 各種用法教程

前言:

各位同學(xué)大家好坡贺,有段時(shí)間沒有給大家更新文章了哈摩幔,最近看了下flutter里面chart的用法 做了一些統(tǒng)計(jì)表和折線圖的效果 這些想象大家都不陌生 上學(xué)的時(shí)候經(jīng)常被老師要求畫這個(gè) 今天就分享flutter里面如何實(shí)現(xiàn)的,那么廢話不多說我們正式開始

準(zhǔn)備工作:

需要安裝flutter的開發(fā)環(huán)境:大家可以去看看之前的教程:
1 win系統(tǒng)flutter開發(fā)環(huán)境安裝教程: http://www.reibang.com/p/152447bc8718
2 mac系統(tǒng)flutter開發(fā)環(huán)境安裝教程:http://www.reibang.com/p/bad2c35b41e3

效果圖:

Screenshot_2020-12-25-15-50-17-132_com.example.fl.jpg
Screenshot_2020-12-25-15-49-54-612_com.example.fl.jpg
Screenshot_2020-12-25-15-49-57-138_com.example.fl.jpg
Screenshot_2020-12-25-15-50-00-478_com.example.fl.jpg
Screenshot_2020-12-25-15-50-03-288_com.example.fl.jpg
Screenshot_2020-12-25-15-50-08-277_com.example.fl.jpg
Screenshot_2020-12-25-15-50-11-497_com.example.fl.jpg
Screenshot_2020-12-25-15-50-14-284_com.example.fl.jpg

需要用到的三方庫:

  # 圖表 (沒有圖例) https://pub.flutter-io.cn/packages/charts_flutter#-installing-tab-
  charts_flutter: ^0.9.0
  # 圖表(沒有提示欄) https://pub.flutter-io.cn/packages/mp_chart
  mp_chart: ^0.2.2 #latest version
  # 列表懸浮頭 https://pub.flutter-io.cn/packages/sticky_headers
  sticky_headers: ^0.1.8+1
    # EChart 圖表(縮放手勢(shì)沖突) https://pub.flutter-io.cn/packages/flutter_echarts
  flutter_echarts: ^1.3.5

請(qǐng)?jiān)趐ubspec.yaml 文件中添加依賴 并在中端輸入flutter pub get 命令下載依賴


image.png

具體實(shí)現(xiàn):

Screenshot_2020-12-25-15-49-54-612_com.example.fl.jpg

普通的統(tǒng)計(jì)圖和折線圖:

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar:AppBar(
        title: Text('chart'),
      ),
      body: Container(
        child: ListView(
          children: <Widget>[
            Container(
              height: 300,
              child: getBar(),
            ),
            Container(
              height: 300,
              child: getLine(),
            )
          ],
        ),
      ),
    );
  }

主要布局我們寫了一個(gè) ListView布局來裝在我們現(xiàn)實(shí)的部分 上面的攻擊圖 因?yàn)槲覀兣鲁銎聊桓叨痊F(xiàn)實(shí)不全所以用了listivew 當(dāng)然你也可以用 Column線性布局 嵌套SingleChildScrollView在外部也是OK這個(gè)就不細(xì)講告丢,

class Barsales {
  String day;
  int sale;
  Barsales(this.day, this.sale);
}

class Linesales {
  DateTime time;
  int sale;
  Linesales(this.time, this.sale);
}

我們定義2個(gè)model類來處理數(shù)據(jù)的獲取

  Widget getBar() {
    List<Barsales> dataBar = [
      new Barsales("1", 20),
      new Barsales("2", 50),
      new Barsales("3", 20),
      new Barsales("4", 80),
      new Barsales("5", 120),
      new Barsales("6", 30),
    ];

    var seriesBar = [
      charts.Series(
        data: dataBar,
        domainFn: (Barsales sales, _) => sales.day,
        measureFn: (Barsales sales, _) => sales.sale,
        id: "Sales",
      )
    ];
    return charts.BarChart(seriesBar);
  }

我們定義dataBar數(shù)組并且在里面添加6條數(shù)據(jù) 卫旱。然后將數(shù)據(jù)的數(shù)據(jù)源賦值給我們的Series 構(gòu)造方法里面data 屬性里面

  var seriesBar = [
      charts.Series(
        data: dataBar,
        domainFn: (Barsales sales, _) => sales.day,
        measureFn: (Barsales sales, _) => sales.sale,
        id: "Sales",
      )
    ]; 

然后我們將seriesBar 傳給我們 BarChart 方法

 return charts.BarChart(seriesBar);

折線圖效果實(shí)現(xiàn):

  Widget getLine() {
    List<Linesales> dataLine = [
      new Linesales(new DateTime(2019, 7, 2), 33),
      new Linesales(new DateTime(2019, 7, 3), 55),
      new Linesales(new DateTime(2019, 7, 4), 22),
      new Linesales(new DateTime(2019, 7, 5), 88),
      new Linesales(new DateTime(2019, 7, 6), 123),
      new Linesales(new DateTime(2019, 7, 7), 75),
    ];

    var seriesLine = [
      charts.Series<Linesales, DateTime>(
        data: dataLine,
        domainFn: (Linesales lines, _) => lines.time,
        measureFn: (Linesales lines, _) => lines.sale,
        id: "Lines",
      )
    ];
    //是TimeSeriesChart,而不是LineChart,因?yàn)閤軸是DataTime類
    Widget line = charts.TimeSeriesChart(seriesLine);
    //line = charts.LineChart(series);
    return line;
  }

跟統(tǒng)計(jì)圖類似

 List<Linesales> dataLine = [
      new Linesales(new DateTime(2019, 7, 2), 33),
      new Linesales(new DateTime(2019, 7, 3), 55),
      new Linesales(new DateTime(2019, 7, 4), 22),
      new Linesales(new DateTime(2019, 7, 5), 88),
      new Linesales(new DateTime(2019, 7, 6), 123),
      new Linesales(new DateTime(2019, 7, 7), 75),
    ];

我們傳入time和 sale 實(shí)力化Linesales添加到 dataLine 數(shù)組中

var seriesLine = [
      charts.Series<Linesales, DateTime>(
        data: dataLine,
        domainFn: (Linesales lines, _) => lines.time,
        measureFn: (Linesales lines, _) => lines.sale,
        id: "Lines",
      )
    ];

我們定義dataLine數(shù)組并且在里面添加6條數(shù)據(jù) 坐昙。然后將數(shù)據(jù)的數(shù)據(jù)源賦值給我們的Series 構(gòu)造方法里面data 屬性里面

  //是TimeSeriesChart,而不是LineChart,因?yàn)閤軸是DataTime類
    Widget line = charts.TimeSeriesChart(seriesLine);
    //line = charts.LineChart(series);
    return line;

然后我們調(diào)用 charts.TimeSeriesChart 講 seriesLine 傳入 返回一個(gè)line 即可 這邊要注意要TimeSeriesChart迹蛤,而不是LineChart,因?yàn)閤軸是DataTime類 到此我們統(tǒng)計(jì)圖和折線圖就講完了民珍,還有其他效果圖的實(shí)現(xiàn) 大家可以去看具體完整源碼實(shí)現(xiàn)

最后總結(jié):

flutter 里面chart 圖表的基本用法就講完了 主要是三方庫api的調(diào)用要注意 實(shí)現(xiàn)起來還算簡單,庫本身幫我們都封裝好我們只需要傳入數(shù)據(jù)源即可盗飒。使用這些三方庫還可以實(shí)現(xiàn)跟多酷炫圖表效果,(當(dāng)然你也可以自己繪制就比較麻煩 需要時(shí)間研究 我這邊就不展開講了)陋桂, 最后希望我的文章能幫助到各位解決問題 逆趣,以后我還會(huì)貢獻(xiàn)更多有用的代碼分享給大家。各位同學(xué)如果覺得文章還不錯(cuò) 嗜历,麻煩給關(guān)注和star宣渗,小弟在這里謝過啦

項(xiàng)目地址:

碼云:https://gitee.com/qiuyu123/flutter_chart

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梨州,隨后出現(xiàn)的幾起案子痕囱,更是在濱河造成了極大的恐慌,老刑警劉巖暴匠,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞍恢,死亡現(xiàn)場離奇詭異,居然都是意外死亡每窖,警方通過查閱死者的電腦和手機(jī)帮掉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窒典,“玉大人蟆炊,你說我怎么就攤上這事∑僦荆” “怎么了涩搓?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劈猪。 經(jīng)常有香客問我昧甘,道長,這世上最難降的妖魔是什么岸霹? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任疾层,我火速辦了婚禮,結(jié)果婚禮上贡避,老公的妹妹穿的比我還像新娘痛黎。我一直安慰自己予弧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布湖饱。 她就那樣靜靜地躺著掖蛤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪井厌。 梳的紋絲不亂的頭發(fā)上蚓庭,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音仅仆,去河邊找鬼器赞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛墓拜,可吹牛的內(nèi)容都是我干的港柜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼咳榜,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼夏醉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涌韩,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤畔柔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后臣樱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靶擦,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年擎淤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奢啥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吨拍,到底是詐尸還是另有隱情,我是刑警寧澤赌结,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站孝冒,受9級(jí)特大地震影響柬姚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庄涡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一量承、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦撕捍、人聲如沸拿穴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽默色。三九已至,卻和暖如春狮腿,著一層夾襖步出監(jiān)牢的瞬間腿宰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工缘厢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吃度,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓贴硫,卻偏偏與公主長得像规肴,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夜畴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容