flutter填坑之旅(有状态组件StatefulWidget)
今天我们来看看flutter的StatefulWidget(有状态组件),最常用就是app 主页的底部导航栏的应用
效果图
首页 |
关于 |
我的 |
statefull-widget-learn .dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:my_first_app/child/widget/about.dart';
import 'package:my_first_app/child/widget/first.dart';
import 'package:my_first_app/child/widget/mine.dart';
///程序入口main
void main() => runApp(StatefullWidgetLearn());
class StatefullWidgetLearn extends StatefulWidget {
@override
_StatefullWidgetLearnState createState() => _StatefullWidgetLearnState();
}
class _StatefullWidgetLearnState extends State<StatefullWidgetLearn> {
// 定义一个变量监听当前激活的ID
int _currentIndex = 0;
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
TextStyle textStyle = TextStyle(fontSize: 20);
return MaterialApp(
title: 'StatefulWidget有状态组件',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('StatefulWidget有状态组件'),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex, // 设置当前激活id等于_currentIndex
onTap: (index) {
// 点击后将当前选中id 赋值给 _currentIndex变量
setState(() {
_currentIndex = index;
});
},
items: [
BottomNavigationBarItem(
icon: Icon(
Icons.home,
color: Colors.grey,
),
activeIcon: Icon(
Icons.home,
color: Colors.blue,
),
title: Text('首页')),
BottomNavigationBarItem(
icon: Icon(
Icons.list,
color: Colors.grey,
),
activeIcon: Icon(
Icons.list,
color: Colors.blue,
),
title: Text('关于')),
BottomNavigationBarItem(
icon: Icon(
Icons.list,
color: Colors.grey,
),
activeIcon: Icon(
Icons.list,
color: Colors.blue,
),
title: Text('我的'))
],
),
body: _currentIndex == 0
? RefreshIndicator(
//RefreshIndicator下拉刷新组件
child: ListView(
///ListView是一个列表组件,然它的子组件
///也是一个Widget
///在dart中万物皆对象
///然而在flutter中处处是组件
///然后再调用first组件,玩过vue的同学应该很了解这个
children: <Widget>[First()],
),
onRefresh: handleRefesh,
)
: _currentIndex == 1
? RefreshIndicator(
child: ListView(
children: <Widget>[About()],
),
onRefresh: handleRefesh,
)
: RefreshIndicator(
child: ListView(
children: <Widget>[Mine()],
),
onRefresh: handleRefesh,
),
),
);
}
Future<Null> handleRefesh() async {
await Future.delayed((Duration(milliseconds: 200)));
}
}
about.dart
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class About extends StatefulWidget {
@override
_AboutState createState() => _AboutState();
}
class _AboutState extends State<About> {
@override
Widget build(BuildContext context) {
TextStyle textStyle = TextStyle(fontSize: 20);
return Container(
decoration: BoxDecoration(color: Colors.white),
alignment: Alignment.center,
child: Column(
children: <Widget>[
Card(
color: Colors.blue,
elevation: 5,
margin: EdgeInsets.all(10),
child: Container(
padding: EdgeInsets.all(10),
child: Text(
'I am card',
style: textStyle,
),
),
),
],
),
);
}
}
mine.dart
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class Mine extends StatefulWidget {
@override
_MineState createState() => _MineState();
}
class _MineState extends State<Mine> {
@override
Widget build(BuildContext context) {
TextStyle textStyle = TextStyle(fontSize: 20);
return Container(
decoration: BoxDecoration(color: Colors.white),
alignment: Alignment.center,
child: Column(
children: <Widget>[
Text('I like the app', style: textStyle),
Icon(Icons.android, size: 50, color: Colors.red),
],
),
);
}
}
first.dart
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
class First extends StatefulWidget {
@override
_FirstState createState() => _FirstState();
}
class _FirstState extends State<First> {
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(color: Colors.white),
alignment: Alignment.center,
child: Column(
children: <Widget>[
Container(
height: 100,
margin: EdgeInsets.only(top: 10),
decoration: BoxDecoration(color: Colors.lightBlueAccent),
child: PageView(
children: <Widget>[
_item('page1', Colors.deepPurple),
_item('page2', Colors.green),
_item('page3', Colors.red)
],
),
)
],
),
);
}
_item(String title, Color color) {
return Container(
alignment: Alignment.center,
decoration: BoxDecoration(color: color),
child: Text(
title,
style: TextStyle(fontSize: 22, color: Colors.white),
),
);
}
}
flutter填坑之旅(有状态组件StatefulWidget)的更多相关文章
- React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- 使用vue开发微信公众号下SPA站点的填坑之旅
原文发表于本人博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅.作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^ ...
- stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED
转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...
- bootstrap-table填坑之旅<一>认识bootstrap-table
应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...
- React Native填坑之旅--Flow篇(番外)
flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...
- https填坑之旅
Boss说,我们买了个权威证书,不如做全站式的https吧,让用户打开主页就能看到受信任的绿标.于是我们就开始了填坑之旅. [只上主域好不好?] 不好...console会报出一大堆warning因为 ...
- React Native填坑之旅--Stateless组件
Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...
- React Native填坑之旅--Button篇
从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...
- React Native填坑之旅--重新认识RN
如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...
随机推荐
- InstructPix2Pix: 动动嘴皮子,超越PS
摘要:InstructPix2Pix提出了一种使用文本编辑图像的方法:给定输入图像和编辑指令,告诉模型要做什么,模型将遵循这些指令来编辑图像. 本文分享自华为云社区<InstructPix2Pi ...
- [网鼎杯 2018]Fakebook
1.解题过程 1.sql注入 访问web页面有一个login和join 是一种行为型设计模式,也叫职责链模式.命令链模式.这种模式为请求创建了一个接收者对象的链,允许你将请求沿着处理者链进行 ...
- ES5新增数组常见方法(indexof/forEach/map/filter)
新增的数组常见方法:以下说明中,红色为必选参数,蓝色为可选参数 1.indexOf(data,start); 用于返回某个数组或者字符串中规定字符或者字符串的位置: var arr = [" ...
- 在k8s(kubernetes)上安装 ingress V1.1.3
介绍 Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由.流量路由由 Ingress 资源上定义的规则控制. 下面是一个将所有流量都发送到同一 Service 的简单 In ...
- 升级:Logical Upgrade升级MySQL5.6.26
升级需谨慎,事前先备份 MySQL升级的实质是对数据字典的升级,数据字典有:sys.mysql.information_schema.performance_schema . MySQL升级的两种方式 ...
- VMware另一个程序锁定文件的一部分,进程无法访问
问题描述:搭建RAC11g,在做共享磁盘的时候,节点2要共享节点1的磁盘,但是有一个问题,节点2关机之后,再打开,是有一个访问节点1的磁盘的过程,如果访问失败,就会开不了机器 rac1加的三个磁盘: ...
- flume基本安装与使用
解压flume包 到/usr/local/src/目录下 [root@hadoopha01 pack]# tar -zxvf apache-flume-1.7.0-bin.tar.gz -C /usr ...
- 【Vue】Vuex
Vuex简介 概念: 专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中管理(读.写),也是一种适用于任意组件间的通信方式. 什么时候用Vuex ①多个 ...
首页
关于
我的