欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么用flutter_staggered_grid_view實現(xiàn)分頁瀑布流效果

本篇內(nèi)容介紹了“怎么用flutter_staggered_grid_view實現(xiàn)分頁瀑布流效果”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、左貢ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的左貢網(wǎng)站制作公司

講解

1.前言的話

GridView是一個可滾動的,2D數(shù)組控件可以用這個組件實現(xiàn)滾動效果,但是它渲染的高度是一樣的。

如果要實現(xiàn)不同高度的滾動瀑布流,就要使用這個插件:

flutter_staggered_grid_view

說明:配置pubspec.yaml文件,最好要使用0.3.2版本以上,此時flutter版本需要1.17以上的支持

因為低版本的插件支持并不友好

flutter_staggered_grid_view: ^0.3.2

如果組件無法滑動,可能就是版本的問題導(dǎo)致

2.插件的git地址

https://github.com/letsar/flutter_staggered_grid_view

在使用的flutter組件中導(dǎo)入這個插件

import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

3.效果體驗

new StaggeredGridView.countBuilder(
  crossAxisCount: 4,
  itemCount: 8,
  itemBuilder: (BuildContext context, int index) => new Container(
      color: Colors.green,
      child: new Center(
        child: new CircleAvatar(
          backgroundColor: Colors.white,
          child: new Text('$index'),
        ),
      )),
  staggeredTileBuilder: (int index) =>
      new StaggeredTile.count(2, index.isEven ? 2 : 1),
  mainAxisSpacing: 4.0,
  crossAxisSpacing: 4.0,
)

4.配合RefreshIndicator實現(xiàn)下拉刷新

CustomScrollView(
  controller: _scrollController,
  slivers: <Widget>[
    SliverToBoxAdapter(
      child: RefreshIndicator(
        onRefresh: () async {
          await Future.delayed(Duration(seconds: 5));
        },
        child: StaggeredGridView.countBuilder(
          shrinkWrap: true,
            controller: _scrollController,
            crossAxisCount: 4,
            crossAxisSpacing: 4,
            mainAxisSpacing: 10,
            itemCount: _count,
            itemBuilder: (context, index) {
              return Container(
                  color: Colors.green,
                  child: new Center(
                    child: new CircleAvatar(
                      backgroundColor: Colors.white,
                      child: new Text('$index'),
                    ),
                  ));
            },
            staggeredTileBuilder: (index) =>
                StaggeredTile.count(2, index == 0 ? 2.5 : 3)),
      ),
    ),
  ],
))

5.六種創(chuàng)建方式和屬性

  • StaggeredGridView.countStaggeredGridView.extent,前者創(chuàng)建了一個縱軸方向固定Tile個數(shù)的布局,后者只是在縱軸方法指定了一個Tile個數(shù)的最大值,這兩種都是適合子Widget個數(shù)比較少的情況,都是List<Widget>來設(shè)置

  • StaggeredGridView.countBuilderStaggeredGridView.extentBuild,這兩個跟上面的含義差不多,區(qū)別在于適合子Widget數(shù)量比較多的需要動態(tài)創(chuàng)建的情況

  • 更高級的還有StaggeredGridView.builderStaggeredGridView.custom,區(qū)別在于創(chuàng)建的方式不同,而且也更加靈活

  • StaggeredTile.count:固定縱軸和主軸上的數(shù)量

  • StaggeredTile.extent:縱軸上的數(shù)量和主軸上的最大范圍

  • StaggeredTile.fit:縱軸上的數(shù)量

  • StaggeredGridView有幾列是由crossAxisCount除以StaggeredTile設(shè)置上的縱軸的數(shù)量的結(jié)果

三、部分源碼(不可直接運(yùn)行,根據(jù)自己的邏輯進(jìn)行調(diào)試)

import 'dart:math';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';

final Uint8List kTransparentImage = new Uint8List.fromList(<int>[
  0x89,
  0x50,
  0x4E,
  0x47,
  0x0D,
  0x0A,
  0x1A,
  0x0A,
  0x00,
  0x00,
  0x00,
  0x0D,
  0x49,
  0x48,
  0x44,
  0x52,
  0x00,
  0x00,
  0x00,
  0x01,
  0x00,
  0x00,
  0x00,
  0x01,
  0x08,
  0x06,
  0x00,
  0x00,
  0x00,
  0x1F,
  0x15,
  0xC4,
  0x89,
  0x00,
  0x00,
  0x00,
  0x0A,
  0x49,
  0x44,
  0x41,
  0x54,
  0x78,
  0x9C,
  0x63,
  0x00,
  0x01,
  0x00,
  0x00,
  0x05,
  0x00,
  0x01,
  0x0D,
  0x0A,
  0x2D,
  0xB4,
  0x00,
  0x00,
  0x00,
  0x00,
  0x49,
  0x45,
  0x4E,
  0x44,
  0xAE,
]);




List<IntSize> _createSizes(int count) {
  Random rnd = new Random();
  return new List.generate(count,
      (i) => new IntSize((rnd.nextInt(500) + 200), rnd.nextInt(800) + 200));
}

class Example08 extends StatefulWidget {
  @override
  Example08State createState() => new Example08State();
}

class Example08State extends State<Example08> {
  static const int _kItemCount = 10;
  final List<IntSize> _sizes = _createSizes(_kItemCount).toList();
  ScrollController _scrollController = new ScrollController();

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('random dynamic tile sizes'),
      ),
      body: new StaggeredGridView.countBuilder(
        controller: _scrollController,
        itemCount: 10,
        primary: false,
        crossAxisCount: 4,
        mainAxisSpacing: 4.0,
        crossAxisSpacing: 4.0,
        itemBuilder: (context, index) => new _Tile(index, _sizes[index]),
        staggeredTileBuilder: (index) => new StaggeredTile.fit(2),
      ),
    );
  }

  @override
  void initState() {
    super.initState();
    print('初始化進(jìn)入');

    _scrollController.addListener(() {
      print('我監(jiān)聽到了');
    });
  }

}

class IntSize {
  const IntSize(this.width, this.height);

  final int width;
  final int height;
}

class _Tile extends StatelessWidget {
  const _Tile(this.index, this.size);

  final IntSize size;
  final int index;

  @override
  Widget build(BuildContext context) {
    return new Card(
      child: new Column(
        children: <Widget>[
          new Stack(
            children: <Widget>[
              //new Center(child: new CircularProgressIndicator()),
              new Center(
                child: new FadeInImage.memoryNetwork(
                  placeholder: kTransparentImage,
                  image: 'https://picsum.photos/${size.width}/${size.height}/',
                ),
              ),
            ],
          ),
          new Padding(
            padding: const EdgeInsets.all(4.0),
            child: new Column(
              children: <Widget>[
                new Text(
                  'Image number $index',
                  style: const TextStyle(fontWeight: FontWeight.bold),
                ),
                new Text(
                  'Width: ${size.width}',
                  style: const TextStyle(color: Colors.grey),
                ),
                new Text(
                  'Height: ${size.height}',
                  style: const TextStyle(color: Colors.grey),
                ),
              ],
            ),
          )
        ],
      ),
    );
  }
}

“怎么用flutter_staggered_grid_view實現(xiàn)分頁瀑布流效果”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

名稱欄目:怎么用flutter_staggered_grid_view實現(xiàn)分頁瀑布流效果
本文URL:http://aaarwkj.com/article38/pchjsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站內(nèi)鏈、外貿(mào)建站、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
一区二区三区熟妇人妻视频| 蜜臀在线免费观看黄片视频| 午夜体内射精免费视频| 粗长挺进新婚人妻诗岚| 久久精品一区二区三区不卡| 国产亚洲视频一区二区观看| 日韩中文字幕 在线播放| 微拍福利一区二区三区| 国内成人免费在线视频| 免费av男人天堂亚洲天堂| 99热在线精品国产观看| 欧美日韩黄片免费在线观看| 亚洲中文自偷自拍另类| 国产一级二级三级在线电影| 全部网站免费在线观看等| 漂亮人妻被中出中文字幕| 日本免费熟女一区二区| 久久九九亚洲欧美中文字幕| 精品国产一区二区三区av在线| 2020年国产97精品自拍| 免费国产成人在线视频| 日本高清不卡免费在线观看视频一二三区 | 三级精品一区二区三区| 不卡的av中文字幕在线播放| 亚洲国产熟女导航网站视频| 国产精品一区欧美精品| 日韩人妻一级免费视频| 玩弄丰满熟妇留守妇女| 国产午夜精品自拍视频| 中文字幕人妻日韩在线| 欧美国产日韩一区二区三区视频| 极品女神福利视频久久| 久久一二三四区中文字幕| 国产精品亚洲在钱视频| 色婷婷丝袜一区网站| av天堂中文一区二区三区| 日本成人在线播放网站| 免费搜索国产男女视频| 国产高清不卡av在线| 91熟女激情五月综合| 亚洲成综合人在线播放|