Flutter之 SliverAppBar + SliverGrid + SliverFixedExtentList 组合使用

此贴为最近学习Flutter的练习笔记,也希望能为后学者提供一些绵薄之力!

实现效果:一个滚动视图CustomScrollView,包裹着标题栏(SliverAppBar),网格(SliverGrid),列表(SliverFixedExtentList)。

开发工具: Studio

CustomScrollView:统一管理多个滚动视图(必须使用内部提供的Sliver,如:SliverList\SliverGrid,而不是ListView\GridView)。

SliverAppBar:添加一个AppBar,一般在CustomScrollView内部使用。

SliverGrid:类似于GridView。在CustomScrollView内部使用。

SliverFixedExtentList:类似于SliverList。在CustomScrollView内部使用。

代码示例:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

//stless
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: homeContent(),
    );
  }
}

class homeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sliver练习"),
      ),
      body: bodyContent(),
    );
  }
}

// ignore: camel_case_types
class bodyContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CustomScrollView_02();
  }

  // SliverAppBar + SliverGrid + SliverFixedExtentList 组合使用
  CustomScrollView CustomScrollView_02() {
    return CustomScrollView(
    slivers: <Widget>[
      SliverAppBar(
        leading: Icon(Icons.keyboard_backspace),//标题栏左边widget
        actions: <Widget>[//标题栏右边widget
          Icon(Icons.share)
        ],
        pinned: true,//固定标题栏
        expandedHeight: 255,//显示的高度
        flexibleSpace: FlexibleSpaceBar(//需要显示的
          centerTitle: true,
          title: Text("这是SliverAppBar"),
          background: Image(
              image: NetworkImage("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1596081152671&di=f6c85dada29dfbfa3d1a43d319d550fd&imgtype=0&src=http%3A%2F%2Fbpic.588ku.com%2Fback_pic%2F04%2F13%2F24%2F05581d89f4c1850.jpg"),
              fit: BoxFit.cover
          ),
        ),
      ),
      SliverPadding(//设置内边距
        padding: EdgeInsets.all(10),
        sliver: SliverGrid(
          delegate: SliverChildBuilderDelegate(
                  (BuildContext context,int index){
             return Container(
               alignment: Alignment.center,
               color: Colors.greenAccent,
               child: Text("grid$index"),
             );
          },
          childCount: 16//数量
      ), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 4,//一个几个item?
          mainAxisSpacing: 8,//item上下间隔
          crossAxisSpacing: 8,//item左右间隔
      )),
      ),
      SliverFixedExtentList(
          delegate: SliverChildBuilderDelegate((BuildContext context,int index){
             return Container(
               color: Colors.grey,
               child:Text("List$index",style: TextStyle(color: Colors.white),),
               alignment: Alignment.center,
             );
          },
            childCount: 20
       ),
          itemExtent: 100)

    ],
  );
  }
}

实现效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter 是一种跨平台的移动应用开发框架,它提供了丰富的组件和功能,可以帮助开发者快速构建漂亮、流畅的用户界面。对于可滑动自动滚动折线图,在 Flutter 中可以使用 `ListView` 和 `AnimatedContainer` 组件来实现。 首先,我们可以使用 `ListView` 组件来创建一个可以滑动的容器。使用 `ListView.builder` 构建一个动态列表,将折线图中的数据作为列表项进行展示。在 `ListView` 内部添加一个 `ScrollController`,用来控制列表的滚动。 当需要自动滚动时,我们可以通过动画来实现。使用 `AnimatedContainer` 组件来包裹折线图,通过修改它的宽度来实现滚动效果。可以在需要的时候,通过调用 `setState` 方法,来更新 `AnimatedContainer` 的属性值,从而触发动画效果。 在滚动时,可以监听滚动的位置,根据当前滚动的位置来判断是否需要自动滚动。通过 `ScrollController` 的 `addListener` 方法监听滚动事件,计算滚动的位置,并进行相应的判断,如果需要自动滚动,就通过修改 `AnimatedContainer` 的属性值来触发动画。 同时,可以为 `AnimatedContainer` 设置合适的动画时长和曲线,来使滚动效果更加顺滑。 总结来说,要实现可滑动自动滚动折线图,可以使用 `ListView` 和 `AnimatedContainer` 组件。通过监听滚动事件,根据滚动的位置进行判断,并通过修改 `AnimatedContainer` 的属性值来触发动画效果,从而实现自动滚动的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值