You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

341 lines
12 KiB
Dart

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<CustomDialogJ> 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<bool> 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: <Widget>[
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: <Widget>[
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: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(10, 10, 10, 0),
child: Stack(
children: <Widget>[
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: <Widget>[
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);
},
);
}
}