123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- import 'dart:async';
- import 'dart:convert';
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_slidable/flutter_slidable.dart';
- import 'package:flutter_wallet/tools/YSAlertView.dart';
- import 'package:flutter_wallet/tools/YSNetWork.dart';
- import 'package:flutter_wallet/tools/YSSqflite.dart';
- import 'package:flutter_wallet/wallet/YSWalletListItemDetail.dart';
- import 'package:provider/provider.dart';
- import '../../login/view/YSHelpView.dart';
- import '../../tools/YSColors.dart';
- import '../../tools/YSTools.dart';
- class YSWalletListItemView extends StatefulWidget {
- final Map item;
- const YSWalletListItemView({Key? key, required this.item}) : super(key: key);
- @override
- YSWalletListItemViewState createState() => YSWalletListItemViewState();
- }
- class YSWalletListItemViewState extends State<YSWalletListItemView> {
- double _amount = 0;
- Map _token = {};
- int _number = 0;
- @override
- void initState() {
- _amount = YSData().balanceMap['${widget.item['address']}${YSData().wallet['id']}token']??0;
- networkDelay((){
- _getToken();
- });
- super.initState();
- }
- _getToken() async{
- Map type = getWalletType(widget.item);
- List list = [];
- //ETH===========TRON-HD
- // LogUtil.d('_getToken=======${YSData().allTokenArray}');
- if(type.isNotEmpty&&widget.item['address']!='THb4CqiFdwNHsWsQCs4JhzwjMWys4aqCbF'){
- widget.item['name'] = type['token_name'];
- widget.item['address'] = YSData().wallet['public'];
- _token = widget.item;
- List list = YSData().priceArray.where((element) => element['symbol']==_token['name']).toList();
- if(list.isNotEmpty){
- _token = widget.item;
- _token['price_usd'] = double.parse(list.first['price']);
- }
- // String address = '';
- // if(type['token_name']=='BNB'){
- // address = '0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c';
- // }else if(type['token_name']=='ETH'){
- // address = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
- // }
- // list = YSData().allTokenArray.where((element) => element['address']==address).toList();
- // if(list.isNotEmpty){
- // _token = widget.item;
- // _token['price_usd'] = list.first['price_usd'];
- // }else{
- // _token = widget.item;
- // List list = YSData().priceArray.where((element) => element['symbol']==_token['name']).toList();
- // if(list.isNotEmpty){
- // _token['price_usd'] = double.parse(list.first['price']);
- // }
- // }
- }else{
- list = YSData().allTokenArray.where((element) => element['address']==widget.item['address']).toList();
- if(list.isNotEmpty){
- _token = list.first;
- }else{
- _token = widget.item;
- }
- }
- _token['ysType'] = YSData().typeId;
- setState(() {});
- }
- @override
- void didUpdateWidget(covariant YSWalletListItemView oldWidget) {
- _number++;
- if(_number%50==0){
- _getToken();
- }
- super.didUpdateWidget(oldWidget);
- }
- @override
- Widget build(BuildContext context) {
- // LogUtil.d('${_token['name']}===========${_token['address']}');
- return Slidable(
- key: const ValueKey(0),
- endActionPane: ActionPane(
- extentRatio: 0.3,
- motion: GestureDetector(
- onTap: (){
- ysShowCenterAlertView(context, YSTipsAlertView(valueSetter: (value) async{
- if(value){
- YSSqflite2 sqflite2 = YSSqflite2().init();
- sqflite2.rawDelete('${widget.item['hid']}');
- List array = await sqflite2.rawQuery();
- if(!mounted)return;
- YSSqflite2.notifier(YSData().context, array);
- }
- },tipsStr: '是否删除次资产?',));
- },
- child: Container(
- color: Colors.red,
- alignment: Alignment.center,
- child: Text('删除',style: YSColors.content2Style(context),),
- ),
- ),
- children: const [],
- ),
- child: Consumer(
- builder: (context,YSUnitNotifier unit,child) {
- return GestureDetector(
- onTap: (){
- YSData().contAddress = _token['address'];
- YSData().contName = _token['name'];
- Navigator.of(context).push(
- CupertinoPageRoute(builder: (context){
- return YSWalletListItemDetail(item: widget.item,);
- })
- );
- },
- behavior: HitTestBehavior.opaque,
- child: _token.isEmpty?Container():Container(
- padding: EdgeInsets.only(left: hsp(15),right: hsp(15),top: hsp(10),bottom: hsp(10)),
- alignment: Alignment.centerLeft,
- child: Row(
- children: [
- ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(50)),
- key: Key('$_number'),
- child: YSImage.network(_token['icon_url'],height: hsp(40),width: hsp(40),),
- ),
- Expanded(
- child: Container(
- padding: EdgeInsets.only(top: hsp(5),bottom: hsp(5),left: hsp(5),right: hsp(5)),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(_token['name']??'',style: YSColors.contentStyle(context),maxLines: 1,),
- YSBalanceView(public: _token['address'],style: YSColors.subStyle(context),type: 1,walletAddress: YSData().wallet['public'],valueSetter: (value) {
- _amount = double.parse(value)*(_token['price_usd']??1);
- setState(() {});
- YSData().balanceMap['${widget.item['address']}${YSData().wallet['id']}token'] = _amount;
- if(_amount>0){
- Provider.of<YSBalanceTotalNotifier>(context, listen: false) .setValue({_token['symbol']:_amount,'ysType':_token['ysType']});
- }else{
- Provider.of<YSBalanceTotalNotifier>(context, listen: false) .setValue({_token['symbol']:_amount,'ysType':_token['ysType']});
- }
- },key: Key('$_number'),)
- // if(_info.isNotEmpty)Padding(
- // padding: EdgeInsets.only(top: hsp(5)),
- // child: RichText(text: TextSpan(
- // style: YSColors.subStyle(context),
- // children: [
- // TextSpan(
- // text: '\$${_info['lastPrice']} ',
- // ),
- // TextSpan(
- // text: ' ${(double.parse(_info['lastPrice']??'0')-double.parse(_info['openPrice']??'0')).toStringAsFixed(8)}',
- // style: const TextStyle(color: Color(0xFFFF0000))
- // )
- // ]
- // ),maxLines: 1,)
- // )
- ],
- ),
- )
- ),
- Container(
- width: hsp(150),
- padding: EdgeInsets.only(top: hsp(5),bottom: hsp(5),left: hsp(5),right: hsp(5)),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- Text('${YSUserRecord().unit=='RMB'?'¥':'\$'} ${(double.parse(toFlex(_amount,range: 2))*unitNumber()).toStringAsFixed(4)}'.fixAutoLines(),style: YSColors.contentStyle(context),),//${_info['count']}
- // Padding(
- // padding: EdgeInsets.only(top: hsp(5)),
- // child: Text('\$ ${widget.item['gas']} ',style: YSColors.subStyle(context),)
- // )
- ],
- ),
- ),
- ],
- )
- ),
- );
- }
- ),
- );
- }
- }
- class YSWalletListChooseItemView extends StatefulWidget {
- final ValueSetter? valueSetter;
- final Map item;
- const YSWalletListChooseItemView({Key? key, required this.item, this.valueSetter}) : super(key: key);
- @override
- YSWalletListChooseItemViewState createState() => YSWalletListChooseItemViewState();
- }
- class YSWalletListChooseItemViewState extends State<YSWalletListChooseItemView> {
- @override
- Widget build(BuildContext context) {
- bool isChoose = YSData().tokenArray.any((element) => element['hid']=='${widget.item['hid']}')&&widget.valueSetter==null;
- return GestureDetector(
- onTap: (){
- },
- behavior: HitTestBehavior.opaque,
- child: Container(
- padding: EdgeInsets.only(left: hsp(15),right: hsp(15),top: hsp(10),bottom: hsp(10)),
- alignment: Alignment.centerLeft,
- child: Row(
- children: [
- ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(50)),
- child: YSImage.network(widget.item['icon_url'],height: hsp(40),width: hsp(40),),
- ),
- Expanded(
- child: Container(
- padding: EdgeInsets.only(top: hsp(5),bottom: hsp(5),left: hsp(5),right: hsp(5)),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(widget.item['name']??'',style: YSColors.contentStyle(context),maxLines: 1,),
- Padding(
- padding: EdgeInsets.only(top: hsp(5)),
- child: Text(ysTextCut(widget.item['address']),style: YSColors.subStyle(context),)
- )
- ],
- ),
- )
- ),
- GestureDetector(
- onTap: () async{
- if(widget.valueSetter!=null){
- widget.valueSetter!(widget.item);
- }else{
- YSSqflite2 sq2 = YSSqflite2().init();
- if(isChoose){
- sq2.rawDelete('${widget.item['hid']}');
- }else{
- sq2.rawInsert(
- hid: '${widget.item['hid']}',
- name: '${widget.item['name']}',
- gas: '${widget.item['gas']}',
- decimal: '${widget.item['decimal']}',
- rice_usd: '${widget.item['rice_usd']}',
- percent_change_24h: '${widget.item['percent_change_24h']}',
- address: '${widget.item['address']}',
- total_supply: '${widget.item['total_supply']}',
- icon_url: '${widget.item['icon_url']}',
- symbol: '${widget.item['symbol']}'
- );
- }
- List tokenArray = await sq2.rawQuery();
- if(!mounted)return;
- YSSqflite2.notifier(context, tokenArray);
- setState(() {});
- }
- },
- child: Icon(isChoose?Icons.remove_circle_outline:Icons.add_circle_outline,size: hsp(20),color: isChoose?Colors.grey:Colors.blue,),
- )
- ],
- )
- ),
- );
- }
- }
|