Flutter StatefulWidget 有状态组件、页面上绑定数据、改变页面数据

在 Flutter 中自定义组件其实就是一个类,这个类需要继承 StatelessWidget/StatefulWidget。

StatelessWidget 是无状态组件,状态不可变的 widget
StatefulWidget 是有状态组件,持有的状态可能在 widget 生命周期改变。通俗的讲:如果我
们想改变页面中的数据的话这个时候就需要用到 StatefulWidget

import ‘package:flutter/material.dart‘;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:Scaffold(
        appBar: AppBar(
          title: Text(‘Flutter Demo‘)
        ),
        body: HomePage(),
      )
    );
  }
}

class HomePage extends StatelessWidget {
  int countNum=1;
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        SizedBox(height: 200),
        Text("${this.countNum}"),
        SizedBox(height: 20),
        RaisedButton(
          child: Text("按钮"),
          onPressed: (){
              // setState()   //错误写法       没法改变页面里面的数据
          this.countNum++;
              print(this.countNum);
          },
        )
      ],
    );
  }
}


import ‘package:flutter/material.dart‘;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:Scaffold(
        appBar: AppBar(
          title: Text(‘Flutter Demo‘)
        ),
        body: HomePage(),
      )
    );
  }
}

//自定义有状态组件
class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  int countNum=0;
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        SizedBox(height: 200),
        Chip(
          label:Text(‘${this.countNum}‘) ,
        ),
        SizedBox(height: 20),
        RaisedButton(
          child: Text(‘按钮‘),
          onPressed: (){
             setState(() {   //只有有状态组件里面才有
                  this.countNum++;
             });
          },
        )
      ],
    );
  }
}


import ‘package:flutter/material.dart‘;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:Scaffold(
        appBar: AppBar(
          title: Text(‘Flutter Demo‘)
        ),
        body: HomePage(),
      )
    );
  }
}

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {

  List list=new List();
  @override
  Widget build(BuildContext context) {
    return ListView(

      children: <Widget>[
        Column(
          children: this.list.map((value){
            return ListTile(
              title: Text(value),
            );
          }).toList()
        ),
        SizedBox(height: 20),
        RaisedButton(
          child: Text("按钮"),
          onPressed: (){
            setState(() {
                this.list.add(‘新增数据1‘);
                this.list.add(‘新增数据2‘);
            });
          },
        )
      ],
    );
  }
}

原文地址:https://www.cnblogs.com/loaderman/p/11186478.html

时间: 2024-08-29 17:47:26

Flutter StatefulWidget 有状态组件、页面上绑定数据、改变页面数据的相关文章

第四个页面:制作电影资讯页面

笔记内容:第四个页面:制作电影资讯页面 笔记日期:2018-01-18 点击轮播图跳转到文章详情页面 之前的文章列表页面还有一个小功能没有实现,就是点击点击轮播图就能跳转到相应的文章详情页面,这个和点击文章列表跳转到文章详情页面的实现方式是一样的. post.wxml修改轮播图代码如下: <!-- 添加点击事件,这里利用了事件冒泡的机制 --> <swiper catchtap='onSwiperTap' indicator-dots='true' autoplay='true' int

angluar1+ionic详情页返回在原来的位置(缓存数据和页面高度)

因为是老项目,近期开发遇到了个需求就是从详情页按返回按钮要求返回到原来列表的页面位置,刚开始准备用的cache:true,但是存在大大的问题就是新增和编辑后返回数据都不是最新的,无法重新刷新页面reload方法失效了,那肯定是不过关的(如果没有新增和编辑的列表页可以考虑用),想了想改成了强制刷新parent.location.reload,在:$rootScope.$on('$stateChangeSuccess',function(){})监听切换成功和数据保存成功后强制刷新页面,效果是可以了

接口测试-Http状态码-postman上传文件

转自:https://www.cnblogs.com/jiadan/articles/8546015.html 一. 接口   接口:什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口.   系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app.网址这些它在进行数据处理的时候都是通过接口来进行调用的.  

(10 Android)实验项目_Android UI与Activity组件(上)

(10 Android)实验项目_Android UI与Activity组件(上) 一.实验目的 (1) 掌握常用的布局方法. (2) 掌握Activity组件的生命周期. 二.实验内容及步骤 在Android Studio中,新建名为Example3的项目,然后在此项目中完成如下几个模块的设计: 1.掌握各种布局的特点.Android常用控件的使用 (1) 在项目里,新建名为example3_1的模块. (2) 在默认的约束布局里,添加垂直线性布局并内嵌水平线性布局,然后依次添加文本框.下拉列

AngularJS之一个元素上绑定多个指令作用域

前言 众所周知,我们在自定义指令时,会指定它的作用域,即scope设置项(默认值为false). 且,scope设置项,可以有三种值,从而也就代表三种不同的作用域,下面我们再来一起回顾下: 指令之scope scope: false 默认值,指令不会新建一个作用域,使用父级作用域. scope: true 指令会创建一个新的子作用域,原型继承于父级作用域. scope: {…} 指令会新建一个隔离作用域,不会原型继承父作用域. 好了,通过上面,我们很容易知道,在一个元素绑定一个指令,那么仅仅看这

VUE JS 使用组件实现双向绑定

1.VUE 前端简单介绍  VUE JS是一个简洁的双向数据绑定框架,他的性能超过ANGULARJS,原因是实现的机制和ANGULARJS 不同,他在初始化时对数据增加了get和set方法,在数据set时,在数据属性上添加监控,这样数据发生改变时,就会触发他上面的watcher,而ANGULARJS 是使用脏数据检查来实现的. 另外VUEJS 入门比ANGULARJS 简单,中文文档也很齐全. 2.组件实现    在使用vue开发过程中,我们会需要扩展一些组件,在表单中使用,比如一个用户选择器.

Visual Event :快速查看 DOM 上绑定的 JS 事件

http://web.jobbole.com/82503/ Javascript中的事件经常被认为如谜一般不可解.Javascript是一个事件驱动的语言,在这样的前提下前面的看法是很奇怪,但是说到它们的复杂本质和调试难度时,这样的看法又是很正常的.为此,我创建了可视化事件(Visual Event)来查看DOM节点上绑定的事件. 简介 Visual Event是一个开源 Javascript 书签,能提供绑定在DOM元素上的事件调试信息.Visual Event能显示如下信息: 1.哪一个元素

程序员在页面上常犯的错误以及改正方法

我是一个性情乖戾的Web用户,但我想这也帮助促使我成为了一名优秀的Web开发人员.当我看到一个网站上有让人不爽的设计时就会非常的恼怒,一些很简单的东西为什么做不好?下面是5种常见的可用性方面的错误,以及如何纠正这些问题的方法.给自己方便,也与人方便,确保自己不要犯这样的错误. 使用表达submit事件,不要用click事件:请用表单标签form! 我不知道遇到过多少次,当我使用回车键提交一个表单时(或手机上用箭头/输入键),却什么都没发生.我只好又用鼠标点击提交按钮,表单终于有了反应.这是我最痛

android API Guides 之 web app --------------Building Web Apps in WebView(WebView与页面的绑定)

如果你要在手机端实现一个web app或在app里加载一个web页面,那么你就要用到WebView控件.这WebView类是View类的扩展子类,它允许web页面作为应用布局的一部分来展示.它是不具备一个完整的浏览器的那些特性,例如WebView没有导航栏,地址栏等.WebView的默认功能就是去找事WebView. 当你在你的app里面加一些以后可能跟新的信息时(例如用户协议或用户指南),你是用WebView那是非常有帮助的.在你的应用里,你可以创建一个带有WebView的activity,然