如何解决删除按钮和添加文本文件按钮在颤动中不起作用
我正在从 API 获取数据。在文本字段表单中显示数据后,我尝试添加一些新的文本字段并尝试从我的应用程序中删除一些文本字段。但是我的按钮不起作用。这是代码。任何人都可以帮助我在这里应该做什么来解决这个问题?
class TestRequirements extends StatefulWidget {
@override
_TestRequirementsstate createState() => _TestRequirementsstate();
}
Future<Updateusermodel> UpdateRequirements(
String token,String courseId,List requirements) async {
///api update part
}
class _TestRequirementsstate extends State<TestRequirements> {
final _formKey = GlobalKey<FormState>();
TextEditingController _requirementsController;
static List<String> requirementsList = [null];
List<String> requirements = [];
List<String> data = [];
var _courseId;
var _authToken = '';
bool isLoading = false;
_TestRequirementsstate(this._courseId);
Future<RequirementsModel> futureRequirements;
@override
void initState() {
super.initState();
_requirementsController = TextEditingController();
futureRequirements = fetchRequirements();
}
@override
void dispose() {
_requirementsController.dispose();
super.dispose();
}
Future<RequirementsModel> fetchRequirements() async {
_authToken = Provider.of<Auth>(context,listen: false).token;
var url = base_api + "/api_instructor/edit_course_requirements?course_id=33&auth_token=$_authToken";
var response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
// If the server did return a 200 OK response,// then parse the JSON.
print(response.body);
return RequirementsModel.fromJson(jsonDecode(response.body));
} else {
throw Exception('Failed to load...');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
elevation: 1,backgroundColor: Colors.white,title: Image.asset(
'logo.png',height: 40,),backgroundColor: kBackgroundColor,body: SingleChildScrollView(
child: Form(
key: _formKey,child: Padding(
padding: const EdgeInsets.all(16.0),child: Column(
crossAxisAlignment: CrossAxisAlignment.start,children: [
Text('Requirements',style: TextStyle(fontWeight: FontWeight.w700,fontSize: 16),FutureBuilder<RequirementsModel>(
future: futureRequirements,builder: (context,dataSnapshot){
if (dataSnapshot.connectionState == ConnectionState.waiting) {
return SizedBox(
height: MediaQuery.of(context).size.height * .65,child: Center(
child: CircularProgressIndicator(),);
} else {
if (dataSnapshot.error != null) {
//error
return Center(
child: Text('Error Occured'),);
} else {
return ListView.builder(
padding: EdgeInsets.zero,shrinkWrap: true,itemCount: dataSnapshot.data.requirements.length,scrollDirection: Axis.vertical,itemBuilder: (context,index) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),child: Row(
children: [
Expanded(
child: RequirementTextFields(
index,dataSnapshot.data.requirements[index]
),SizedBox(width: 16,_removeButton(false,index),],);
},);
}
}
},SizedBox(height: 20,Row(
children: [
Expanded(
flex: 1,child: RaisedButton(
elevation: 0.1,onpressed: () async {
requirementsList.insert(0,null);
setState((){});
},child: Text('+Add',style: TextStyle(color: Colors.white),splashColor: Colors.blueAccent,padding: EdgeInsets.symmetric(vertical: 12),shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),side: BorderSide(color: kDarkButtonBg),color: kDarkButtonBg,Padding(
padding: const EdgeInsets.all(8.0),child: Container(),Expanded(
flex: 1,onpressed: () {
// on submit something
Navigator.of(context).pop();
Navigator.pushReplacement(context,MaterialPageRoute(builder: (context) {
return CourseManagerScreen();
}));
},child: Text('Submit',);
}
/// remove button
Widget _removeButton(bool add,int index){
return InkWell(
onTap: (){
requirementsList.removeAt(index);
setState((){});
},child: Container(
width: 30,height: 30,decoration: Boxdecoration(
color: kRedColor,borderRadius: BorderRadius.circular(20),child: Icon(Icons.remove,color: Colors.white,);
}
}
class RequirementTextFields extends StatefulWidget {
final int index;
final String value;
RequirementTextFields(this.index,this.value);
@override
_RequirementTextFieldsstate createState() => _RequirementTextFieldsstate();
}
class _RequirementTextFieldsstate extends State<RequirementTextFields> {
TextEditingController _requirementController;
@override
void initState() {
super.initState();
_requirementController = TextEditingController();
}
@override
void dispose() {
_requirementController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
_requirementController.text = _TestRequirementsstate.requirementsList[widget.index] ?? '';
});
return TextFormField(
// controller: _requirementController,initialValue: widget.value,onChanged: (v) => _TestRequirementsstate.requirementsList[widget.index] = v,decoration: Inputdecoration(
hintText: 'Provide requirements'
),validator: (v){
if(v.trim().isEmpty) return 'Please enter something';
return null;
},);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。