CoiCoin Cryto Tracker – 演示产品
这是一个基本的加密货币价格跟踪应用程序,是 2021年Google DevFest HCMC上的演示产品。2021年Google DevFest HCMC是一个关于Flutter的特别培训课程,旨在帮助您提升构建真实应用程序前端的知识。
概述
课程
通过培训课程,DevFest-ers应该能够:
- 熟悉Dart编程语言。
- 了解Flutter中的布局、导航和主题。
- 管理Flutter中的状态
- 构建Flutter应用程序并进行测试。
照片
- Logo
- 应用视图
过程
使用...构建
- Dart
- 来自Flutter Material和Package的颜色、图标、信用卡滑块
- 来自CoinMarketCap的Cryto API
我们学到了什么
完成项目后,我们可以构建一个侧边栏菜单,一个信用卡和一个使用Cryto API实时自动更新的数据。
- 侧边栏菜单
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
children: [
UserAccountsDrawerHeader(
accountName: const Text('DevFestChan'),
accountEmail: const Text('[email protected]'),
currentAccountPicture: CircleAvatar(
child: ClipOval(
child: Image.asset('./assets/doge.jpg'),
)),
),
ListTile(
leading: const Icon(Icons.favorite),
title: const Text('Coi Your Coin'),
ListTile(
leading: const Icon(Icons.money),
title: const Text('Coi Your Card'),
],
));
}
- 信用卡。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Image.asset('assets/coicoin_logo.png', height: 30),
),
body: Container(
alignment: Alignment.center,
padding: const EdgeInsets.fromLTRB(5.0, 40.0, 5.0, 0.0),
child: Column(
children: <Widget>[
Text(
'\$156.89',
style: TextStyle(foreground: Paint()..shader = linearGradient)),
Text(
'Available Balance',
style: TextStyle(foreground: Paint()..shader = linearGradient),
),
const SizedBox(height: 50),
Transform.scale(
scale: 1.2,
child: CreditCard(
cardBackground:
ImageCardBackground(const AssetImage('assets/card_bg.png')),
cardNetworkType: CardNetworkType.visa,
cardHolderName: 'DevFest HCMC',
cardNumber: '4716085933146241',
company: CardCompany.americanExpress,
validity: Validity(validThruMonth: 8, validThruYear: 2025),
),
),
],
),
));
}
- Cryto API。
Future<List<Coin>> fetchCoin() async {
coinList = [];
filter = [];
final response = await http.get(Uri.parse(
'https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=100&page=1&sparkline=false'));
if (response.statusCode == 200) {
List<dynamic> values = [];
values = json.decode(response.body);
if (values.isNotEmpty) {
for (int i = 0; i < values.length; i++) {
if (values[i] != null) {
Map<String, dynamic> map = values[i];
coinList.add(Coin.fromJson(map));
filter.add(Coin.fromJson(map));
}
}
}
setState(() {
coinList;
filter;
});
return coinList;
}
else {
throw Exception("Failed to load");
}
}
如何运行
$ dart --no-sound-null-safety run
$ flutter run --no-sound-null-safety
贡献者
- Đỗ Trường Thịnh
- Github – lonelyknight2902
- Linkedin – Trường Thịnh Đỗ
- Hứa Hoàng Nguyên
- Github – SleepyCatOnTheBed
- Phạm Đức Hải
- Github – ihaveatalkingtree
- Linkedin – Hải Phạm Đức
- Phạm Anh Quân
- Github – ethanpham
- Linkedin – Quân Phạm Anh




