如何在颤动中隐藏卡

时间:2020-08-25 17:27:21

标签: flutter

我创建一个页面来按用户编辑数据。在此页面中有两张卡。在第一张卡中,我可以看到用户的图片;在第二张卡中,从手机中选择用户后可以看到用户的图片。或他们想要更新的图片。但是现在我的问题是,如果用户从手机中选择图像后出现第二张卡,该如何隐藏第一张卡。我知道可以通过使用Java中的Visibility来完成。是新的过滤器开发人员,我不知道该怎么做。我进行了很多搜索,但无法解决问题。

卡片1:

child: Card(

                                    child: new Column(

                                        children: <Widget>[
                                          Image.network(image, width: 385,height: 300,
                                            fit: BoxFit.cover,
                                          ),
                                          OutlineButton(
                                            onPressed: chooseImage,

                                            child: Text('Choose Image'),
                                          ),
                                        ])
                                ),

卡片2:

Card(
                            child: SizedBox(
                              width: 400.0,
                              height: 300.0,
                            child: new Padding(
                              padding:

                                const EdgeInsets.only(top: 2.0, bottom: 2.0),
                              child: Expanded(flex: 1,
                            child: showImage(),
                              )
                            ),
                            ),
                          ),

整页:

class update_profilettt extends StatefulWidget {
  var PostID;
  update_profilettt({Key key, this.PostID}) : super(key: key);
  @override
  _update_profiletttState createState() => new _update_profiletttState(PostID);
}

class _update_profiletttState extends State<update_profilettt> {
  MyPreferences _myPreferences = MyPreferences();
  var PostID;
  String uploadEndPoint;
  _update_profiletttState(this. PostID);

  Future<File> file;
  String status = '';
  String base64Image;
  File tmpFile;
  String errMessage = 'Error Uploading Image';
  var data;

  var _name = "";

  // var _genderController = new TextEditingController();
  var _nameController = new TextEditingController();

  chooseImage() {
    setState(() {

      file = ImagePicker.pickImage(source: ImageSource.gallery);
    });
    setStatus('');
  }

  setStatus(String message) {
    setState(() {
      status = message;

    });
  }
  startUpload() {

    setStatus('Uploading Image...');
    if (null == tmpFile) {
      setStatus(errMessage);
      return;
    }

    String NameImage =DateTime.now().millisecondsSinceEpoch.toString();
    upload(NameImage);
  }

  upload(String NameImage) {
  uploadEndPoint = 'http://xxxxxxx/up.php?id='+widget.PostID.toString();
  print('yeyyyyddyy $uploadEndPoint');

    http.post(uploadEndPoint, body: {
      'id': widget.PostID.toString(),


    }).then((result) {
      setStatus(result.statusCode == 200 ? result.body : errMessage);
    }).catchError((error) {
      setStatus(error);
    });
  }

  Widget showImage() {
    return FutureBuilder<File>(
      future: file,
      builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
        if (snapshot.connectionState == ConnectionState.done &&
            null != snapshot.data) {
          tmpFile = snapshot.data;
          base64Image = base64Encode(snapshot.data.readAsBytesSync());

          return Flexible(
            child: Card(
              margin:EdgeInsets.all(10) ,
              child: Image.file(
                snapshot.data,
                fit: BoxFit.cover,
              ),
            ),
          );

        } else if (null != snapshot.error) {
          return const Text(
            'Error Picking Image',
            textAlign: TextAlign.center,
          );
        } else {
          return const Text(
            '',
            textAlign: TextAlign.center,
          );
        }
      },

    );

  }







  Future<String> _ShowDialog(String msg) async {
    return showDialog<String>(
      context: context,
      barrierDismissible: false, // user must tap button!
      builder: (BuildContext context) {
        return new AlertDialog(
          title: new Text('Rewind and remember'),
          content: new SingleChildScrollView(
            child: new ListBody(
              children: <Widget>[
                new Text(msg),
              ],
            ),
          ),
          actions: <Widget>[
            new FlatButton(
              child: new Text('Close'),
              onPressed: () {
                Navigator.of(context).pop();
              },
            ),
          ],
        );
      },
    );
  }

  void _editData() async {
   // String NameImage =DateTime.now().millisecondsSinceEpoch.toString();
    var url = 'http://xxxxxxxxxx/up.php?id='+widget.PostID.toString();

    var response = await http.post(url, body: {

     'id': widget.PostID.toString(),
    //  "id": _userController.text,
      "name": _nameController.text,

      "image": base64Image,

     // "gender": _genderController.text,

    });
    if (response.statusCode == 200) {

      _ShowDialog("Updated Successfully");
    } else {
      _ShowDialog("Updated Failer");
    }

    //onEditedAccount();
    //print(_adresseController.text);
  }

  _fetchData() async {final url = "http://xxxxxxxx/nhy.php?id=${widget.PostID}";

    final response = await http.get(url);
    if (response.statusCode == 200) {
      final map = json.decode(response.body);
      final videosMap = map["result"];

      setState(() {

        this.data = videosMap;
       _name = data[0]['name'];

        image = data[0]['image'];
      //  _gender = data[0]['gender'];
        print(data);
      });
    }
  }

  @override
  void initState() {
    super.initState();

    _fetchData();
  }

  @override
  Widget build(BuildContext context) {
    _nameController= new TextEditingController(text: _name);
   
    if(chooseImage !=null){

    }
    return new Scaffold(
        appBar: AppBar(
          title: Text("Edit Post"),
        ),
        body: new Center(
          child: data == null
              ? new CircularProgressIndicator()
              : new ListView(
                  children: <Widget>[

                    new Padding(
                      padding: const EdgeInsets.fromLTRB(5, 10, 5, 5),
                       child: Column(
                        children: <Widget>[
                          new Padding(
                            padding:
                                const EdgeInsets.only(top: 10.0, bottom: 10.0),
                            child: Expanded(flex: 1,
                              child: Container(
                                child: Card(

                                    child: new Column(

                                        children: <Widget>[
                                          Image.network(image, width: 385,height: 300,
                                            fit: BoxFit.cover,
                                          ),
                                          OutlineButton(
                                            onPressed: chooseImage,

                                            child: Text('Choose Image'),
                                          ),

                                        ])

                                ),
                              ),
                            ),
                            ),




                          Card(
                            child: SizedBox(
                              width: 400.0,
                              height: 300.0,
                            child: new Padding(
                              padding:

                                const EdgeInsets.only(top: 2.0, bottom: 2.0),
                              child: Expanded(flex: 1,
                            child: showImage(),

                              )
                            ),
                            ),
                          ),






Card (
    child: Column(

        children: <Widget>[
          SizedBox(
            height: 10.0,
          ),
    Container(
    margin: EdgeInsets.all(4),
                          child: TextField(
                            maxLength: 10,
                            decoration: InputDecoration(
                                border: OutlineInputBorder(),
                                labelText: 'Name',
                                filled: true,
                                hintText: ''),
                            controller: _nameController,
                          ),
    ),
          SizedBox(
            height: 5.0,
          ),
       
        ),
          SizedBox(
            height: 5.0,
          ),
       
        ),
         

          ),
         

          ),
        

          ),
          SizedBox(
            height: 5.0,
          ),

       ]

    )

),

                          SizedBox(
                            width: double.infinity,
                            child: new FlatButton(
                              child: const Text('Update'),color: Colors.amber,
                              padding: EdgeInsets.fromLTRB(100, 18, 100, 18),
                              onPressed: () { _editData();
                              },
                            ),
                          ),

                          SizedBox(
                            height: 10.0,
                          ),
                        ],
                      ),

                    )
                  ],
                ),
        ));
  }
}

1 个答案:

答案 0 :(得分:0)

扑朔迷离中有一个 Visibility 小部件,您也可以用它包装卡

示例

bool visibilityController = true;

true为可见,false为不可见 因此,在选择卡时,请使用setstate进行切换。

setState(() {
                                        
                                      });

Visibility(
                                  visible: visibilityController,
                                  child : //Your card
                                ),

希望这就是您想要的。

为您的代码 您可以在showimage()获取图像时执行此操作

Widget showImage() {
   return FutureBuilder<File>(
     future: file,
     builder: (BuildContext context, AsyncSnapshot<File> snapshot) {
       if (snapshot.connectionState == ConnectionState.done &&
           null != snapshot.data) {
         tmpFile = snapshot.data;
         base64Image = base64Encode(snapshot.data.readAsBytesSync());
         setState(() {   
// added here 
visibilityController = false;
                                        
                                      });
         return ........ your code