今天我们来看看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)的更多相关文章

  1. React Native填坑之旅--与Native通信之iOS篇

    终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...

  2. React Native填坑之旅--布局篇

    代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...

  3. 使用vue开发微信公众号下SPA站点的填坑之旅

    原文发表于本人博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅.作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^ ...

  4. stm32填坑之旅 - stm32f103c8t6点亮板载贴片蓝色LED

    转载请注明:https://www.cnblogs.com/rockyf/p/11691622.html 开篇 开篇一定要精彩,不然路人不理睬!下述是笔者作为arm小白的填坑之旅 没错,这个之前一直从 ...

  5. bootstrap-table填坑之旅<一>认识bootstrap-table

    应公司需求,改版公司ERP的数据显示样式.由于前期开发的样式是bootstrap,所以选bootstrap-table理所当然(也是因为看了bootstrap-table官网的example功能强大, ...

  6. React Native填坑之旅--Flow篇(番外)

    flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...

  7. https填坑之旅

    Boss说,我们买了个权威证书,不如做全站式的https吧,让用户打开主页就能看到受信任的绿标.于是我们就开始了填坑之旅. [只上主域好不好?] 不好...console会报出一大堆warning因为 ...

  8. React Native填坑之旅--Stateless组件

    Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...

  9. React Native填坑之旅--Button篇

    从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...

  10. React Native填坑之旅--重新认识RN

    如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...

随机推荐

  1. progress监视linux命令进程

    progress监视linux命令进程 可以查看哪些命令进程 cp mv tar dd gzip cat grep 如何在ubuntu安装 sudo apt install progress 使用方法 ...

  2. 声网传输层协议 AUT 的总结与展望丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网大后端传输协议负责人 夏天. 针对实时互动应用对网络传输带来的新需求和新挑战,声网通过将实时互动中的应用层业务需求与传输策略的分层和解耦,于 ...

  3. 配置 RSTP

    实验1-5-2 配置 RSTP [实验名称] 配置 RSTP. [实验目的] 理解快速生成树协议 RSTP 的配置及原理. [背景描述] 某学校为了开展计算机教学和网络办公,建立了一个计算机教室和一个 ...

  4. 恰好经过k条边的最短路

    需要用到离散数学中关于关系矩阵的运算的知识 一个表示一个图中任意两点间经过2条边最短路的关系矩阵的平方表示的是任意两点间经过4条边的最短路的关系矩阵 原因在于当我们选定中间点时,路径的前半部分和后半部 ...

  5. java创建线程的方式有几种?

    java中创建线程的方式有多少种,这个问题也是众多纷纭,这个时候更应该参考官方文档(https://docs.oracle.com/javase/8/docs/api/java/lang/Thread ...

  6. 权限RBAC、RBAC0 、RBAC1、RBAC2

    https://zhuanlan.zhihu.com/p/34608415 权限系统的基本构成 权限系统主要由三个要素构成:帐号,角色,权限. 帐号是登录系统的唯一身份识别,一个账号代表一个用户.由自 ...

  7. flak_login用法

    基础的信息和全局配置这里就不多说,需要用到再斟酌也可以的.这里也是针对每个模块较为常用的进行解释说明,后期再使用过程中遇到会进行补充. Login_Manager LoginManager是一个类,有 ...

  8. windows安装telnet命令

    1.打开控制面板 2.点击程序和功能 3.点击打开或关闭windows功能 4.等候一分钟左右 5.勾选telnet选项 6.测试telnet 7.如果通的话,弹出telnet窗口,按住"C ...

  9. Python常见面试题017: Python中是否可以获取类的所有实例

    017. Python中是否可以获取类的所有实例 转载请注明出处,https://www.cnblogs.com/wuxianfeng023 出处 https://docs.python.org/zh ...

  10. 全新跨平台版本.NET敏捷开发框架-RDIFramework.NET5.0震撼发布

    RDIFramework.NET,基于全新.NET Framework与.NET Core的快速信息化系统敏捷开发.整合框架,给用户和开发者最佳的.Net框架部署方案.为企业快速构建跨平台.企业级的应 ...