|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- import 'package:event_bus/event_bus.dart';
- import 'package:flutter/cupertino.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/services.dart';
- import 'package:zhiying_base_widget/dialog/tip_dialog/tip_dialog.dart';
- import 'package:zhiying_base_widget/pages/bil_detail_page/bil_detail_page.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_base_widget/utils/contants.dart';
- import 'package:zhiying_comm/util/base_bloc.dart';
- import 'package:zhiying_comm/util/event_util/event_util.dart';
- import 'package:zhiying_comm/util/event_util/login_success_event.dart';
- import 'package:zhiying_comm/zhiying_comm.dart';
-
- /*提现页面*/
- class WithdrawPage extends StatefulWidget {
- final Map<String, dynamic> data;
-
- const WithdrawPage(this.data, {Key key}) : super(key: key);
-
- @override
- _WithdrawPageState createState() => _WithdrawPageState();
- }
-
- class _WithdrawPageState extends State<WithdrawPage> {
- @override
- Widget build(BuildContext context) {
- return GestureDetector(
- onTap: () {
- FocusScope.of(context).requestFocus(FocusNode());
- },
- child: Container(
- color: Colors.white,
- child: BlocProvider<WithdrawBloc>(
- bloc: WithdrawBloc(),
- child: _WithdrawContainer(widget.data),
- ),
- ),
- );
- }
- }
-
- class _WithdrawContainer extends StatefulWidget {
- final Map<String, dynamic> 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<WithdrawBloc>(context);
- if (widget.data.containsKey('skip_identifier')) {
- _bloc.loadData(widget.data['skip_identifier']);
- _bloc.loadWithdrawData();
- _bloc.getAlipayStatus();
- }
- EventUtil.instance.on<LoginSuccessEvent>().listen((event) {
- reload();
- });
- super.initState();
- }
-
- reload() {
- _bloc.loadData(widget.data['skip_identifier']);
- _bloc.loadWithdrawData();
- _bloc.getAlipayStatus();
- }
-
- @override
- Widget build(BuildContext context) {
- return StreamBuilder(
- stream: _bloc.outData,
- builder: (context, asny) {
- WithdrawModel model = asny.data;
- if (model == null) {
- return WithdrawPageSketelon();
- }
-
- return Scaffold(
- backgroundColor: HexColor.fromHex('#FFFFFFFF'),
- appBar: _createNav(model),
- body: SafeArea(
- child: SingleChildScrollView(
- child: Container(
- margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 8),
- child: Column(
- children: <Widget>[
- _createHeader(model),
- _createVerify(model),
- _createPrice(model),
- _createInput(model),
- _createSubmit(model),
- _createDesc(model),
- ],
- ),
- )),
- ),
- );
- });
- }
-
- // 导航栏
- Widget _createNav(WithdrawModel model) {
- return AppBar(
- elevation: 1,
- brightness: Brightness.light,
- backgroundColor: HexColor.fromHex(model?.appBarBgColor ?? ""),
- leading: Navigator.canPop(context)
- ? GestureDetector(
- child: Container(
- padding: EdgeInsets.zero,
- child: Icon(
- Icons.arrow_back_ios,
- size: 18,
- color: HexColor.fromHex(model?.appBarNameColor??""),
- ),
- ),
- onTap: () {
- if (Navigator.canPop(context)) {
- Navigator.pop(context);
- }
- },
- )
- : Container(),
- centerTitle: true,
- title: Text(
- model.appBarName,
- style: TextStyle(fontSize: 17, color: HexColor.fromHex(model.appBarNameColor), fontWeight: FontWeight.w600),
- ),
- actions: <Widget>[
- GestureDetector(
- child: Center(
- child: Padding(
- padding: EdgeInsets.only(right: 16),
- child: Text(
- model.appBarRightText,
- style: TextStyle(fontSize: 13, color: HexColor.fromHex(model?.appBarNameColor ?? "")),
- ),
- ),
- ),
- onTap: () {
- RouterUtil.route(model.detailSkipModel, model.detailSkipModel.toJson(), context);
- },
- )
- ],
- );
- }
-
- Widget _createHeader(WithdrawModel model) {
- var data = _bloc.withdrawDataModel;
- return Container(
- width: double.infinity,
- height: 97,
- decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10)),
- child: Stack(
- children: <Widget>[
- Container(
- width: double.infinity,
- height: double.infinity,
- child: CachedNetworkImage(
- imageUrl: model.availableCashOutBgImg ?? '',
- fit: BoxFit.fill,
- ),
- ),
- Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: <Widget>[
- Text(
- data?.finValue ?? "",
- style: TextStyle(
- color: Colors.white,
- fontSize: 30,
- ),
- ),
- Text(
- model?.availableCashOutText ?? "",
- style: TextStyle(
- color: HexColor.fromHex(model.availableCashOutTextColor),
- fontSize: 14,
- ),
- ),
- ],
- ),
- )
- ],
- ),
- );
- }
-
- Widget _createVerify(WithdrawModel model) {
- var data = _bloc.withdrawDataModel;
- var param = {'status': _bloc.aliPayModel, Constants.SkipIdentifierName: model.gotoAliPay.skipIdentifier, 'data': _bloc.aliPayModel};
- return GestureDetector(
- behavior: HitTestBehavior.opaque,
- onTap: () {
- Logger.debug('绑定支付宝');
- RouterUtil.route(model.gotoAliPay, {'status': _bloc.aliPayModel, Constants.SkipIdentifierName: model.gotoAliPay.skipIdentifier, 'data': param}, context).then((value) {
- reload();
- });
- },
- child: Container(
- margin: EdgeInsets.only(top: 8, bottom: 8),
- child: Row(
- children: <Widget>[
- CachedNetworkImage(
- imageUrl: (data?.alipayUserName == null || data?.alipayUserName.length == 0) ? model.unbindAlipayImg : model.bindAlipayImg,
- height: 23,
- ),
- Expanded(
- child: Padding(
- padding: const EdgeInsets.only(left: 8, right: 8),
- child: Text(
- (data?.alipayUserName == null || data?.alipayUserName.length == 0) ? model.unbindAlipayText : data.alipayUserName,
- style: TextStyle(fontSize: 11, color: Color(0xff999999)),
- ),
- ),
- ),
- Text(
- (data?.alipayUserName == null || data?.alipayUserName.length == 0) ? model.unbindAlipayGotoText : model.bindAlipayGotoText,
- style: TextStyle(fontSize: 11, color: Color(0xff999999)),
- ),
- Icon(
- Icons.arrow_forward_ios,
- size: 12,
- color: Color(0xff999999),
- )
- ],
- ),
- ),
- );
- }
-
- Widget _createPrice(WithdrawModel model) {
- if (_controller.text.length == 0 && model.cashOutDashbordItems[_currentIndex].name != "自定义") {
- _controller.text = model.cashOutDashbordItems[0].value;
- }
- 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: <Widget>[
- 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_comm',
- ),
- 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);
- },
- placeholderStyle: TextStyle(fontSize: 26, color: Colors.grey[400]),
- ),
- ),
- Container(
- margin: EdgeInsets.only(top: 5, bottom: 20),
- width: double.infinity,
- height: 0.5,
- color: Color(0xffe4e4e4),
- ),
- ],
- ),
- );
- }
-
- Widget _createSubmit(WithdrawModel model) {
- // String value = model.cashOutDashbordItems[_currentIndex].value;
- // try {
- // if (num.tryParse(value) != null &&
- // null != _bloc.withdrawDataModel &&
- // num.tryParse(value) <
- // num.tryParse(_bloc.withdrawDataModel.finValue)) {
- // _submitable = true;
- // } else {
- // _submitable = false;
- // }
- // } catch (e, s) {
- // print(e);
- // print(s);
- // }
- try {
- var currentWithdraw = num.tryParse(_controller.text);
- var finValue = num.tryParse(_bloc.withdrawDataModel?.finValue??"0");
- if (currentWithdraw != null && currentWithdraw != 0 && finValue != null && finValue != 0 && currentWithdraw <= finValue) {
- _submitable = true;
- } else {
- _submitable = false;
- }
- } catch (e, s) {
- print(e);
- print(s);
- }
-
- return GestureDetector(
- onTap: () async {
-
- ///提现
- if (_submitable) {
- if (_bloc?.withdrawDataModel != null && _bloc?.withdrawDataModel?.isBindAlipay == "0") {
- var result = await showDialog(
- context: context,
- child: TipDialog(
- content: "请绑定支付宝",
- btnText: "前往绑定支付宝",
- ));
- if (result != null && result) {
- var param = {'status': _bloc.aliPayModel, Constants.SkipIdentifierName: model.gotoAliPay.skipIdentifier, 'data': _bloc.aliPayModel};
- RouterUtil.route(model.gotoAliPay, {'status': _bloc.aliPayModel, Constants.SkipIdentifierName: model.gotoAliPay.skipIdentifier, 'data': param}, context).then((value) {
- reload();
- });
- }
- return;
- }
- _bloc.submitApply(context, _controller.text);
- }
- },
- child: 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: <Widget>[
- 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) {
- // try {
- // var currentValue = num.tryParse(value);
- // var finValue = num.tryParse(_bloc.withdrawDataModel.finValue);
- //
- // if (currentValue != null &&
- // currentValue != 0 &&
- // currentValue <= finValue &&
- // finValue != 0) {
- // _submitable = true;
- // } else {
- // _submitable = false;
- // }
- // } catch (e, s) {
- // print(e);
- // print(s);
- // }
- setState(() {});
- }
- }
|