首页 > 其他分享 >一统天下 flutter - widget Sliver: SliverGrid - 网格(需要在 CustomScrollView 中使用)

一统天下 flutter - widget Sliver: SliverGrid - 网格(需要在 CustomScrollView 中使用)

时间:2023-04-23 16:58:05浏览次数:39  
标签:widget 滚动 CustomScrollView 指定 元素 网格 SliverGrid dart

源码 https://github.com/webabcd/flutter_demo
作者 webabcd

一统天下 flutter - widget Sliver: SliverGrid - 网格(需要在 CustomScrollView 中使用)

示例如下:

lib\widget\sliver\sliver_grid.dart

/*
 * SliverGrid - 网格(需要在 CustomScrollView 中使用)
 */

import 'dart:math';

import 'package:flutter/material.dart';

class SliverGridDemo extends StatefulWidget {
  const SliverGridDemo({Key? key}) : super(key: key);

  @override
  _SliverGridDemoState createState() => _SliverGridDemoState();
}

class _SliverGridDemoState extends State<SliverGridDemo> {

  final _random = Random();
  Color _getRandomColor() {
    return Color.fromARGB(255, _random.nextInt(256), _random.nextInt(256), _random.nextInt(256),);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomScrollView(
        slivers: [
          SliverGrid(
            /// SliverGridDelegateWithFixedCrossAxisCount() - 用于指定非滚动方向上的元素的数量
            gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
              /// 非滚动方向上的元素的数量
              crossAxisCount: 3,
              /// 滚动方向上的元素之间的间距
              mainAxisSpacing: 10,
              /// 非滚动方向上的元素之间的间距
              crossAxisSpacing: 10,
              /// 滚动方向上的元素的长度(垂直滚动则此参数用于指定网格内元素的高度;水平滚动则此参数用于指定网格内元素的宽度)
              mainAxisExtent: 150,
              /// 如果不指定 mainAxisExtent 则以 childAspectRatio 为准,关于 childAspectRatio 的说明请参见 /lib/widget/list/grid_view.dart
              /// childAspectRatio: 1,
            ),
            /// SliverChildBuilderDelegate - 根据滚动的位置按需创建元素,并且根据数据源动态生成对应的元素
            delegate: SliverChildBuilderDelegate((context, index) =>
                Container(color: _getRandomColor(), height: 150,),
              /// 用于指定列表中的元素数量
              childCount: 50,
              /// 是否将列表内元素用 AutomaticKeepAlive 封装,从而在元素滚动出可视区的时候允许其保持状态(注:前提是元素支持保持状态)
              /// 要想使元素可以保持状态,需要借助 with AutomaticKeepAliveClientMixin,可以参见 /lib/widget/sliver/sliver_list.dart 中的示例
              addAutomaticKeepAlives: true,
              /// 是否将列表内元素用 RepaintBoundary 封装,从而使滚动的时候避免重绘
              addRepaintBoundaries: true,
            ),
          ),

          SliverGrid(
            /// SliverGridDelegateWithMaxCrossAxisExtent() - 用于指定非滚动方向上的元素的最大长度
            gridDelegate: const SliverGridDelegateWithMaxCrossAxisExtent(
              /// 非滚动方向上的元素的最大长度
              /// 比如垂直滚动时,此参数用于指定水平方向上的元素的最大宽度,然后 GridView 会按此要求最终给元素一个合适的宽度
              maxCrossAxisExtent: 50,
              /// 滚动方向上的元素之间的间距
              mainAxisSpacing: 10,
              /// 非滚动方向上的元素之间的间距
              crossAxisSpacing: 10,
              /// 滚动方向上的元素的长度(垂直滚动则此参数用于指定网格内元素的高度;水平滚动则此参数用于指定网格内元素的宽度)
              mainAxisExtent: 150,
              /// 如果不指定 mainAxisExtent 则以 childAspectRatio 为准,关于 childAspectRatio 的说明请参见 /lib/widget/list/grid_view.dart
              /// childAspectRatio: 1,
            ),
            /// SliverChildBuilderDelegate - 根据滚动的位置按需创建元素,并且根据数据源动态生成对应的元素
            delegate: SliverChildBuilderDelegate((context, index) =>
                Container(color: _getRandomColor(), height: 150,),
              /// 用于指定列表中的元素数量
              childCount: 100,
              /// 是否将列表内元素用 AutomaticKeepAlive 封装,从而在元素滚动出可视区的时候允许其保持状态(注:前提是元素支持保持状态)
              /// 要想使元素可以保持状态,需要借助 with AutomaticKeepAliveClientMixin,可以参见 /lib/widget/sliver/sliver_list.dart 中的示例
              addAutomaticKeepAlives: true,
              /// 是否将列表内元素用 RepaintBoundary 封装,从而使滚动的时候避免重绘
              addRepaintBoundaries: true,
            ),
          ),
        ],
      ),
    );
  }
}

源码 https://github.com/webabcd/flutter_demo
作者 webabcd

标签:widget,滚动,CustomScrollView,指定,元素,网格,SliverGrid,dart
From: https://www.cnblogs.com/webabcd/p/flutter_lib_widget_sliver_sliver_grid.html

相关文章

  • 一统天下 flutter - widget Sliver: SliverAppBar/FlexibleSpaceBar - 可展开/收缩的
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widgetSliver:SliverAppBar/FlexibleSpaceBar-可展开/收缩的标题栏(需要在CustomScrollView中使用)示例如下:lib\widget\sliver\sliver_app_bar.dart/**SliverAppBar/FlexibleSpaceBar......
  • 一统天下 flutter - widget Sliver: SliverToBoxAdapter - 为不可滚动组件提供 sliver
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widgetSliver:SliverToBoxAdapter-为不可滚动组件提供sliver效果示例如下:lib\widget\sliver\sliver_to_box_adapter.dart/**SliverToBoxAdapter-为不可滚动组件提供sliver效果......
  • 一统天下 flutter - widget Sliver: NestedScrollView - 为可滚动组件提供 sliver 效
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widgetSliver:NestedScrollView-为可滚动组件提供sliver效果示例如下:lib\widget\sliver\nested_scroll_view.dart/**NestedScrollView-为可滚动组件提供sliver效果*/import......
  • 一统天下 flutter - widget Sliver: SliverPersistentHeader - 自定义可展开/收缩的标
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widgetSliver:SliverPersistentHeader-自定义可展开/收缩的标题栏示例如下:lib\widget\sliver\sliver_persistent_header.dart/**SliverPersistentHeader-自定义可展开/收缩的标题栏......
  • 一统天下 flutter - widget 选择类: showDatePicker()/showTimePicker/CalendarDatePi
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget选择类:showDatePicker()/showTimePicker/CalendarDatePicker-日期选择和时间选择示例如下:lib\widget\selection\time_picker.dart/**showDatePicker()/showTimePicker/Calenda......
  • Android之AppWidget 开发浅析
    什么是AppWidgetAppWidget即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图:图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。典型的程序有时钟、天气、音乐播放......
  • 一统天下 flutter - widget 基础: 生命周期
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget基础:生命周期示例如下:lib\widget\basic\lifecycle.dart/**生命周期*/import'package:flutter/material.dart';import'../../helper.dart';classLifecy......
  • Visual Studio编译和使用wxWidgets
    一、下载到官网:https://www.wxwidgets.org/官网会引导跳到github:https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.2github有很多个下载链接,有代码(source)和预编译包(binary),后者又分开发版(dev)和发布版(release)预编译包的VC版本和VS版本对应如下:*vc14x兼容20......
  • pyqt5-QTreeWidget
    1、介绍树形组件2、类和初始化classQTreeWidget(QTreeView):"""QTreeWidget(parent:QWidget=None)"""def__init__(self,parent=None):pass3、属性4、方法(1)setColumnCount设置列数,参数为int类型。树形组件只能是设置为1(2)setHeaderLabels设......
  • pyqt5-QTableWidget
    1、介绍这是pyqt的表格组件。2、类和初始化classQTableWidget(QTableView):def__init__(self,*__args):pass示例:self.table=QTableWidget(self.w)3、属性4、方法(1)columnCount和rowCount返回int类型,即列数和行数,最低为0,即空白,此时没有表头(2)setColum......