当前位置: 首页 > news >正文

o2o网站咋建设/网站推广的营销策划方案

o2o网站咋建设,网站推广的营销策划方案,旅游网站开发流程,龙岗网站开发公司先来张效果图 我的需求是,列表滚动到顶部,Tabbar停留,置顶. 实际写起来,绕了不少弯路. 最开始我使用的: CustomScrollView 代码如下: import package:flutter/material.dart; const url http://www.pptbz.com/pptpic/UploadFiles_6909/201203/2012031220134655.jpg; …

先来张效果图


我的需求是,列表滚动到顶部,Tabbar停留,置顶.

实际写起来,绕了不少弯路.

最开始我使用的:

CustomScrollView
代码如下:

import 'package:flutter/material.dart';


const url =
    'http://www.pptbz.com/pptpic/UploadFiles_6909/201203/2012031220134655.jpg';

class TestPage2 extends StatefulWidget {
  @override
  _TestPage2State createState() => _TestPage2State();
}

class _TestPage2State extends State<TestPage2> {
  var tabTitle = [
    '页面1',
    '页面2',
    '页面3',
  ];

  @override
  Widget build(BuildContext context) {
    return new DefaultTabController(
        length: tabTitle.length,
        child: Scaffold(
          body: new CustomScrollView(
            slivers: <Widget>[
              new SliverAppBar(
                expandedHeight: 200.0,
                floating: true,
                pinned: true,
                flexibleSpace: FlexibleSpaceBar(
                    centerTitle: true,
                    title: Text(
                      "我是可以跟着滑动的title",
                    ),
                    background: Image.network(
                      url,
                      fit: BoxFit.cover,
                    )),
              ),
              new SliverToBoxAdapter(
                child: new TabBar(
                  tabs: tabTitle.map((f) => Tab(text: f)).toList(),
                  indicatorColor: Colors.red,
                  unselectedLabelColor: Colors.black,
                  labelColor: Colors.red,
                ),
              ),
              new SliverFillRemaining(
                child: TabBarView(
                  children: tabTitle
                      .map((s) => ListView.builder(
                            itemBuilder: (context, int) => Text("123"),
                            itemCount: 50,
                          ))
                      .toList(),
                ),
              )
            ],
          ),
        ));
  }
}


 

虽然列表效果出来了,但不是我想要的,

列表滑动,不会联动

使用SliverToBoxAdapter 并不会有联动效果.因为它是固定的.

想要联动,只有像NestedScrollView源码里的


使用自定义的PrimaryScrollController才行.
不过既然NestedScrollView已经做,不是特别的需求,就用NestedScrollView就好了

正确的姿势 NestedScrollView:
SliverAppBar
相当于Appbar.不过是Sliver滚动家族里的

  new SliverAppBar(
                  expandedHeight: 200.0,
                  floating: true,
                  pinned: true,
                  flexibleSpace: FlexibleSpaceBar(
                      centerTitle: true,
                      title: Text(
                        "我是可以跟着滑动的title",
                      ),
                      background: Image.network(
                        url,
                        fit: BoxFit.cover,
                      )),
                ),

悬浮最关键的:SliverPersistentHeader
这个是可以联动并且可以停留在顶部的
设置悬浮停留的属性pinned.
这里需要自己实现一个Delegate.因为需要停留weight的高度.

 new SliverPersistentHeader(
                  delegate: new SliverTabBarDelegate(
                    new TabBar(
                      tabs: tabTitle.map((f) => Tab(text: f)).toList(),
                      indicatorColor: Colors.red,
                      unselectedLabelColor: Colors.black,
                      labelColor: Colors.red,
                    ),
                    color: Colors.white,
                  ),
                  pinned: true,
                ),

最终代码:
import 'package:flutter/material.dart';

const url =
    'http://www.pptbz.com/pptpic/UploadFiles_6909/201203/2012031220134655.jpg';

class TestPage extends StatefulWidget {
  @override
  _TestPageState createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  var tabTitle = [
    '页面1',
    '页面2',
    '页面3',
  ];

  @override
  Widget build(BuildContext context) {
    return new DefaultTabController(
        length: tabTitle.length,
        child: Scaffold(
          body: new NestedScrollView(
            headerSliverBuilder: (context, bool) {
              return [
                SliverAppBar(
                  expandedHeight: 200.0,
                  floating: true,
                  pinned: true,
                  flexibleSpace: FlexibleSpaceBar(
                      centerTitle: true,
                      title: Text(
                        "我是可以跟着滑动的title",
                      ),
                      background: Image.network(
                        url,
                        fit: BoxFit.cover,
                      )),
                ),
                new SliverPersistentHeader(
                  delegate: new SliverTabBarDelegate(
                    new TabBar(
                      tabs: tabTitle.map((f) => Tab(text: f)).toList(),
                      indicatorColor: Colors.red,
                      unselectedLabelColor: Colors.black,
                      labelColor: Colors.red,
                    ),
                    color: Colors.white,
                  ),
                  pinned: true,
                ),
              ];
            },
            body: TabBarView(
              children: tabTitle
                  .map((s) => ListView.builder(
                        itemBuilder: (context, int) => Text("123"),
                        itemCount: 50,
                      ))
                  .toList(),
            ),
          ),
        ));
  }
}

class SliverTabBarDelegate extends SliverPersistentHeaderDelegate {
  final TabBar widget;
  final Color color;

  const SliverTabBarDelegate(this.widget, {this.color})
      : assert(widget != null);

  @override
  Widget build(
      BuildContext context, double shrinkOffset, bool overlapsContent) {
    return new Container(
      child: widget,
      color: color,
    );
  }

  @override
  bool shouldRebuild(SliverTabBarDelegate oldDelegate) {
    return false;
  }

  @override
  double get maxExtent => widget.preferredSize.height;

  @override
  double get minExtent => widget.preferredSize.height;
}


最终效果


题外话:
如果不使用TabBar+TabBarView
那么直接使用CustomScrollView就可以了.
使用SliverList代替ListView就可以进行联动.

期待你的留言交流.

交流群: 782978118(flutter群) 493180098 (android群)

flutter开源项目地址:https://github.com/Jlanglang/yiball
————————————————
版权声明:本文为CSDN博主「jlanglang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jlanglang/article/details/90029121

http://www.lbrq.cn/news/960445.html

相关文章:

  • 制定网站建设方案/seo 工具
  • 网站优化工作室/网站宣传文案
  • 官方门户网站j建设的必要性/广告公司名字
  • 网站建立供应商/网络营销推广的方法
  • pos机网站模板/太原做网络推广的公司
  • 富士康/百度刷排名seo
  • 求国外做任务赚钱的网站/网络营销公司名字
  • 如何安装wordpress的插件安装/郑州谷歌优化外包
  • 有人在相亲网站骗人做传销/seo客服
  • 网页制作三剑客是指/seo网络排名优化哪家好
  • 特色个人网站/百度一下官方网址
  • 长沙移动网站建设哪家好/百度网络营销app
  • 网站建设主要用什么软件/如何注册百度账号
  • 怎样建设网站客服服务/上海网站关键词排名
  • 重庆奉节网站建设/网上推广用什么平台推广最好
  • 网站建设制作软件/网站推广的方法和途径
  • 做跨境电商被骗了三万/seo顾问是什么职业
  • 购物商城网站开发目的文档/市场营销策略
  • 洛阳做网站的公司/东莞做网站公司电话
  • 网站备案多久做一次/网络营销试卷
  • 黄石建委网工程建设城建网站/网站关键词怎么优化排名
  • 网址导航系统/网站seo优化公司
  • jquery 单击input输入框弹出选择框多用于人才类网站/今日头条指数查询
  • 宝安网站建设哪家便宜/seo优化是怎么优化的
  • 做网站怎么弄/网络营销的种类有哪些
  • 可做宣传的网站都有哪些/跨界营销案例
  • 南京做网站开发 待遇/邢台市seo服务
  • 小组网站建设方案书/自己如何制作网站
  • 景区网站建设材料/电脑系统优化工具
  • 做收费网站/太原推广团队
  • Kotlin泛型约束
  • 40.限流规则
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件
  • Linux系统安装Docker及部署Node.js 20.15.0(含pnpm、pm2)完整指南
  • Web3+AI融合新纪元:Sollong用智能终端重塑协作计算未来
  • ADVB协议内容分析