import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:zhiying_base_widget/pages/withdraw_page/bloc/withdraw_bloc.dart'; import 'package:zhiying_base_widget/pages/withdraw_page/models/withdraw_model.dart'; import 'package:zhiying_base_widget/pages/withdraw_page/withdraw_page_sk.dart'; import 'package:zhiying_comm/util/base_bloc.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; /*提现页面*/ class WithdrawPage extends StatefulWidget { final Map data; const WithdrawPage(this.data, {Key key}) : super(key: key); @override _WithdrawPageState createState() => _WithdrawPageState(); } class _WithdrawPageState extends State { @override Widget build(BuildContext context) { return GestureDetector( onTap: () { FocusScope.of(context).requestFocus(FocusNode()); }, child: Scaffold( appBar: _createNav(), backgroundColor: Colors.white, body: SafeArea( child: BlocProvider( bloc: WithdrawBloc(), child: _WithdrawContainer(widget.data), ), ), ), ); } // 导航栏 Widget _createNav() { return CupertinoNavigationBar( leading: Navigator.canPop(context) ? GestureDetector( child: Container( padding: EdgeInsets.zero, child: Icon( Icons.arrow_back_ios, size: 20, ), ), onTap: () { if (Navigator.canPop(context)) { Navigator.pop(context); } }, ) : Container(), middle: Text( '提现', style: TextStyle( fontSize: 15, color: Color(0xff333333), ), ), trailing: GestureDetector( child: Text( '明细', style: TextStyle(fontSize: 13, color: Color(0xff333333)), ), onTap: () {}, ), ); } } class _WithdrawContainer extends StatefulWidget { final Map data; const _WithdrawContainer(this.data, {Key key}) : super(key: key); @override _WithdrawContainerState createState() => _WithdrawContainerState(); } class _WithdrawContainerState extends State<_WithdrawContainer> { WithdrawBloc _bloc; int _currentIndex = 0; TextEditingController _controller = TextEditingController(); bool _submitable = false; bool _inputable = false; @override void initState() { _bloc = BlocProvider.of(context); if (widget.data.containsKey('skip_identifier')) { _bloc.loadData(widget.data['skip_identifier']); } super.initState(); } @override Widget build(BuildContext context) { return SingleChildScrollView( child: StreamBuilder( stream: _bloc.outData, builder: (BuildContext context, AsyncSnapshot snapshot) { WithdrawModel model = snapshot.data; if (model == null) { return WithdrawPageSketelon(); } return Container( margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 8), child: Column( children: [ _createHeader(model), _createVerify(model), _createPrice(model), _createInput(model), _createSubmit(model), _createDesc(model), ], ), ); }), // child: Column( // children: [], // ), ); } Widget _createHeader(WithdrawModel model) { return Container( width: double.infinity, height: 97, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10)), child: Stack( children: [ Container( width: double.infinity, height: double.infinity, child: CachedNetworkImage( imageUrl: model.availableCashOutBgImg ?? '', fit: BoxFit.fill, ), ), Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( '¥0.03', style: TextStyle( color: Colors.white, fontSize: 30, ), ), Text( '可提现总余额', style: TextStyle( color: Colors.white, fontSize: 14, ), ), ], ), ) ], ), ); } Widget _createVerify(WithdrawModel model) { return GestureDetector( behavior: HitTestBehavior.opaque, onTap: () { Logger.debug('绑定支付宝'); }, child: Container( margin: EdgeInsets.only(top: 8, bottom: 8), child: Row( children: [ CachedNetworkImage( imageUrl: model.unbindAlipayImg, height: 23, ), Expanded( child: Padding( padding: const EdgeInsets.only(left: 8, right: 8), child: Text( model.unbindAlipayText, style: TextStyle(fontSize: 11, color: Color(0xff999999)), ), ), ), Icon( Icons.arrow_forward_ios, size: 12, color: Color(0xff999999), ) ], ), ), ); } Widget _createPrice(WithdrawModel model) { return GridView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, crossAxisSpacing: 10, mainAxisSpacing: 10, childAspectRatio: 2.5, ), itemCount: model?.cashOutDashbordItems?.length ?? 0, itemBuilder: (BuildContext context, int index) { WithdrawDashbordItems item = model.cashOutDashbordItems[index]; return GestureDetector( onTap: () { _controller.text = item.value; _currentIndex = index; _inputable = item.value == null || item.value == ''; _checkSubmit(item.value); }, child: Container( decoration: BoxDecoration( color: index == _currentIndex ? HexColor.fromHex( model.cashOutDashbordItemsSelectedBgColor ?? '') : HexColor.fromHex( model.cashOutDashbordItemsUnselectedBgColor ?? ''), borderRadius: BorderRadius.circular(5), border: Border.all( color: index == _currentIndex ? HexColor.fromHex( model.cashOutDashbordItemsSelectedColor ?? '') : HexColor.fromHex('#d2d2d2'), ), ), child: Center( child: Text( item.name, style: TextStyle( fontSize: 14, color: index == _currentIndex ? HexColor.fromHex( model.cashOutDashbordItemsSelectedColor ?? '') : HexColor.fromHex( model.cashOutDashbordItemsUnselectedColor ?? ''), ), ), ), ), ); }, ); } Widget _createInput(WithdrawModel model) { return Padding( padding: const EdgeInsets.only(top: 8.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Text( '提现金额', style: TextStyle( fontWeight: FontWeight.bold, color: Color(0xff333333), ), ), Container( width: double.infinity, height: 50, child: CupertinoTextField( placeholder: '输入提现金额', controller: _controller, enabled: _inputable, style: TextStyle( fontSize: 30, color: Color(0xff333333), fontFamily: 'Din-Bold', package: 'zhiying_base_widget', ), decoration: BoxDecoration(color: Colors.transparent), keyboardType: TextInputType.numberWithOptions(decimal: true), textInputAction: TextInputAction.done, inputFormatters: [ WhitelistingTextInputFormatter(RegExp("[0-9.]")), //只允许输入小数 ], prefix: Text( '¥', style: TextStyle(fontSize: 20), ), onChanged: (value) { _checkSubmit(value); }, ), ), Container( margin: EdgeInsets.only(top: 5, bottom: 20), width: double.infinity, height: 0.5, color: Color(0xffe4e4e4), ), ], ), ); } Widget _createSubmit(WithdrawModel model) { return Container( height: 50, decoration: BoxDecoration( color: _submitable ? HexColor.fromHex(model.cashOutBtnTextAvailableBgColor ?? '') : HexColor.fromHex(model.cashOutBtnTextUnavailableBgColor ?? ''), borderRadius: BorderRadius.circular(7.5), ), child: Center( child: Text( model.cashOutBtnText ?? '', style: TextStyle( fontSize: 15, color: _submitable ? HexColor.fromHex(model.cashOutBtnTextAvailableColor ?? '') : HexColor.fromHex(model.cashOutBtnTextUnavailableColor ?? ''), ), ), ), ); } Widget _createDesc(WithdrawModel model) { return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Container( width: double.infinity, margin: EdgeInsets.only(top: 8), child: Text( '提现说明', style: TextStyle( fontWeight: FontWeight.bold, color: Color(0xff333333), ), ), ), Text( model.cashOutTips ?? '', style: TextStyle( color: Color(0xff999999), fontSize: 14, ), ), ], ); } void _checkSubmit(String value) { _submitable = value.length > 0; setState(() {}); } }