上一篇文章介绍了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. postman with xdebug

    Set the url with ?XDEBUG_SESSION_START=PHPSTORM and set a header Cookie: XDEBUG_SESSION=PHPSTORM

  2. eclipse git如何切换分支,拉取代码,合并代码,解决冲突等

    (如果想看eclipse拉取git项目,移步到我上一篇文章)以下步骤是eclipse运用git的切换分支,拉取合并代码的基本操作: 1.切换远程分支:鼠标右键项目--team--switch to - ...

  3. golang multiconfig 示例

    参考资料:https://github.com/koding/multiconfig 测试代码: package main import ( "fmt" "github. ...

  4. 团队作业4:第五篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...

  5. WebApi之DOM的基本介绍

    1.1.1 什么是DOM ​ 文档对象模型(Document Object Model,简称DOM),是 W3C 组织推荐的处理可扩展标记语言(html或者xhtml)的标准编程接口. ​ W3C 已 ...

  6. Netty源码分析之ByteBuf(一)—ByteBuf中API及类型概述

    ByteBuf是Netty中主要的数据容器与操作工具,也是Netty内存管理优化的具体实现,本章我们先从整体上对ByteBuf进行一个概述: AbstractByteBuf是整个ByteBuf的框架类 ...

  7. ES5和ES6的继承对比

    ES5的继承实现,这里以最佳实践:寄生组合式继承方式来实现.(为什么是最佳实践,前面有随笔讲过了,可以参考) function Super(name) { this.name = name; } Su ...

  8. Python超级码力在线编程大赛初赛题解

    P1 三角魔法 描述小栖必须在一个三角形中才能施展魔法,现在他知道自己的坐标和三个点的坐标,他想知道他能否施展魔法 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后, ...

  9. Matlab摄像头视频基本处理

    一.读取摄像头 1.首先保证摄像头及其驱动正确在电脑上安装 2.简单的代码显示驱动摄像头,并显示: vid = videoinput('winvideo',1); preview(vid); 3.默认 ...

  10. <init>与<clinit>,static与final与static final

    <init>和<clinit> init是对象构造器方法,初始化对象的时候执行 clinit是类构造器方法,类加载的初始化阶段执行 final常量赋值(必须是一下其中一种) 显 ...