一.状态更新-setstate
●场景:计数器,点击+进行数量+1,点击-进行数量-1,U川视图需要进行相应更新。
●语法:数据的变化要更新Ul视图,需要执行setState方法,setState方法会造成ouild的重新执行。
●案例:实现一个计数器案例
import 'package:flutter/material.dart'; void main(List<String> args) { runApp(pagewidget()); } class pagewidget extends StatefulWidget { pagewidget({Key? key}) : super(key: key); @override _pagewidgetState createState() => _pagewidgetState(); } class _pagewidgetState extends State<pagewidget> { int count = 0; @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: Row( children: [ TextButton( onPressed: () { setState(() { count -= 1; print(count); }); }, child: Text("减"), ), Text(count.toString()), TextButton( onPressed: () { setState(() { count += 1; print(count); }); }, child: Text('加'), ), ], ), ), ), ); } }二.Flutter组件-布局组件
●Flutter提供了丰富强大的布局组件来构建各种用户界面。下面这个表格汇总了最核心的几类布局组件
1.基础容器---container
●定义:Container是功能丰富的布局组件,是一个多功能组合容器
●尺寸控制:可通过多种方式定义大小,有明确优先级规则。
●优先级:明确宽高>constraints约束>父组件约束>自适应组件大小
●装饰系统:通过decoration属性实现视觉效果,但和color属性互斥
●布局控制:提供内外边距和对齐方式
●可选变化:支持绘制时进行矩阵变换,如旋转、倾斜、平移等
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; void main(List<String> args) { runApp(pagewidget()); } class pagewidget extends StatelessWidget { const pagewidget({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Container( transform: Matrix4.rotationZ(0.05), alignment: Alignment.center, margin: EdgeInsets.all(20), width: 200, height: 200, decoration: BoxDecoration( color: Colors.blue, borderRadius: BorderRadius.circular(15), border: Border.all(width: 3, color: CupertinoColors.systemYellow), ), child: Text( 'Hello world!', style: TextStyle(color: Colors.white, fontSize: 20), ), ), ), ); } }三.Flutter组件---居中组件
●Center:将其子组件在父容器的空间内进行水平和垂直方向上的居中排列
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; void main(List<String> args) { runApp(pagewidget()); } class pagewidget extends StatelessWidget { const pagewidget({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text("center代码示例"), centerTitle: true), body: Center( child: Container( width: 100, height: 100, decoration: BoxDecoration(color: Colors.blue), child: Center( child: Text("居中内容", style: TextStyle(color: Colors.white)), ), ), ), ), ); } }●应用场景:
页面内容整体居中,如将一个登录表单或一个加载中的提示图标在页面正中显示
●注意事项:Center:不能设置宽高,Centert的最终大小取决于其父组件传递给它的约束,Center会向它的父组件申请尽
可能大的空间
●实现固定宽高且居中的组件:Center去包裹一个具有固定宽高的子组件。Container/SizeBox