# #firebase #flutter #dart #flutter-layout #flutter-dependencies
Вопрос:
Я создаю страницу регистрации с опцией нескольких типов учетных записей. Приложение простое, поэтому у него нет никакого состояния, я использую только простое старое состояние Set, но я передаю свое измененное значение в состояние SET в виджете с отслеживанием состояния, но это происходит со мной в первый раз, когда flutter не подбирает значение в состоянии Set. Я слишком много часов чесал голову, но все та же проблема. Моя версия flutter составляет 2.5. Состояние кнопки GFRadio-это проблема, создающая проблему. Также, если я использую переключатель «простой дротик» или РадиоЛистТиль, они также создают ту же проблему
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:getwidget/colors/gf_color.dart';
import 'package:getwidget/components/radio/gf_radio.dart';
import 'package:getwidget/size/gf_size.dart';
class SignUpPage extends StatefulWidget {
const SignUpPage({Key? key}) : super(key: key);
@override
State<SignUpPage> createState() => _SignUpPageState();
}
class _SignUpPageState extends State<SignUpPage> {
bool _obscureText = true;
int groupValue = 0;
void _togglePasswordStatus() {
setState(() {
_obscureText = !_obscureText;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Container(
child: SingleChildScrollView(
child: Column(
children: <Widget>[
Stack(
children: <Widget>[
Image.asset(
"assets/loginpage.png",
fit: BoxFit.cover,
),
Padding(
padding: EdgeInsets.only(
top: 250,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 40),
child: Text("NewnAccount",
style: TextStyle(
fontSize: 34, fontWeight: FontWeight.bold)),
),
Stack(
children: <Widget>[
Padding(
padding: EdgeInsets.only(
right: 40,
),
child: Image.asset("assets/camera.png")),
Padding(
padding: EdgeInsets.only(right: 40, top: 70),
child: Text("Add Image")),
],
)
],
),
),
Padding(
padding: EdgeInsets.only(
top: 350,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: EdgeInsets.only(left: 40),
child: GFRadio(
size: GFSize.SMALL,
value: 2,
groupValue: groupValue,
onChanged: (value) {
setState(() {
groupValue = value;
});
},
inactiveIcon: null,
activeBorderColor: GFColors.SUCCESS,
radioColor: GFColors.SUCCESS,
),
),
Padding(
padding: EdgeInsets.only(
right: 40,
),
),
],
),
),
Padding(
padding: EdgeInsets.only(
top: 400,
),
child: Padding(
padding: EdgeInsets.only(left: 20, right: 20),
child: TextField(
decoration: InputDecoration(
hintText: "Username",
prefixIcon: Icon(
Icons.person,
color: Color(0xFFCF776B),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCF776B)),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCF776B)),
),
),
),
),
),
Padding(
padding: EdgeInsets.only(
top: 470,
),
child: Padding(
padding: EdgeInsets.only(left: 20, right: 20),
child: TextField(
decoration: InputDecoration(
hintText: "Mobile Number",
prefixIcon: Icon(
Icons.phone,
color: Color(0xFFCF776B),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCF776B)),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCF776B)),
),
),
),
),
),
Padding(
padding: EdgeInsets.only(
top: 540,
),
child: Padding(
padding: EdgeInsets.only(left: 20, right: 20),
child: TextField(
obscureText: _obscureText,
decoration: InputDecoration(
hintText: "Password",
prefixIcon: Icon(
Icons.lock,
color: Color(0xFFCF776B),
),
suffixIcon: IconButton(
icon: Icon(
_obscureText
? Icons.visibility
: Icons.visibility_off,
),
onPressed: _togglePasswordStatus,
color: Color(0xFFCF776B)),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCF776B)),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xFFCF776B)),
),
),
),
),
),
Padding(
padding: EdgeInsets.only(
top: 620,
),
child: Center(
child: GestureDetector(
onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => SignUpPage()));
},
child: Container(
width: 180,
height: 60,
decoration: BoxDecoration(
color: Color(0xFFCF776B),
border: Border.all(
color: Color(0xFFCF776B),
),
borderRadius:
BorderRadius.all(Radius.circular(40))),
child: Center(
child: Text("Sign Up",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white)),
),
),
),
),
),
Padding(
padding: EdgeInsets.only(
top: 700,
),
child: Center(
child: Text(
"Change Password",
style: TextStyle(
decoration: TextDecoration.underline,
color: Color(0xFFCF776B),
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
),
],
)
],
),
),
),
);
}
}
Комментарии:
1. вы можете использовать TextEditingController
2. Можете ли вы, пожалуйста, привести какой-либо пример по этому поводу, если у вас есть какие-либо, я в замешательстве
Ответ №1:
Я думаю, что вы неправильно GFRadio
поняли виджет здесь:
GFRadio(
size: GFSize.SMALL,
value: 2,
groupValue: groupValue,
onChanged: (value) {
setState(() {
groupValue = value;
});
},
inactiveIcon: null,
activeBorderColor: GFColors.SUCCESS,
radioColor: GFColors.SUCCESS,
),
Это groupValue
создано для определения того, какие переключатели есть в этой группе, все переключатели в этой группе будут иметь одинаковые groupValue
. И value
это сделано для того, чтобы отличать переключатель от других в той же группе. Допустим, у вас есть 3 переключателя, чтобы пользователи могли выбирать свой пол(мужчина, женщина, гей;)), код может выглядеть следующим образом:
int _value = 0;
Row(
children: [
GFRadio(
value: 0,
groupValue: 1,
onChanged: (value) {
setState(() {
_value = value;
});
},
),
GFRadio(
value: 1,
groupValue: 1,
onChanged: (value) {
setState(() {
_value = value;
});
},
),
GFRadio(
value: 2,
groupValue: 1,
onChanged: (value) {
setState(() {
_value = value;
});
},
),
],
),
Итак, как вы можете видеть , то, что нужно изменить в setState
методе _value
, — это то, а не то groupValue
. Ваш код должен быть изменен на:
//int groupValue = 0;
//replace the above line with the below line:
int _value = 0;
И в setState
методе в GFRadio:
setState(() {
//groupValue = value; replace this line with below line
_value = value;
});
Я ужасно умею объяснять, так что, если вы не понимаете, просто прокомментируйте !
Комментарии:
1. Не сработало. Если я удалю значение groupValue, GFRadio скажет, что его обязательно добавить, и со значением все будет по-прежнему
2. Можете ли вы предоставить журнал ошибок в вопросе ?