安装配置
安装配置就不说了,直接看官网就完事了。dart语法也很简单,可以去b站或者官网学习一下
安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter
Widgets是什么?
官网描述:Flutter 从 React 中吸取灵感,通过现代化框架创建出精美的组件。它的核心思想是用 widget 来构建你的 UI 界面。 Widget 描述了在当前的配置和状态下视图所应该呈现的样子。当 widget 的状态改变时,它会重新构建其描述(展示的 UI),框架则会对比前后变化的不同,以确定底层渲染树从一个状态转换到下一个状态所需的最小更改。
我们可以理解为widgets就是一个控件,个人理解flutter是基于嵌套的系统。纸上得来终觉浅,code码上。
创建一个center居中的text控件并,赋值和方向 `
//导包
import 'package:flutter/material.dart';
void main() {
//执行主函数代码
runApp(const Center(
//child代表一个组件 创建了text,并给与了值和方向属性
child: Text(
'Hello world',
textDirection: TextDirection.ltr,
),
));
`
界面控件StatelessWidget和StatefulWidget
这两个组件代表两种属性的组件,我们flutter中基本都使用这两种属性的组件创建对象。
- statelesswidget代表静态的,就是内容没有变化的,就用它当父类
- StatefulWidge代表动态的,内容有变化的,比如textview、img啊 等等就是它的内容的值是可以变化的
我们代码中可以使用快捷键快速创建,十分方便。
StatelessWidget 或 StatefulWidget
首先看看我们要构建的界面。
看下我们的代码。
说下我么你的思路,首先在main函数中我们创建一个materialapp的控件,material属性,学过android的就不多说了。可以理解为官方的属性的东西。
- main() 创建了material页面 title是我的app,home就是主内容,创建名为Myscaffold的静态控件
- Myscaffold继承statelesswidget静态控件,build中创建了两个孩子,自定义的appbar和文本控件
- Myappbar中我们通过设置两个iconbutton和一个title
就完成了界面看代码很多,实际写起来很简单
void main() {
runApp(
const MaterialApp(
title: '我的app',
home: SafeArea(
child: MyScaffold()),
)
);
}
class MyScaffold extends StatelessWidget {
const MyScaffold({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Material(
// Column is a vertical, linear layout.
child: Column(
children: [
MyAppBar(
title: Text(
'示例文本控件',
style: Theme.of(
context
).primaryTextTheme.titleLarge,
),
),
const Expanded(child:
Center(
child: Text("您好,欢迎来到flutter"),
)
)
],
),
);
}
}
class MyAppBar extends StatelessWidget {
const MyAppBar({required this.title, super.key});
//创建一个title控件
final Widget title ;
//生命周期稍后介绍,build中就是构建界面
@override
Widget build(BuildContext context) {
// Container widget 可以用来创建一个可见的矩形元素。
// Container 可以使用 BoxDecoration 来进行装饰,如背景,边框,或阴影等。
// Container 还可以设置外边距、内边距和尺寸的约束条件等。
// 另外,Container可以使用矩阵在三维空间进行转换。
//这里就是我们要展示的东西
//flutter通过代码创建布局
return Container(
height: 56.0,
padding: EdgeInsets.symmetric(horizontal: 8.0),
decoration: BoxDecoration(color: Colors.blue[500]),
//创建子布局
child: Row(
//代表有多个子布局
children: [
//创建icon按钮
IconButton(
onPressed: () {
if (kDebugMode) {
print("Navigation button被点击了");
}
}, tooltip: 'Navigation menu',icon: const Icon(Icons.menu))
,
Expanded(child: title)
,
//创建icon按钮
IconButton(onPressed: (){
if (kDebugMode) {
print("Search button被点击了");
}
}, tooltip: 'Search',icon: const Icon(Icons.search)),
],
),
);
}
}
2.使用官方的appbar创建界面
void main() {
runApp(
const MaterialApp(
title: 'flutter Tutorial',
home: TutorialHome(),
)
);
}
class TutorialHome extends StatelessWidget {
const TutorialHome({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: const IconButton(
icon: Icon(Icons.menu),
tooltip: 'navigation menu',
onPressed: null,
),
title: const Text('示例标题'),
actions: const [
IconButton(
onPressed: null,
icon: Icon(Icons.search),
tooltip: 'Search',)
],
),
body: const Center(
child: Text('您好,世界')
),
floatingActionButton: const FloatingActionButton(onPressed: null,
tooltip: 'Add',
child: Icon(Icons.add),),
);
}
}
手势的处理
代码很简单,main中创建了布局,自定义的mybutton,创建了gesturedetector对象,中创建布局圆角、边距等属性
void main() {
runApp(
const MaterialApp(
home: Scaffold(
body:
Center(
child: MyButton(),
),
),
)
);
}
class MyButton extends StatelessWidget {
const MyButton({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
print('我的按钮被敲击了');
},
child: Container(
height: 50.0,
margin: const EdgeInsets.symmetric(horizontal: 8.0),
padding: const EdgeInsets.all(8.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5.0)
,
color: Colors.lightGreen[500]
),
child: const Center(
child: Text("适应"),
),
),
);
}
简单的布局就到这里。要学flutter还是要多练习,熟悉他的语法,控件,实际上写起来还是很快上手的。