import 'package:flutter/material.dart'; import 'commonFun.dart'; import 'package:flutter/services.dart'; import 'package:fluttertoast/fluttertoast.dart'; import '../pages/Works/SBBJ/sbbj_content.dart'; import 'doJSON.dart'; //删除消息对话框。自定义透明背景窗口,类似对话框 class CustomDialogJ extends StatefulWidget { CustomDialogJ({Key key, this.title = "", this.theKey = "", this.index = -1}) : super(key: key); String title; String theKey; int index; _CheckBoxDemoState createState() => _CheckBoxDemoState(); } //需要监听软键盘的弹出和隐藏 主要用 WidgetsBindingObserver 这个继承类 //https://www.jianshu.com/p/872e23124470 class _CheckBoxDemoState extends State with WidgetsBindingObserver { String getTitle(int index) {} int mapLen = 0; @override void dispose() { // TODO: implement dispose //销毁 WidgetsBinding.instance.removeObserver(this); super.dispose(); } @override void initState() { // TODO: implement initState super.initState(); //mapLen = mapGetSbbjGetData.length; print("mapLen = $mapLen"); getContent(); //初始化 WidgetsBinding.instance.addObserver(this); } @override void didChangeMetrics() { super.didChangeMetrics(); WidgetsBinding.instance.addPostFrameCallback((_) { setState(() { if (MediaQuery.of(context).viewInsets.bottom == 0) { //关闭键盘 bViewInsets = false; } else { //显示键盘 bViewInsets = true; } }); }); } String strContent = ''; bool bModifiable = false; bool bViewInsets = false; getContent() async { // strContent = ("" == mapGetSbbjGetData[widget.theKey].toString()) // ? "(无数据)" // : mapGetSbbjGetData[widget.theKey].toString(); // widget.title = // "第 ${widget.index + 1} 项(共 ${mapLen} 项) : " + mapGetSbbjGetDataText[widget.theKey]; getPreBtn_NextBtn(); //时间戳转换 if(strContent.isNotEmpty && ('addtime' == widget.theKey || 'createtime' == widget.theKey)) { strContent = getDate(int.parse(strContent)); } myController.text = strContent; bModifiable = false;//mapGetSbbjGetDataModifiable[widget.thekey]; setState(() {}); } Widget getBtnSizeX({@required text, width = 60.0, height = 30.0, onPressedFun}) { return Container( color: Colors.white12, //onPressedFun为null时无效 width: width, height: height, child: RaisedButton( padding: EdgeInsets.all(0), textColor: Colors.black, child: Text(text), onPressed: onPressedFun, ), ); } Future alertDialog(String title, String content, var onPresse) async { return await showDialog( barrierDismissible: false, //表示点击灰色背景的时候是否消失弹出框 context: context, builder: (context) { return AlertDialog( title: Text(title), content: Text(content), actions: [ FlatButton( child: Text("确定"), onPressed: onPresse, ), FlatButton( child: Text("取消"), onPressed: () { Navigator.pop(context, false); }, ), ], ); }, ); } //解决第一次进入报错问题。因为getPreBtn_NextBtn()还未执行,preBtn和nextBtn为空 Widget preBtn = Container( color: Colors.white12, //onPressedFun为null时无效 width: 60.0, height: 30.0, child: RaisedButton( padding: EdgeInsets.all(0), textColor: Colors.black, child: Text('上一项'), onPressed: null, ), ); Widget nextBtn = Container( color: Colors.white12, //onPressedFun为null时无效 width: 60.0, height: 30.0, child: RaisedButton( padding: EdgeInsets.all(0), textColor: Colors.black, child: Text('下一项'), onPressed: null, ), ); getPreBtn_NextBtn() { preBtn = getBtnSizeX( text: "上一项", onPressedFun: null, ); nextBtn = getBtnSizeX( text: "下一项", onPressedFun: null, ); if (widget.index > 0 && mapLen > 0) { preBtn = getBtnSizeX( text: "上一项", onPressedFun: () async { if (widget.index > 0) { widget.index--; //widget.theKey = mapGetSbbjGetData.keys.elementAt(widget.index); getContent(); } }, ); } if (widget.index < (mapLen - 1) && mapLen > 0) { nextBtn = getBtnSizeX( text: "下一项", onPressedFun: () async { if (widget.index < mapLen - 1) { widget.index++; //widget.theKey = mapGetSbbjGetData.keys.elementAt(widget.index); getContent(); } }, ); } } @override Widget build(BuildContext context) { SystemUiOverlayStyle(statusBarColor: Colors.transparent); Size mediaSize = MediaQuery.of(context).size; // TODO: implement build return WillPopScope( child: Scaffold( //type: MaterialType.transparency, //color: Colors.transparent, //backgroundColor: Colors.transparent, //color: Colors.blue, backgroundColor: Color.fromRGBO(212, 212, 212, 0.6), body: SafeArea( child: Stack( children: [ Container( alignment: Alignment(0, 0.2), child: Container( height: bViewInsets ? mediaSize.height * 0.4 : mediaSize.height * 0.85, width: mediaSize.width * 0.95, decoration: BoxDecoration( color: Colors.white, //border: Border.all(width: 1.0, color: Colors.black), borderRadius: BorderRadius.all( Radius.circular(3), ), ), child: Column( children: [ Padding( padding: EdgeInsets.fromLTRB(10, 10, 10, 0), child: Stack( children: [ Align( alignment: Alignment.centerLeft, child: Text( " ${widget.title}", style: TextStyle( fontSize: 15.0, ), ), ), Align( alignment: Alignment.centerRight, child: InkWell( child: Icon(Icons.close), onTap: () { Navigator.pop(context); //关闭弹框,播放输入视频地址 }, ), ) ], ), ), Divider(), Container( padding: EdgeInsets.fromLTRB(20, 10, 20, 10), width: double.infinity, child: Container( decoration: BoxDecoration( color: Colors.white, border: Border.all(width: 1.0, color: Colors.blue), borderRadius: BorderRadius.all( Radius.circular(3), ), ), padding: EdgeInsets.fromLTRB(10, 10, 10, 10), width: double.infinity, height: mediaSize.height * 0.15, child: SingleChildScrollView( child: Container( child: TextField( //textAlign: TextAlign.right, keyboardType: TextInputType.multiline, maxLines: 5, minLines: 1, style: TextStyle(fontSize: 14), decoration: InputDecoration( hintText: '請輸入字段信息', border: InputBorder.none, //TextField去掉下划线 contentPadding: EdgeInsets.only(right: 0), ), controller: myController, enabled: bModifiable, //利用控制器初始化文本 onChanged: (value) {}, ), ), ), ), ), SizedBox(height: 5), bViewInsets ? SizedBox(height: 0) : Container( padding: EdgeInsets.fromLTRB(20, 10, 20, 10), width: double.infinity, child: Container( decoration: BoxDecoration( color: Colors.white, border: Border.all(width: 1.0, color: Colors.blue), borderRadius: BorderRadius.all( Radius.circular(3), ), ), padding: EdgeInsets.fromLTRB(10, 10, 10, 10), width: double.infinity, height: mediaSize.height * 0.45, child: SingleChildScrollView( child: Container( //child: Text(strContent), child: Text(strContent), ), ), ), ), Expanded( child: Container(), ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ getBtnSizeX( text: "复制", onPressedFun: () { // Flutter 复制文本到剪贴板 Clipboard.setData(ClipboardData(text: strContent)); //showToast('帮助信息已复制到剪贴板', textAlign: TextAlign.left); Fluttertoast.showToast( msg: '联系人信息已复制到剪贴板', gravity: ToastGravity.BOTTOM); }, ), getBtnSizeX( text: "返回", onPressedFun: () { Navigator.pop(context); //关闭弹框,播放输入视频地址 }, ), preBtn, nextBtn, ], ), SizedBox(height: 35), ], ), ), ), ], ), ), ), onWillPop: () { // 屏蔽点击返回键的操作 //player.pause(); Navigator.pop(context); }, ); } }