使用vscode 創(chuàng)建flutter項(xiàng)目 切換默認(rèn)語(yǔ)言
1.打開vs設(shè)置(User Settings)-擴(kuò)展(Extensions)-Dart&Flutter
2.搜索Android Language 或者 IOSLanguage
3.切換默認(rèn)
image.png
-
搭建一個(gè)簡(jiǎn)單的listview頁(yè)面和一些簡(jiǎn)單交互
image.png
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '奧利給',
home: AoligePage(),
theme: ThemeData(
primaryColor: Colors.white,
),
);
}
}
//創(chuàng)建一個(gè)有狀態(tài)(可交互)的widget(類似于ios中的view)
class AoligePage extends StatefulWidget {
@override
createState() => new AoligePageState();
}
class AoligePageState extends State<AoligePage> {
final _rowsA = ['row1', 'row2', 'row3', 'row4', 'row5'];
final _biggerFont = const TextStyle(fontSize: 18.0);
final _saved = new Set<String>();
//創(chuàng)建一個(gè)返回widget的方法
Widget _buildRows() {
//listview和lisview.build是有區(qū)別的 可以看文檔
return new ListView.builder(
padding: const EdgeInsets.all(10.0),
//類似于ios中的cellforitem:
itemBuilder: (context, i) {
if (i < _rowsA.length) {
return _buildCell(_rowsA[i]);
} else {
return null;
}
},
);
}
//布局ListTile(類似cell) 并返回
Widget _buildCell(String name) {
final isSelect = _saved.contains(name);
return ListTile(
title: new Text(
name,
style: _biggerFont,
),
leading: CircleAvatar(
backgroundImage: NetworkImage(
'http://pics0.baidu.com/feed/9c16fdfaaf51f3deffd9dc4faf994b1a3a29792a.jpeg?token=659fad1a6be6e70c89e63db8c98e41ae&s=1E24C704C263110B1EA6A0F503008022'),
),
trailing: new Icon(
Icons.favorite,
color: isSelect ? Colors.red : null,
),
onTap: () {
setState(() {
//如果使用listview 這里調(diào)用setState就不會(huì)刷新內(nèi)容
if (isSelect) {
_saved.remove(name);
} else {
_saved.add(name);
}
});
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('奧利給'),
actions: <Widget>[
new IconButton(icon: new Icon(Icons.list), onPressed: _push)
],
),
body: _buildRows(),
);
}
void _push() {
Navigator.of(context).push(new MaterialPageRoute(builder: (context) {
final tiles = _saved.map((name) {
return new ListTile(
title: new Text(
name,
style: _biggerFont,
),
);
});
//包裝tiles 每個(gè)tile添加分割線
final divided = ListTile.divideTiles(
context: context,
tiles: tiles,
).toList();
return new Scaffold(
appBar: new AppBar(
title: new Text('收藏夾'),
),
body: new ListView(children: divided),
);
}));
}
}