微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除按钮和添加文本文件按钮在颤动中不起作用

如何解决删除按钮和添加文本文件按钮在颤动中不起作用

我正在从 API 获取数据。在文本字段表单中显示数据后,我尝试添加一些新的文本字段并尝试从我的应用程序中删除一些文本字段。但是我的按钮不起作用。这是代码。任何人都可以帮助我在这里应该做什么来解决这个问题?

获取数据应用视图后:here

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 举报,一经查实,本站将立刻删除。