首页 > 其他分享 >前端学习-flutter学习-002-计数器示例学习

前端学习-flutter学习-002-计数器示例学习

时间:2024-07-04 22:41:57浏览次数:11  
标签:widget counter const 示例 title 学习 002 build Flutter

学习参考链接

拆解代码学习

  • Material 是一种标准的移动端和web端的视觉设计语言, Flutter 默认提供了一套丰富的 Material 风格的UI组件。
// 导入了 Material UI 组件库。
import 'package:flutter/material.dart';

  • main 函数为应用程序的入口。main 函数中调用了runApp 方法,它的功能是启动Flutter应用
// void main() {
//   runApp(const MyApp());
// }

void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application. 根组件
  @override
  Widget build(BuildContext context) {
    // MaterialApp 是Material 库中提供的 Flutter APP 框架,通过它可以设置应用的名称、主题、语言、首页及路由列表等
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      //应用首页路由 
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

  • 首页
    • MyHomePage 是应用的首页,它继承自StatefulWidget类,表示它是一个有状态的组件(Stateful widget
    • Stateful widget 可以拥有状态,这些状态在 widget 生命周期中是可以变的,而 Stateless widget 是不可变的
    • Stateful widget 至少由两个类组成:一个StatefulWidget类。一个 State类; StatefulWidget类本身是不变的,但是State类中持有的状态在 widget 生命周期中可能会发生变化。
class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}



  • _MyHomePageState类是MyHomePage类对应的状态类。MyHomePage类中并没有build方法,build方法被挪到了_MyHomePageState

class _MyHomePageState extends State<MyHomePage> {
  // 定义一个 _counter 状态
  int _counter = 0;

  // 当按钮点击时,会调用此函数,该函数的作用是先自增_counter,然后调用setState 方法。
  // setState方法的作用是通知 Flutter 框架,有状态发生了改变,Flutter 框架收到通知后,
  // 会执行 build 方法来根据新的状态重新构建界面
  void _incrementCounter() {
    setState(() {
      // If we changed_counter without calling setState(), then the build method would not be
      // called again, and so nothing would appear to happen.
      _counter++;
    });
  }

  // 构建UI界面的逻辑在 build 方法中,当MyHomePage第一次创建时,
  // _MyHomePageState类会被创建,当初始化完成后,Flutter框架会调用
  // widget 的build方法来构建 widget 树,最终将 widget 树渲染到设备屏幕上
  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    // Scaffold是 Material 库中提供的页面脚手架
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

当右下角的floatingActionButton按钮被点击之后,会调用_incrementCounter方法。在_incrementCounter方法中,首先会自增_counter计数器(状态),然后setState会通知 Flutter 框架状态发生变化,接着,Flutter 框架会调用build方法以新的状态重新构建UI,最终显示在设备屏幕上。

标签:widget,counter,const,示例,title,学习,002,build,Flutter
From: https://www.cnblogs.com/ayubene/p/18276499

相关文章

  • markdown,学习第一天
    markdown学习标题三级标题字体helloworld!helloworld!helloworld!helloworld!helloworld!引用,前面加>狂神牛逼分割线,加“---”,加“***”图片:超链接:英文字符下,这里描述链接[点击到我自己的博客园](屮艸芔茻13-博客园(cnblogs.com))列表,1.加空格。-......
  • 昇思25天学习打卡营第8天|使用静态图加速
            神经网络编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。动态图模式:        该模式类似Python的解释执行方式,一边编译一遍执行。在计算图中定义一个Tensor时,其值就......
  • vim学习笔记——多文件、多窗口编辑
    多文件编辑vimfile1file2...可以同时打开多个文件多文件编辑的按键:n编辑下一个文件:N编辑上一个文件:files列出目前这个vim开启的所有文件多窗口编辑命令模式下输入:sp[filename]即可进入多窗口编辑功能多窗口情况下的按键说明:sp[filename]打开......
  • vim学习笔记——可视区块
    vim的一般模式都是以行为单位进行操作的,可视区块提供了一种以列为操作单位的形式,在处理有特定格式的数据文件的时候效果很好。可视区块的按键含义v字符选择,会将光标经过的字符反白选择V行选择,会将光标经过的行反白选择ctrl+v可视区块,可以用矩形的方式选择字符y......
  • 跟我一起学习和开发动态表单系统-动态表单系统的技术实现与优势(2)
    动态表单系统的技术实现与优势随着业务的发展,企业对信息系统的需求越来越复杂。传统的静态表单无法满足灵活调整和扩展的需求,而动态表单系统能够根据业务场景灵活地调整表单结构,提高开发效率和用户体验。本文将介绍一种基于Vue、ElementUI和SpringBoot+MyBatis的动态表单系统......
  • 跟我一起学习和开发动态表单系统-前端用vue、elementui实现方法(3)
    基于Vue、ElementUI和SpringBoot+MyBatis的动态表单系统前端实现解析在现代企业信息系统中,动态表单是一种非常常见的功能。它可以根据业务需求灵活地调整表单结构,以满足不同的数据收集和展示需求。在本文中,我们将探讨一种基于Vue、ElementUI和SpringBoot+MyBatis......
  • 跟我一起学习和开发动态表单系统-后端用spring boot、mybatis实现方法(4)
     ##动态表单系统:利用SpringBoot和MyBatis实现后端服务在现代企业应用中,表单是数据收集和处理的核心部分。然而,传统的表单系统难以适应快速变化的需求。为了解决这个问题,我们可以使用动态表单系统,它可以根据业务需求灵活地调整表单结构。本文将介绍如何使用SpringBoot和......
  • 跟我一起学习和开发动态表单系统-数据库设计(1)
    在当今的企业信息系统中,动态表单是一种非常常见的功能,它能够根据业务需求灵活地调整表单结构,以满足不同的数据收集和展示需求。而动态表单的核心在于其背后的数据库设计。本文将探讨动态表单的数据库设计方法论,主要包括设计原则、方法以及具体实现方案。一、设计原则1.模块化设......
  • 高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!
    相信关注本号的各位,对于信息学奥赛已经不陌生了,部分同学也已经开始踏入信息学的旅程,但前路茫茫,让我们一起看看已经取得成就的同学的经历吧。今天要介绍的这位同学,是来自深圳中学的高二某班的欧阳达晟同学,他已经通过参加全国青少年信息学奥林匹克竞赛(NOI2023)保送到北京大学图灵......
  • Python学习笔记28:进阶篇(十七)常见标准库使用之质量控制中的代码质量与风格第二部分
    前言本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。根据模块知识,一次讲解单个或者多个模块的内容。教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html质量控制质量控制(QualityControl,QC),主要关注于提高......