flutter TabBar+PageView联动

import ‘package:flutter/material.dart’;

void main() {

runApp(new MyApp());

if (Platform.isAndroid) {

// 以下两行 设置android状态栏为透明的沉浸。写在组件渲染之后,是为了在渲染后进行set赋值,覆盖状态栏,写在渲染之前MaterialApp组件会覆盖掉这个值。

SystemUiOverlayStyle systemUiOverlayStyle =

SystemUiOverlayStyle(statusBarColor: Colors.transparent);

SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);

}

}

class MyApp extends StatelessWidget {

// This widget is the root of your application.

@override

Widget build(BuildContext context) {

return MaterialApp(

title: ‘Flutter Demo’,

theme: ThemeData(

primaryColorBrightness: Brightness.dark,

platform: TargetPlatform.iOS),

home: MyHomePage(),

);

}

}

class MyHomePage extends StatefulWidget {

@override

State createState() => HomeState();

}

class TabTitle {

String title;

int id;

TabTitle(this.title, this.id);

}

class HomeState extends State with SingleTickerProviderStateMixin {

TabController mTabController;

PageController mPageController = PageController(initialPage: 0);

List tabList;

var currentPage = 0;

var isPageCanChanged = true;

@override

void initState() {

super.initState();

initTabData();

mTabController = TabController(

length: tabList.length,

vsync: this,

);

mTabController.addListener(() {//TabBar的监听

if (mTabController.indexIsChanging) {//判断TabBar是否切换

print(mTabController.index);

onPageChange(mTabController.index, p: mPageController);

}

});

}

initTabData() {

tabList = [

new TabTitle(‘推荐’, 10),

new TabTitle(‘热点’, 0),

new TabTitle(‘社会’, 1),

new TabTitle(‘娱乐’, 2),

new TabTitle(‘体育’, 3),

new TabTitle(‘美文’, 4),

new TabTitle(‘科技’, 5),

new TabTitle(‘财经’, 6),

new TabTitle(‘时尚’, 7)

];

}

onPageChange(int index, {PageController p, TabController t}) async {

if (p != null) {//判断是哪一个切换

isPageCanChanged = false;

await mPageController.animateToPage(index, duration: Duration(milliseconds: 500), curve: Curves.ease);//等待pageview切换完毕,再释放pageivew监听

isPageCanChanged = true;

} else {

mTabController.animateTo(index);//切换Tabbar

}

}

@override

void dispose() {

super.dispose();

mTabController.dispose();

}

结尾

我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

image

以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。**

[外链图片转存中…(img-oW77yPlU-1720087036733)]

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值