Browse Source

Wallet: add basic wallet UI

pull/18/head
Sun 4 years ago
parent
commit
0c59a0ce6c
  1. BIN
      assets/logo/logo_erc20.png
  2. BIN
      assets/logo/logo_eth.png
  3. BIN
      assets/logo/logo_tether.png
  4. BIN
      assets/logo/logo_wallet.png
  5. 9
      lib/apps/service/models.dart
  6. 0
      lib/apps/wallet/models.dart
  7. 261
      lib/apps/wallet/page.dart
  8. 0
      lib/apps/wallet/provider.dart
  9. 3
      lib/l10n/localizations.dart
  10. 5
      lib/l10n/localizations_en.dart
  11. 5
      lib/l10n/localizations_zh.dart
  12. 4
      pubspec.yaml

BIN
assets/logo/logo_erc20.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 942 B

BIN
assets/logo/logo_eth.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
assets/logo/logo_tether.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
assets/logo/logo_wallet.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

9
lib/apps/service/models.dart

@ -6,8 +6,10 @@ import 'package:esse/apps/file/list.dart'; @@ -6,8 +6,10 @@ import 'package:esse/apps/file/list.dart';
import 'package:esse/apps/group_chat/list.dart';
import 'package:esse/apps/domain/page.dart';
import 'package:esse/apps/chat/list.dart';
import 'package:esse/apps/wallet/page.dart';
const List<InnerService> INNER_SERVICES = [
InnerService.Wallet,
InnerService.Chat,
InnerService.GroupChat,
InnerService.Assistant,
@ -21,6 +23,7 @@ enum InnerService { @@ -21,6 +23,7 @@ enum InnerService {
Assistant,
Domain,
Cloud,
Wallet,
}
extension InnerServiceExtension on InnerService {
@ -34,8 +37,10 @@ extension InnerServiceExtension on InnerService { @@ -34,8 +37,10 @@ extension InnerServiceExtension on InnerService {
return [lang.groupChat, lang.groupChatIntro, 'assets/logo/logo_group_chat.png'];
case InnerService.Domain:
return [lang.domain, lang.domainIntro, 'assets/logo/logo_domain.png'];
case InnerService.Wallet:
return [lang.wallet, lang.walletIntro, 'assets/logo/logo_wallet.png'];
case InnerService.Cloud:
return [lang.cloud, lang.cloudIntro, 'assets/logo/logo_domain.png'];
return [lang.cloud, lang.cloudIntro, 'assets/logo/logo_cloud.png'];
}
}
@ -49,6 +54,8 @@ extension InnerServiceExtension on InnerService { @@ -49,6 +54,8 @@ extension InnerServiceExtension on InnerService {
return GroupChatList();
case InnerService.Domain:
return DomainDetail();
case InnerService.Wallet:
return WalletDetail();
case InnerService.Cloud:
return DomainDetail();
}

0
lib/apps/wallet/models.dart

261
lib/apps/wallet/page.dart

@ -0,0 +1,261 @@ @@ -0,0 +1,261 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:esse/utils/adaptive.dart';
import 'package:esse/utils/better_print.dart';
import 'package:esse/l10n/localizations.dart';
import 'package:esse/widgets/button_text.dart';
import 'package:esse/widgets/input_text.dart';
import 'package:esse/global.dart';
import 'package:esse/options.dart';
import 'package:esse/rpc.dart';
class WalletDetail extends StatefulWidget {
const WalletDetail({Key? key}) : super(key: key);
@override
_WalletDetailState createState() => _WalletDetailState();
}
class Network {
const Network(this.name, this.color);
final Color color;
final String name;
}
class _WalletDetailState extends State<WalletDetail> with SingleTickerProviderStateMixin {
TabController? _tabController;
List tokens = [
['ETH', '100', '1000', 'assets/logo/logo_eth.png'],
['USDT', '2000', '2000', 'assets/logo/logo_tether.png'],
['XXX', '100', '1000', 'assets/logo/logo_erc20.png'],
['FFF', '100', '1000', 'assets/logo/logo_erc20.png'],
];
Network? selectedNetwork;
List<Network> networks = <Network>[
const Network(
'Ethereum Mainnet',
const Color(0xFF167F67)
),
const Network(
'Ropsten Test Network',
Colors.orange,
),
const Network(
'Rinkeby Test Network',
Colors.orange,
),
const Network(
'Localhost 8545',
const Color(0xFF6174FF),
),
];
@override
void initState() {
_tabController = new TabController(length: 2, vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
final color = Theme.of(context).colorScheme;
final lang = AppLocalizations.of(context);
return Scaffold(
appBar: AppBar(
title: DropdownButton<Network>(
icon: Container(),
underline: Container(),
hint: Text("Select network"),
value: selectedNetwork,
onChanged: (Network? value) {
if (value != null) {
setState(() {
selectedNetwork = value;
});
}
},
items: networks.map((Network network) {
return DropdownMenuItem<Network>(
value: network,
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 6.0),
decoration: BoxDecoration(
border: Border.all(width: 1.0, color: network.color),
borderRadius: BorderRadius.circular(25.0)
),
child: Row(
children: <Widget>[
Icon(Icons.public, color: network.color, size: 18.0),
const SizedBox(width: 10),
Text(network.name, style: TextStyle(color: network.color, fontSize: 14.0)),
],
)),
);
}).toList(),
),
actions: [
TextButton(
onPressed: () {
setState(() {});
},
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 10.0),
width: 40.0,
height: 40.0,
decoration: BoxDecoration(
color: color.surface,
borderRadius: BorderRadius.circular(25.0)
),
child: Center(child: Text('A'))
)
),
]
),
body: Container(
alignment: Alignment.topCenter,
padding: const EdgeInsets.symmetric(horizontal: 20.0),
child: Column(
children:[
InkWell(
onTap: () {
//Clipboard.setData(ClipboardData(text: gidText(widget.id)));
},
child: Container(
padding: const EdgeInsets.symmetric(vertical: 10.0),
alignment: Alignment.center,
decoration: new BoxDecoration(
border: new Border(bottom:
const BorderSide(width: 1.0, color: Color(0xA0ADB0BB)))),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Account1', style: TextStyle(fontSize: 18.0)),
const SizedBox(height: 4.0),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('0x222...334444', style: TextStyle(color: Color(0xFFADB0BB))),
const SizedBox(width: 8.0),
Icon(Icons.copy, size: 16.0, color: color.primary),
]
)
]
),
),
),
Container(
padding: const EdgeInsets.symmetric(vertical: 20.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 36.0,
height: 36.0,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(tokens[0][3]),
fit: BoxFit.cover,
),
),
),
Container(
height: 60.0,
alignment: Alignment.center,
child: Text(
'100 ETH',
style: TextStyle(fontSize: 24.0, fontWeight: FontWeight.bold)),
),
Text('\$1000', style: TextStyle(color: Color(0xFFADB0BB))),
const SizedBox(height: 8.0),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
TextButton(
onPressed: () {
setState(() {});
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
decoration: BoxDecoration(
color: Color(0xFF6174FF),
borderRadius: BorderRadius.circular(25.0)
),
child: Center(child: Text('Send', style: TextStyle(color: Colors.white)))
)
),
TextButton(
onPressed: () {
setState(() {});
},
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
decoration: BoxDecoration(
color: Color(0xFF6174FF),
borderRadius: BorderRadius.circular(25.0)
),
child: Center(child: Text('Receive', style: TextStyle(color: Colors.white)))
)
),
]
),
]
)
),
TabBar(
unselectedLabelColor: color.onSurface,
labelColor: Color(0xFF6174FF),
tabs: [
Tab(text: 'Assets'),
Tab(text: 'Activity'),
],
controller: _tabController!,
indicatorSize: TabBarIndicatorSize.tab,
),
Expanded(
child: TabBarView(
children: [
ListView.separated(
separatorBuilder: (BuildContext context, int index) => const Divider(),
itemCount: tokens.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
leading: Container(
width: 36.0,
height: 36.0,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(tokens[index][3]),
fit: BoxFit.cover,
),
),
),
title: Text(tokens[index][1] + ' ' + tokens[index][0]),
subtitle: Text('\$' + tokens[index][2]),
trailing: IconButton(icon: Icon(Icons.arrow_forward_ios),
onPressed: () {}),
);
}
),
ListView.separated(
separatorBuilder: (BuildContext context, int index) => const Divider(),
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return Container(
child: Text('TODO ${index}'),
);
}
),
],
controller: _tabController!,
),
),
]
)
),
);
}
}

0
lib/apps/wallet/provider.dart

3
lib/l10n/localizations.dart

@ -249,6 +249,9 @@ abstract class AppLocalizations { @@ -249,6 +249,9 @@ abstract class AppLocalizations {
String get moveTrash;
String get setstar;
String get setunstar;
String get wallet;
String get walletIntro;
}
class _AppLocalizationsDelegate

5
lib/l10n/localizations_en.dart

@ -402,4 +402,9 @@ class AppLocalizationsEn extends AppLocalizations { @@ -402,4 +402,9 @@ class AppLocalizationsEn extends AppLocalizations {
String get setstar => 'Star';
@override
String get setunstar => 'Unstar';
@override
String get wallet => 'Wallet';
@override
String get walletIntro => 'Manage your own cryptocurrency.';
}

5
lib/l10n/localizations_zh.dart

@ -402,4 +402,9 @@ class AppLocalizationsZh extends AppLocalizations { @@ -402,4 +402,9 @@ class AppLocalizationsZh extends AppLocalizations {
String get setstar => '标星';
@override
String get setunstar => '取消标星';
@override
String get wallet => '钱包';
@override
String get walletIntro => '管理自己的加密货币。';
}

4
pubspec.yaml

@ -83,6 +83,10 @@ flutter: @@ -83,6 +83,10 @@ flutter:
- assets/logo/logo_group_chat.png
- assets/logo/logo_domain.png
- assets/logo/logo_cloud.png
- assets/logo/logo_wallet.png
- assets/logo/logo_eth.png
- assets/logo/logo_tether.png
- assets/logo/logo_erc20.png
- assets/images/background_light.jpg
- assets/images/background_dark.jpg
- assets/images/image_missing.png

Loading…
Cancel
Save