上一篇文章介绍了Dart的语法的基本使用,从这篇文章开始,开发一个基于玩Android网站的app。使用的他们开放的api来获取网站数据。

根据网站的结构,我们app最外层框架需要添加一个底部导航栏,导航栏有5给tab,每个tab对应一个页面,分别是首页,项目,公众号,问答,我的等5个模块。

在Android中,如果要实现这样的UI框架,有很多中实现方式,常用的就是一个Activity里面配合多个fragment来实现。但是在Flutter中并没有activityfragment的组件。

Flutter中没有页面的概念,只有widgetwidget不仅可以用来表示控件,也可以用来表示一个页面。

如果我们想新建一个flutter项目的页面,只需要继承widget的子类StatefulWidget或者StatelessWidget,其中StatefulWidget是有状态的,StatelessWidget是无状态的,什么叫有状态和无状态呢?

有状态可以理解为页面有控件更新,无状态可以理解为页面不需要数据更新,即静态页面。

一般大部分情况下,我们的项目中的页面基本都会需要调用请求来更新页面,所以大部分情况可以直接继承StatefulWidget来实现一个页面。

在AndroidStudio新建一个Flutter项目,File -> New Flutter Project -> Flutter Application ,填上工程名称就可以新建一个Flutter项目。

1.新建一个main_page_widget.dart文件,在文件中新建名称为MainPageWidget 继承 StatefulWidget的类当作app的首页,重写 createState的方法。在MainPageWidget类下面新建一个MainPageState类 继承自State,重写build方法,上面createState方法返回一个MainPageState对象即可,然后就可以在build方法中返回页面需要的UI控件了。

2.由于我们需要在底部建立一个导航栏控件,在Dart中可以采用TabBar加上TabBarView实现这个功能。

具体代码可以参考下面:

 @override
Widget build(BuildContext context) {
return Scaffold(
body: TabBarView(
children: _renderPage(),
controller: tabController,
//TabBarView 默认支持手势滑动,若要禁止设置 NeverScrollableScrollPhysics
physics: NeverScrollableScrollPhysics(),
),
bottomNavigationBar: Material(
color: Colors.blue,
child: TabBar(
controller: tabController,
indicator: UnderlineTabIndicator(
borderSide: BorderSide(style: BorderStyle.none)),
tabs: icons),
),
);
}

Scaffold 控件中包含一个页面所需要的3部分,appBar,bady,bottomNavigationBar等。一般我们新建页面的时候,根widget都会使用Scaffold。可以将Scaffold理解为页面的骨架,我们使用它可以很容易地拼装出一个完整的页面。

Flutter学习三之搭建一个简单的项目框架的更多相关文章

  1. Golang学习-第二篇 搭建一个简单的Go Web服务器

    序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...

  2. 搭建一个简单的springMVC框架

    //新建一个简单的maven项目,选择war包 //web.xml配置 <?xml version="1.0" encoding="UTF-8"?> ...

  3. Vue学习——使用vue-cli搭建一个简单的本地vue项目

    前提 安装好node.js.npm.vue-cli.为什么要先安装这些,建议查看https://www.cnblogs.com/jixue/p/10673875.html,这个对于vue-cli理解很 ...

  4. 搭建一个简单的mybatis框架

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. 搭建一个简单的Struts2框架

    1  创建一个web项目. 2 导入必要的JAR文件. 放在WEB-INF下lib包里. 3 添加web.xml配置,添加启动配置. <?xml version="1.0" ...

  6. Prism for WPF 搭建一个简单的模块化开发框架(三) 给TreeView加样式做成菜单

    原文:Prism for WPF 搭建一个简单的模块化开发框架(三) 给TreeView加样式做成菜单 昨天晚上把TreeView的样式做了一下,今天给TreeView绑了数据,实现了切换页面功能 上 ...

  7. 【netty】(2)---搭建一个简单服务器

    netty(2)---搭建一个简单服务器 说明:本篇博客是基于学习慕课网有关视频教学.效果:当用户访问:localhost:8088 后 服务器返回 "hello netty"; ...

  8. 用express搭建一个简单的博客系统

    转自:https://blog.csdn.net/qq_29721837/article/details/62055603 Express 简介 Express 是一个简洁而灵活的 node.js W ...

  9. 初学Node(六)搭建一个简单的服务器

    搭建一个简单的服务器 通过下面的代码可以搭建一个简单的服务器: var http = require("http"); http.createServer(function(req ...

随机推荐

  1. 使用client-go自定义开发Kubernetes

    参考链接:使用client-go自定义开发Kubernetes 1.本地运行 apiserver demo [root@wangjq demo]# apiserver-boot run local / ...

  2. src rpm 下载地址

    drbd: http://mirror.rackspace.com/elrepo/elrepo/el7/SRPMS/ rabbitmq: https://dl.bintray.com/rabbitmq ...

  3. 对于CSS里面我之前不太清楚的伪类,我做一些总结

    格式: 标签 + : + 参数 +{ 可填背景颜色,字体颜色,鼠标样式,加粗等 } a:hover{ color:#f40;} :link表示鼠标点击之前的样式 :hover表示鼠标放上去的样式 :a ...

  4. CSS动画实例:行星和卫星

    设页面中有<div class=" planet "></div>,用来绘制一个行星和卫星图形.这个图形包括三部分:行星.卫星和卫星旋转的轨道.定义. pl ...

  5. anaconda3 安装pip3

    事先安装了anaconda3版本,此时想要安装pip3,需要: https://bootstrap.pypa.io/get-pip.py 打开链接,将文本存到本地,命名为get_pip.py. 然后通 ...

  6. DNSPod 修改NS 服务器?

    其实我几乎没在国内注册过域名,更没想过用国内的DNS 服务,DNSPod 也是属于听说过名字的地步而已,但是正好在腾讯云注册了一个cn 域名,又觉得对DNSPod 的DNS 服务不是特别满意,所以想把 ...

  7. Windows Server 2012 两台服务器文件同步

    下载cwRsyncServer软件安装(这是Windows下的文件同步软件) 一.(1)在文件客户端服务器安装该软件,找到安装位置下的rsyncd.conf,修改配置文件(注意在Windows下输入位 ...

  8. influxDB初步学习

    influxdb的安装等操作在我的文章. 首先得装influxdb,其次操作如下. application.properties spring.datasource.test1.jdbc-url=jd ...

  9. laya资源版本管理

    layaair-cmd https://ldc.layabox.com/doc/?nav=zh-as-3-4-2 Laya的版本管理 https://blog.csdn.net/qq_43287088 ...

  10. Combine 框架,从0到1 —— 4.在 Combine 中使用通知

      本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 -- 4.在 Combine 中使用通知.   内容概览 前言 让通知处理代码使用 Combine 总结 ...