flutter写一个todoList

  • 邢毅彪
  • 12 Minutes
  • 2018年9月24日

前言

flutter是一个谷歌推出的高性能,跨平台解决方案。目前来看, 其有且只有一个缺点,就是生态还是刚起步。但是随着阿里,腾讯等国内巨头的入局,相信其前景还是比较乐观的。

准备工作

首先请参照flutter官方的文档,安装本地sdk及开发环境, 这里推荐使用IntelliJ IDEA作为ide来开发。

show me the code

  1. 新建一个项目
    在命令长输入
1
flutter create first_flutter
  1. 找到main.dart文件并修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {

@override
Widget build(BuildContext context) {
// final wordPair = new WordPair.random();

return new MaterialApp(
title: 'hello, first flutter',
home: new RandomWord(),
);
}
}

class RandomWordState extends State<RandomWord> {
final List<String> _suggestions = <String>[];
final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);
String _inputVal = '';
final TextEditingController _inputCtrl = new TextEditingController();

Widget _buildSuggestions() {
return new ListView.builder(
padding: const EdgeInsets.all(16.0),
itemBuilder: (BuildContext _context, int i) {
if (i.isOdd) {
return new Divider();
}

final int index = i ~/ 2;
if (index < _suggestions.length) {
return _buildRow(_suggestions[index], index);
}
},
);
}

Widget _buildRow(String pair, int i) {
return new ListTile(
title: new Text(
pair,
style: _biggerFont,
),
onTap: () => _removeSuggesstion(i),
);
}

// 监听输入框改变
_textChange(String val) {
_inputVal = val;
}

// 增加一条消息
_addList() {
setState(() {
_suggestions.add(_inputVal);
});

_inputCtrl.clear();

}

// 删除一条消息
_removeSuggesstion(int i) {
setState(() {
_suggestions.removeAt(i);
});
}

@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new TextField(
controller: _inputCtrl,
onChanged: _textChange,
),
actions: <Widget>[
IconButton(icon: Icon(Icons.add), onPressed: _addList)
],
),
body: _buildSuggestions(),
);
}

}

class RandomWord extends StatefulWidget {
@override
RandomWordState createState() {
return new RandomWordState();
}
}
  1. 其中我们使用flutter的StatefulWidget来实现一个todoList,通过listView来实现一个列表视图,核心思想就是使用setState方法来改变state以使得改变视图,这点和react是一样的。
访问量