Flutter学习-10- Flutter学习之StatefulWidget

199 阅读1分钟

「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」。

  • 我们在学习flutter中知道flutter页面渲染是通过不断替换原有的组件,用新的组件进行替换,而不是在原有基础上更改,那么对于某些组件或者我们要实现一些功能要记录我们要的数据,比如我们的输入框输入状态等。

1. stateful展示

我们使用快捷键stf

image.png 通过复写 createState()控制组件的状态,

class _statefulDemoState extends State<statefulDemo> {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

状态管理者,我们代码写在里面,我们创建flutter工程时候就是有默认的

class _statefulDemoState extends State<statefulDemo> {
  int count = 0;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.white,
        appBar: AppBar(
          title: const Text('StatefulDemo'),

        ),
        body: Center(
          child: Chip(
            label: Text('$count'),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: () {

          }),
      ),
    );
  }
}

我们定义countChip组件类似label,默认是圆形,floatingActionButton组件是悬浮按钮,

image.png 我们点击增加count,实现按钮的点击事件,通过setState实现

onPressed: () {

  setState(() {
    count++;
  });

}),

这样我们组件会刷新所有有关count的组件

image.png

2. listView展示

我们定义一个数组存放我们的数据

class listDemo extends StatelessWidget {

  List datas = ['金樽清酒斗十千,玉盘珍羞直万钱,\n',
      '停杯投箸不能食,拔剑四顾心茫然.\n',
      '欲渡黄河冰塞川,将登太行雪满山.\n',
      '闲来垂钓碧溪上,忽复乘舟梦日边.\n',
      '行路难!行路难!多歧路,今安在?\n',
      '长风破浪会有时,直挂云帆济沧海.\n'];

  @override
  Widget build(BuildContext context) {

    return ListView.builder(
      padding: EdgeInsets.all(70),


      itemBuilder:
    (BuildContext context, int index){

      return Text(datas[index]);
    },
      itemCount: count,
    );


  }
}

itemCount关联我们的listView,我们修改count的时候这样就会刷新所有count的widget

image.png

我们点击的时候刷新listview的count,也是动态变化我的体现。

image.png

List datas = [
    '第${count-1}行诗\n',
    '金樽清酒斗十千,玉盘珍羞直万钱,\n',
    '停杯投箸不能食,拔剑四顾心茫然.\n',
    '欲渡黄河冰塞川,将登太行雪满山.\n',
    '闲来垂钓碧溪上,忽复乘舟梦日边.\n',
    '行路难!行路难!多歧路,今安在?\n',
    '长风破浪会有时,直挂云帆济沧海.\n'];

我们添加个标题在数组中,这样明显一点,同时文本居中显示

Widget build(BuildContext context) {

  return ListView.builder(
    padding: EdgeInsets.all(70),


    itemBuilder:
  (BuildContext context, int index){

    return Text(datas[index],
      textAlign: TextAlign.center,
    );
  },
    itemCount: count,
  );


}

image.png

image.png

image.png

以上就是一个简单的例子,说明statefulflutter中的表现,后面的学习我们在根据例子详细说明。