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

相关推荐
GISer_Jing3 小时前
AI原生全栈架构理论体系:从分布式范式演进到全链路工程化理论基石
前端·人工智能·学习·ai编程
babe小鑫3 小时前
零经验转行学习数据分析的价值分析
学习·数据挖掘·数据分析
zhangrelay4 小时前
三分钟云课实践速通--单片机原理与应用--Arduino--SimulIDE--
linux·单片机·嵌入式硬件·学习·ubuntu
格林威4 小时前
工业视觉检测:单样本学习 vs 传统监督学习
人工智能·深度学习·数码相机·学习·计算机视觉·视觉检测·工业相机
vooy pktc4 小时前
Spring Security 官网文档学习
java·学习·spring
TechMix4 小时前
【fkw学习笔记】Android 13 AOSP 源码添加系统预置应用实战指南
android·笔记·学习
maaath4 小时前
【maaath】Flutter for OpenHarmony 闹钟时钟应用开发实战
flutter·华为·harmonyos
maaath4 小时前
【maaath】Flutter for OpenHarmony 短信管理应用实战
flutter·华为·harmonyos
承渊政道4 小时前
【动态规划算法】(两个数组的DP问题深度剖析与求解方法)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
bendandawugui4 小时前
PCIe协议学习-浅谈SR-IOV
学习