1、前言

首先我们想一下,如果在 Android 中实现 布局切换,通常的思路是:

  1. 做一个 viewpager
  2. 一组 Fragment
  3. 每个 Fragment 绑定一个 xml
  4. 最后填充至 viewpager

2、Flutter 实现

上边提到的用安卓原生做,思路是很明确,但是代码量还是有的,那么来看一下, Flutter 如何使用 Viewpager 实现的。

2.1、创建有状态 Widget

首先创建有状态 StatefulWidget,然后构建 state:_ApplicationPageState

class ApplicationPage extends StatefulWidget {
  //@override
  //_ApplicationPageState createState() => new _ApplicationPageState();
   等同于上边注释掉的 createState();
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _ApplicationPageState();
} }

2.2、state

Scaffold 实现了基本的纸墨设计布局结构。所以我们 new Scaffold 然后 return 即可。

class _ApplicationPageState extends State<ApplicationPage> {

  int _currentPageIndex = 0;
var _pageController = new PageController(initialPage: 0); @override
Widget build(BuildContext context) {
return new Scaffold(
appBar:
new AppBar(
title: new Text("我是AppBar"),
centerTitle: true,
),
body: new PageView.builder(
onPageChanged:_pageChange,
controller: _pageController,
itemBuilder: (BuildContext context,int index){
return index==1?new Text("我是第一页"):new Text("我是第二页");
},
itemCount: 2,
),
bottomNavigationBar: new BottomNavigationBar(items: [
BottomNavigationBarItem(
icon: new Icon(Icons.category), title: new Text("首页")),
BottomNavigationBarItem(
icon: new Icon(Icons.message), title: new Text("我的")),
],
currentIndex: _currentPageIndex,
onTap: onTap,
),
);
} // bottomnaviagtionbar 和 pageview 的联动
void onTap(int index) {
// 过pageview的pagecontroller的animateToPage方法可以跳转
_pageController.animateToPage(index,
duration: const Duration(milliseconds: 300), curve: Curves.ease);
} void _pageChange(int index) {
setState(() {
if (_currentPageIndex != index) {
_currentPageIndex = index;
}
});
} }

关于上边有几个方法:

Scaffold 有下面几个主要属性:
  • appBar:显示在界面顶部的一个 AppBar,也就是 Android 中的 ActionBar 、Toolbar
  • body:当前界面所显示的主要内容 Widget
  • bottomNavigationBar: 显示在页面底部的导航栏

2.3、navBar和pageview如何联动?

通过上边的代码也可以发现,pageView有个 onPageChanged 属性,并且类中定义了一个 _pageChange 方法,

通过 pageview 的 pagecontroller 的 animateToPage 方法实现的界面跳转;

5、Flutter 实现 ViewPager、bottomNavigationBar 界面切换的更多相关文章

  1. 自定义viewpager的界面切换动画

    核心操作: 1.创建一个类实现 android.support.v4.view.ViewPager.PageTransformer 根据 position 实现判断哪个界面进行界面切换动画 publi ...

  2. Flutter -------- BottomNavigationBar 界面切换

    Android 中有BottomNavigationBar+Fragment切换 而在Flutter也有的BottomNavigationBar 效果图 底部有两种情况 底部导航栏的类型更改其项目的显 ...

  3. 给 Flutter 界面切换来点特效

    本文微信公众号「AndroidTraveler」首发. 背景 我们知道页面之间如果直接切换,会比较生硬,还会让用户觉得很突兀,用户体验不是很好. 因此一般情况下,页面之间的切换为了达到平滑过渡,都会添 ...

  4. Unity iOS混合开发界面切换思路

    Unity iOS混合开发界面切换思路 最近有很多博友QQ 私信 或则 留言联系我,请教iOS和Unity界面之前相互切换的问题,源代码就不私下发你们了,界面跳转功能的代码我直接贴到下面好了,顺带说i ...

  5. Linux启动界面切换:图形界面-字符界面(转)

    Linux字符界面切换到图形界面 由字符界面切换到图形界面可用两种简单方法实现: 1.在字符界面输入startx或init 5 . 2.通过编辑/etc/inittab文件实现默认进入图形界面. 把其 ...

  6. Html5 Egret游戏开发 成语大挑战(五)界面切换和数据处理

    经过前面的制作,使用Egret的Wing很快完成了开始界面和选关卡界面,下面通常来说就是游戏界面,但此时界面切换和关卡数据还没有准备好,这次讲解界面的切换和关卡数据的解析.前面多次修改了Main.ts ...

  7. Android ViewPager实现选项卡切换

    ViewPager实现选项卡切换,效果图如下: 步骤一:这里使用兼容低版本的v4包进行布局,这里eclipse没有输入提示,所以要手动输入,文件名称“activity_main.xml” <Re ...

  8. android笔记:ViewPager实现界面的滑动

    最近在学习ViewPager实现界面的滑动,拜读了郭神的博客文章,并抽取归纳了自己对ViewPager的理解. ViewPager实现界面滑动的步骤如下: 1.在xml布局内加入控件android.s ...

  9. php-- Linux图形界面与字符界面切换

    转自:http://blog.163.com/wang_ly2442/blog/static/9494340720128355054551/ 1. 启动时进入字符界面,后来想切换到图形界面:使用sta ...

随机推荐

  1. SQL SERVER数据库删除LOG文件和清空日志的方案

    原文:SQL SERVER数据库删除LOG文件和清空日志的方案 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文 ...

  2. 关于go语言的测试相关内容笔记

    其实之前对于测试自己一直比较弱,不管是python的还是go的,关于测试这块并没有非常注重,这次就好好整理一下关于go的测试 单元测试 Go程序主要包含三类测试: 功能测试(test).基准测试(be ...

  3. 【Java】Java8的Lambda入门记录

    简化定义匿名实现类 匿名实现类的传统方式 创建一个线程,需要实现Runnable接口,并实现public void run()方法,用传统的方式是这样的: public static void mai ...

  4. Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS

    转自:https://www.cnblogs.com/wt645631686/p/9656046.html runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权 ...

  5. 为什么要使用NoSQL

    转载自:http://www.infoq.com/cn/news/2011/01/nosql-why [编者按]NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都 ...

  6. unicode、utf8、字符串字面值

    发现好多新人都不明白,或者说没有直观的感受,其实很简单. 简单的说,unicode是一种将全球文字都涵盖的字典 - 可以认为每个字符都有一个数字索引. 比如可以这样(假设):'a' 的索引是13,'我 ...

  7. Ubuntu 16.10 server 相关

    1)安装图形化界面 sudo apt-get install xinit sudo apt-get install gnome 2)启用root账号 ① sudo passwd root ② 修改/e ...

  8. Java Observer接口和Observable类实现观察者模式

    对于观察者模式,其实Java已经为我们提供了已有的接口和类.对于订阅者(Subscribe,观察者)Java为我们提供了一个接口,JDK源码如下: package java.util; public ...

  9. list add对象踩的坑

    list 添加对象时,没有把new object写到循环体里,导致最后添加了相同的一个对象: public List<goods> find(String goodsname) { Lis ...

  10. varchar2长度的意义

    参考:http://www.cnblogs.com/vipcjob/archive/2010/06/08/1754075.html http://www.itpub.net/thread-732714 ...