自定義dialog代碼:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class addLabelPageDialog extends StatefulWidget {
final confirmCallback;
const addLabelPageDialog(
{
Key key,
this.confirmCallback
}) : super(key: key);
@override
State<StatefulWidget> createState() {
return _addLabelPageDialog();
}
}
class _addLabelPageDialog extends State<addLabelPageDialog>{
final controller = TextEditingController();
String inputValuue = "";
@override
Widget build(BuildContext context) {
return GestureDetector(
child: Material(//遮罩層
type: MaterialType.transparency, //透明類型
//透明度
child: new Center(
child: Container(
width: 400,
height: 300,
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.rectangle,
//可以設置角度,BoxShape.circle直接圓形
borderRadius: BorderRadius.all(Radius.circular(15.0)),
),
child: Column(
children: <Widget>[
Container(
width: 400,
height: 60,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.rectangle,
//可以設置角度,BoxShape.circle直接圓形
borderRadius: BorderRadius.only(
topLeft: Radius.circular(15.0),
topRight: Radius.circular(15.0)),
),
child: Text(
"新建標簽",
style: TextStyle(
color: Colors.white,
fontSize: 30,
),
),
),
Container(
padding: new EdgeInsets.all(30),
color: Colors.white,
child: Container(
padding: new EdgeInsets.all(10),
decoration: BoxDecoration(
color: Color(0xFFFFCDD2),
border: Border.all(color: Colors.red, width: 1.0),
borderRadius: BorderRadius.circular(5.0),
),
child: TextFormField(
style: TextStyle(fontSize: 20,),
textAlign: TextAlign.center,
controller: controller,
onFieldSubmitted: (val) {
print("============鍵盤按回車完成=============" + val);
inputValuue = val;
},
decoration: InputDecoration(
hintText: '內容',
border: UnderlineInputBorder(
borderSide: BorderSide.none)),
)),
),
Container(
padding: new EdgeInsets.only(top: 30),
child: GestureDetector(
child: Container(
width: 100,
height: 50,
alignment: Alignment.center,
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(10.0),
),
child: Text("確定", style: TextStyle(fontSize: 25,color: Colors.white),),
),
onTap: (){
//通過回調函數回傳新建的標簽內容
widget.confirmCallback(inputValuue);
Navigator.of(context).pop();
},
),
),
],
)),
),
),
onTap: () {
print("關閉dialog");
Navigator.pop(context); //關閉對話框
},
);
}
}
調用方式:
onTap: () {//點擊事件觸發
print("添加標簽");
return showDialog<Null>(
context: context, //BuildContext對象
barrierDismissible: false,
builder: (BuildContext context) {
return addLabelPageDialog(confirmCallback: confirmCallback);
});
},
//回調函數,接收新建的標簽內容
void confirmCallback(value){
if(value == null || value == ""){
return;
}
if(labelList.contains(value)){
Fluttertoast.showToast(msg: "已添加,請勿重復添加",gravity: ToastGravity.CENTER);
}
print("添加的標簽內容::::" + value);
setState(() {
labelList.add(value);
});
}
so easy!!!加油Flutter開發者們!!!祝一路順風!!!!!!!!!!!!!!!!!!
