我有两个文本字段Billing Address
和Shipping Address
当用户在文本字段中输入帐单地址,我想复制这些数据到我的送货地址字段由checkBox
。我不希望用户再次把数据在送货地址字段,如果用户Shipping
和Billing Address
是相同的。
以下是我的班级:
class Shipping_Address_Page extends StatefulWidget {
const Shipping_Address_Page({Key? key}) : super(key: key);
@override
State<Shipping_Address_Page> createState() => _Shipping_Address_PageState();
}
class _Shipping_Address_PageState extends State<Shipping_Address_Page> {
bool sameAddress = false;
//===================================billing controller===============================
late TextEditingController UserBilling_Name_Controller =TextEditingController(text: UserBillingNAme);
late TextEditingController UserBilling_Email_Controller =TextEditingController(text: UserBillingEmail);
//===================================shipping===============================
late TextEditingController UserShipping_NAme_Controller =TextEditingController(text: UserShippingNAme);
late TextEditingController UserShipping_Email_Controller =TextEditingController(text: UserShippingEmail);
字符串
textform字段的Ui代码
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
FutureBuilder(
future: PredefinedAddressModel_Api(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return Center(
child:
CupertinoActivityIndicator());
}
if (snapshot.hasData) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
//=================================Billing address=============================
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Color(0xFFE4D8DC)),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: getProportionateScreenWidth(20),
vertical: getProportionateScreenHeight(30)),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: Color(0xFFf0f0f0),
borderRadius: BorderRadius.circular(15),
),
margin: EdgeInsets.all(10),
child: TextFormField(
textCapitalization: TextCapitalization.sentences,
controller: UserBilling_Name_Controller,//===Controller
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(
horizontal:
getProportionateScreenWidth(20),
vertical:
getProportionateScreenWidth(
15)),
border: InputBorder.none,
focusedBorder: InputBorder.none,
labelText: "Name",
enabledBorder: InputBorder.none,
hintText: "Your name",
hintStyle: TextStyle(
color:
Colors.black.withOpacity(0.4)),
prefixIcon:
Icon(Icons.account_circle,size: 13.0)),
),
),
//===================================Shipping===============================
SizedBox(height: getProportionateScreenHeight(20),),
Padding(
padding: EdgeInsets.only(left: 8.0, bottom: 16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: getProportionateScreenHeight(20),
),
Text(
"Shipping address",
style: TextStyle(
fontSize: getProportionateScreenHeight(30),
color: Colors.black,
fontFamily: 'Gilroy',
fontWeight: FontWeight.w700),
),
],
),
),
SizedBox(height: getProportionateScreenHeight(20),),
//=================================check box=====================================
Row(
children: [
Checkbox(
value: sameAddress, //false
activeColor: Colors.green,
onChanged: (value) {
setState(() {
sameAddress = value!;
});
},
),
Text("Ship to Same address?"),
],
),
//=====================================================================================
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Color(0xFFC8E3D4)),
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: getProportionateScreenWidth(20),
vertical: getProportionateScreenHeight(30)),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: Color(0xFFf0f0f0),
borderRadius: BorderRadius.circular(15),
),
margin: EdgeInsets.all(10),
child: TextFormField(
textCapitalization: TextCapitalization.sentences,
controller: UserShipping_NAme_Controller,//===Controller
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(
horizontal:
getProportionateScreenWidth(20),
vertical:
getProportionateScreenWidth(
15)),
border: InputBorder.none,
focusedBorder: InputBorder.none,
labelText: "Name",
enabledBorder: InputBorder.none,
hintText: "Your name",
hintStyle: TextStyle(
color:
Colors.black.withOpacity(0.4)),
prefixIcon:
Icon(Icons.account_circle,size: 13.0)),
),
),
型
4条答案
按热度按时间yftpprvb1#
字符串
用以下代码替换包含复选框的行。
a5g8bdjr2#
您可以在需要时将
controller
的值显式设置到setState
中。字符串
b4lqfgs43#
您可以添加2个控制器,并根据复选框的值将这两个控制器等同起来
字符串
复选框onChange
型
vcudknz34#
试试下面的代码希望对你有帮助。
创建
TextEditingController()
变量字符串
复选框的boolaen变量:
型
您的小工具:
型
结果屏幕>