flutter学习1

1.StatelessWidget与StatefulWidget

StatelessWidget是一种内部数据不需要随数据变化而更新的widget,反之,StatefulWidget是需要随数据变化的

2.Stateless

1.需要重写build方法

Dart 复制代码
class MyPaddingText extends StatelessWidget {
  const MyPaddingText({super.key, required this.text});
  // 构造参数需要final
  final String text;
  // 需要返回一个widget
  @override
  Widget build(BuildContext context) => Padding(
    padding: EdgeInsetsGeometry.all(12),
    child: Text(text),
  );
}

2.fun => result

可以观察上面重写的build方法,他的方法体就是直接return了一个结果

还有一种写法如下

Dart 复制代码
@override
Widget build(BuildContext context) {
  return Padding(
    padding: EdgeInsetsGeometry.all(12),
    child: Text(text),
  );
}

如果使用koltin来理解,就是下面这种写法

Kotlin 复制代码
fun build(context: BuildContext) = Padding(
    padding: EdgeInsetsGeometry.all(12),
    child: Text(text)
)

3.StatefulWidget

从我看这个写法来讲,我觉得是把状态Widget分为了两部分,一部分是直接的普通无状态的数据定义,类似于外部声明一些和Widget无关的属性,另一部分是状态和对应的Widget

直观来讲的话重写这个需要做两件事:

  1. 重写createState返回一个State<StatefunWidget>
  2. 重写要返回的这个state中的build方法返回widget

1.需要重写createState方法

关键是内容当中返回一个State对象

1.State对象的Demo

Dart 复制代码
class MyHomePageState extends State<MyHomePage> {
  // 计数器
  int counter = 0;

  void incrementCounter() {
    setState(() {
      counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    Color barBackgroundColor = Theme.of(context).colorScheme.inversePrimary;
    Text text = Text(widget.title);
    return Scaffold(
      // appBar
      appBar: AppBar(backgroundColor: barBackgroundColor, title: text),
      // 这个是中间的部分
      body: Center(
        child: Column(
          // 枚举类型可以直接.center, 相当于MainAxisAlignment.center
          mainAxisAlignment: .center,
          children: [
            MyPaddingText(text: "这是第一行内容"),
            Text("这是第一行内容"),
            Text("这是第2行内容"),
            Text("这是第3行内容"),
            Text("这是第4行内容"),
            Text("这是第5行内容"),
          ],
        ),
      ),
      // 这个是浮动按钮
      floatingActionButton: FloatingActionButton(
        onPressed: incrementCounter,
        tooltip: '加法浮动按钮',
        child: const Icon(Icons.add),
      ),
    );
  }
}

2.State对象中的注意事项

  1. State对象持有他在继承时,泛型里填写的StatefulWidget类型的对象
  2. 持有的StatefulWidget对象就是调用createState时的那个对象

2.重写State中的build方法

这个build方法返回的值就是这个StatefulWidget真正的要看见的Widget

相关推荐
无熵~5 分钟前
Flutter入门
flutter
云小逸5 分钟前
【nmap源码学习】 Nmap 源码深度解析:nmap_main 函数详解与 NSE 脚本引擎原理
网络协议·学习·安全
hssfscv12 分钟前
Javaweb学习笔记——后端实战8 springboot原理
笔记·后端·学习
苍煜17 分钟前
超简单 poi-tl 学习博客:从0到1掌握Word生成(无需模板+模板填充)
学习·word
hudawei99631 分钟前
要控制动画的widget为什么要with SingleTickerProviderStateMixin
flutter·mixin·with·ticker·动画控制
sensen_kiss32 分钟前
Jupter Notebook 使用教程
大数据·人工智能·python·学习·数据分析
狂奔蜗牛飙车1 小时前
Python学习之路-Python3 迭代器与生成器学习详解
开发语言·python·学习·#python学习笔记·python迭代器生成器
云小逸1 小时前
【Nmap 源码学习】深度解析:main.cc 入口函数详解
网络·windows·学习·nmap
醇氧1 小时前
【Linux】centos 防火墙学习
linux·学习·centos
~光~~1 小时前
【嵌入式linux学习】06_中断子系统
linux·单片机·学习