flutter学习(六)DefaultTabController设计顶部滑动栏目

DefaultTabController可以设计类似于今日头条顶部的滑动栏。

效果

注意,这里的闪屏是因为夜神模拟器的bug
在这里插入图片描述
注:闪屏是因为夜神模拟器的bug

代码解析

顶部的标题

return DefaultTabController(
  length: 2,
  child:Scaffold(
    appBar: AppBar(
      title:Row(
        mainAxisSize: MainAxisSize.max,
        children: <Widget>[
          Expanded(
            child: TabBar(
              tabs: <Widget>[
                Tab(text: "左边"),
                Tab(text: "右边")
              ],
            ),
          )
        ],
      )
    ),
  )
);

可以看到,这个模块是放在可以找到AppBar,并使用Expanded扩展出自己想要的效果

下方的内容,这里使用TabBarView对应内容,一个ListView对应一个界面,如第一个ListView这样写

 body:TabBarView(
          children: <Widget>[
            ListView(
              children: <Widget>[
                ListTile(
                  title:Text("内容一")
                ),
                ListTile(
                  title: Text("内容一"),
                )
              ],
            ),
     

有几个滑动的标题,就写几个ListView即可

源代码

以下是全部代码

import 'package:flutter/material.dart';
import 'package:flutter_app/res/listData.dart';
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: Text("左右切换"),
          ),
          body: LayoutDemo()),
    );
  }
}

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child:Scaffold(
        appBar: AppBar(
          title:Row(
            mainAxisSize: MainAxisSize.max,
            children: <Widget>[
              Expanded(
                child: TabBar(
                  tabs: <Widget>[
                    Tab(text: "左边"),
                    Tab(text: "右边")
                  ],
                ),
              )
            ],
          )
        ),
        body:TabBarView(
          children: <Widget>[
            ListView(
              children: <Widget>[
                ListTile(
                  title:Text("内容一")
                ),
                ListTile(
                  title: Text("内容一"),
                )
              ],
            ),
            ListView(
              children: <Widget>[
                ListTile(
                    title:Text("内容二")
                ),
                ListTile(
                  title: Text("内容二"),
                )
              ],
            )
          ],
        )
      )
    );

  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值