Flutter入门(一)
Flutter的sdk地址https://flutter.dev/docs/development/tools/sdk/releases
如果网络不能翻墙,只需要在环境变量里增加如下
FLUTTER_STORAGE_BASE_URL: https://storage.flutter-io.cn
PUB_HOSTED_URL: https://pub.flutter-io.cn
新建flutter工程后还要在当前窗口重新导入下面的android目录
如果编译过程中报错Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier(),就是gradle版本过高或as版本过低导致的
第一次编译没有成功,把工程删掉新建一个,又可以了
如果用vscode运行flutter工程,在终端运行flutter run命令,r键是热加载;p键显示网格;o键切换android和ios模式;q键退出调试模式
注:
下面每个demo的启动代码都一样
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter Demo')),
body: HomeContent(),
),
theme: ThemeData(primaryColor: Colors.yellow),
);
}
}
下面每个demo只贴上HomeContent的内容
* demo1
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Text(
'你好 Flutter',
textDirection: TextDirection.ltr,
style: TextStyle(fontSize: 40.0, color: Colors.yellow),
),
);
}
}
效果图

* demo2
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
child: Text(
'我是一个文本我是一个文本我是一个文本我是一个文本我是一个文本我是一个文本我是一个文本',
textAlign: TextAlign.left,
overflow: TextOverflow.ellipsis,
maxLines: 2,
textScaleFactor: 2,
style: TextStyle(
fontSize: 16.0,
color: Colors.red,
fontWeight: FontWeight.w800,
fontStyle: FontStyle.italic,
decoration: TextDecoration.lineThrough,
decorationColor: Colors.white,
decorationStyle: TextDecorationStyle.dashed,
letterSpacing: 2.0),
),
height: 300.0,
width: 300.0,
decoration: BoxDecoration(
color: Colors.yellow,
border: Border.all(
color: Colors.blue,
width: 2.0,
),
borderRadius: BorderRadius.all(Radius.circular(8.0))),
padding: EdgeInsets.fromLTRB(10, 30, 5, 0),
margin: EdgeInsets.all(20),
// transform: Matrix4.rotationZ(-0.3),
// alignment: Alignment.bottomCenter,
),
);
}
}
效果图

* 图片demo
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
child: Image.network(
'http://a.hiphotos.baidu.com/image/pic/item/9a504fc2d5628535bdaac29e9aef76c6a6ef63c2.jpg',
alignment: Alignment.topCenter,
color: Colors.blue,
colorBlendMode: BlendMode.screen, //混合颜色
fit: BoxFit.fill, //一般用cover
),
width: 300,
height: 300,
decoration: BoxDecoration(
color: Colors.yellow,
),
),
);
}
}
效果图

* 圆形图片
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
child: ClipOval(
child: Image.network(
"http://a.hiphotos.baidu.com/image/pic/item/9a504fc2d5628535bdaac29e9aef76c6a6ef63c2.jpg",
width: 300,
height: 300,
fit: BoxFit.cover,
),
),
),
);
}
}
效果图

* 加载本地图片有点复杂
首先增加本地图片

配置pubspec.yaml
flutter: # The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
assets:
- images/001.jpg
- images/2.0x/001.jpg
- images/3.0x/001.jpg
- images/4.0x/001.jpg
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return Center(
child: Container(
child: Image.asset(
"images/001.jpg",
fit: BoxFit.cover,
),
width: 300,
height: 300,
decoration: BoxDecoration(
color: Colors.yellow,
),
),
);
}
}
效果图

* 列表
class HomeContent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
padding: EdgeInsets.all(10),
children: <Widget>[
ListTile(
leading: Image.network("https://www.itying.com/images/flutter/1.png"),
title: Text('标题1'),
subtitle: Text('二级标题'),
trailing: Icon(
Icons.settings,
color: Colors.yellow,
size: 40,
),
),
ListTile(
leading: Image.network("https://www.itying.com/images/flutter/2.png"),
title: Text('标题2'),
subtitle: Text('二级标题'),
trailing: Icon(
Icons.settings,
color: Colors.yellow,
size: 40,
),
),
ListTile(
leading: Image.network("https://www.itying.com/images/flutter/3.png"),
title: Text('标题3'),
subtitle: Text('二级标题'),
trailing: Icon(
Icons.settings,
color: Colors.yellow,
size: 40,
),
),
],
);
}
}
效果图

Container相当于JS的div,可以多层嵌套
* 动态列表
class HomeContent extends StatelessWidget {
//自定义方法
List<Widget> _getData() {
List<Widget> list = new List();
for (var i = 0; i < 20; i++) {
list.add(ListTile(title: Text("我是$i列表")));
}
return list.toList();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getData(),
);
}
}
效果图

* 动态列表2
listData.dart
List listData = [
{
"title": 'one',
"author": 'one',
"imageUrl": 'https://www.itying.com/images/flutter/1.png',
},
{
"title": 'two',
"author": 'two',
"imageUrl": 'https://www.itying.com/images/flutter/2.png',
},
{
"title": 'three',
"author": 'three',
"imageUrl": 'https://www.itying.com/images/flutter/3.png',
},
{
"title": 'four',
"author": 'four',
"imageUrl": 'https://www.itying.com/images/flutter/4.png',
},
];
import 'res/listData.dart';
class HomeContent extends StatelessWidget {
//自定义方法
List<Widget> _getData() {
var tempList = listData.map((value) {
return ListTile(
leading: Image.network(value["imageUrl"]),
title: Text(value["title"]),
subtitle: Text(value["author"]),
);
});
return tempList.toList();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: this._getData(),
);
}
}
效果图

* 类似android的adapter
class HomeContent extends StatelessWidget {
List list = new List();
HomeContent() {
for (var i = 0; i < 20; i++) {
this.list.add("我是第$i条数据");
}
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView.builder(
itemCount: this.list.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(this.list[index]),
);
},
);
}
}
优化
import 'res/listData.dart';
class HomeContent extends StatelessWidget {
Widget _getListData(context, index) {
return ListTile(
leading: Image.network(listData[index]["imageUrl"]),
title: Text(listData[index]["title"]),
subtitle: Text(listData[index]["author"]),
);
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView.builder(
itemCount: listData.length, itemBuilder: this._getListData);
}
}
欢迎关注我的微信公众号:安卓圈

Flutter入门(一)的更多相关文章
- Flutter入门之有状态组件
StatefulComponent使用方法入门 在上一篇Flutter入门之无状态组件中我们讲到了无状态组件,所谓的无状态组件指的就是其内部的状态是来自其父组件并使用final类型的变量来存储,当组件 ...
- flutter入门开发的一些坑
flutter入门开发的一些坑 很久没写博客了,最近在准备物联网比赛,顺便抽出时间学习了一下flutter,花了近2周完成了一个查看博客博文的一个小的APPdemo,随便截了两张图,如下: 首页 博客 ...
- flutter 入门(Mac)
背景 近一年时间都在用 React Native 开发公司的 APP,水平基本上可以说是登堂入室了.前一段时间兴起一阵 Flutter 热,后端的同事都有推荐,今年 Google 大会又推出 flut ...
- Flutter入门教程(四)第一个flutter项目解析
一.创建一个Flutter工程 1.1 命令行创建 首先我们找一个空目录用来专门存放flutter项目,然后在路径中直接输入cmd: 使用 flutter create <projectname ...
- Flutter入门教程(一)Flutter简介
这是Flutter系列第一篇文章,后续会持续更新Flutter相关知识,本篇就主要对于Flutter技术做一个简单的入门介绍 一.Flutter简介 Flutter是谷歌的移动UI框架,可以快速在iO ...
- Flutter入门之无状态组件
Flutter核心理念 flutter组件采用函数式响应框架构建,它的灵感来自于React.它设计的核心思想是组件外构建UI,简单解释一下就是组件鉴于它当前的配置和状态来描述它的视图应该是怎样的,当组 ...
- Flutter入门
1.安装SDK 官网下载其最新可用的安装包并解压. 设置环境变量:在.bash_profile文件中写入export PATH=/Users/malk/Documents/flutter/bin:$P ...
- 谷歌移动UI框架Flutter入门
引言 作为Android开发人员,很有必要学习一下Flutter,那么Flutter是什么呢?它到底有什么作用呢?我们一一来揭晓. Flutter是谷歌的移动UI框架,可以快速在iOS和Android ...
- Flutter入门(二)
* 网格布局 class HomeContent extends StatelessWidget { List<Widget> _getListData() { var tempList ...
随机推荐
- Xshell 配置密钥
- vue项目中使用vue-layer弹框插件
vue-layer弹框插件 安装 npm i --save vue-layer 引用 import layer from 'vue-layer' Vue.prototype.$layer = lay ...
- SSM项目day4 Oracle批量插入数据bug <foreach>标签中collection属性使用的是属性名
- 函数中,对形参做不加var的全局溢出赋值,可改变形参所指向的实参的本身值
var formateNumArr = function(arr,defaultVal){ var a = []; $.each(arr,function(i,v){ ...
- 使用VSCode开发Flutter
前言 为什么使用VSCode? flutter官方推荐的编辑器有IDEA/Android Studio和VSCode, 之前开发Flutter用的IDEA, 不过IDEA始终比较重,于是换用VSCod ...
- iOS系统的两个循环
1.事件循环: 2.显示循环:displaylink:系统定时从gpu缓存获取图片信息显示在屏幕.
- ArrayList :货物库存管理(遍历)
package com.oracle.demo01; import java.util.ArrayList; import java.util.Scanner; public class De ...
- SQL进阶-隐式类型转换
一.隐式类型转换 1.隐式类型转换 隐式类型转换: '; 程序可读性差,且依赖数据库的隐式转换规则,如果数据库升级,则程序可能无法正确执行: 有可能会导致索引失效: 有可能会导致意想不到的结果: 显式 ...
- 第01组 Alpha冲刺(1/6)
队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/11845138.html 作业博客: https://edu.cnblogs.com/campus/fz ...
- cocos: 链接错误: _lz_adler32 in liblibquickmac.a
错误: Undefined symbols for architecture x86_64: "_adler32", referenced from: _lz_adler32 in ...