拍照片时Flutter不会重新加载图像

时间:2020-05-07 04:30:01

标签: flutter flutter-layout

我正在研究颤动,并试图创建人名登记。在此页面中,我有一个包含基本数据和个人照片的普通寄存器。

但是我在更新图像时遇到一些问题,当我拍摄照片时,图像组件不会更改为拍摄的图像; 我尝试找到一些控制器到图像或图像提供程序,但未成功。 这是我的代码:

class _RegisterForm extends State<RegisterForm> {
  final TextEditingController _textEditingControllerPassword =
      new TextEditingController();
  final TextEditingController _textEditingControllerComparePassword =
      new TextEditingController();
  final TextEditingController _textEditingControllerEmail =
      new TextEditingController();
  final TextEditingController _textEditingControllerFullName =
      new TextEditingController();

  final _formKey = GlobalKey<FormState>();
  User _user = null;
  Image _image = null;

  @override
  void setState(VoidCallback fn) {
    super.initState();
    this._user = new User(
      _textEditingControllerPassword.text,
      _textEditingControllerFullName.text,
      _textEditingControllerEmail.text,
      _textEditingControllerComparePassword.text,
      _image,
    );
    this.build(context);
  }


  @override
  Widget build(BuildContext context) {
    return Form(
        key: _formKey,
        child: Padding(
          padding: const EdgeInsets.fromLTRB(23, 0, 23, 0),
          child: Column(children: <Widget>[
            GestureDetector(
              child: CircleAvatarImage(_image),
              onTap: getImage,
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text("Tire sua foto!"),
            ),
            InputString(
              "Como gostaria ",
              hint: "Marianx Silva",
              maxLenght: 100,
              controller: this._textEditingControllerFullName,
              onChanged: (context) => {
                setState(() {
                  _user = null;
                }),
              },
            ),
            InputString(
              "E-mail",
              maxLenght: 100,
              controller: this._textEditingControllerEmail,
              onChanged: (context) => {
                setState(() {
                  _user = null;
                }),
              },
            ),
            InputString(
              "Senha",
              controller: this._textEditingControllerPassword,
              maxLenght: 12,
              obscureText: true,
              onChanged: (context) => {
                setState(() {
                  _user = null;
                }),
              },
            ),
            InputString(
              "Confime a senha",
              controller: this._textEditingControllerComparePassword,
              maxLenght: 12,
              obscureText: true,
              onChanged: (context) => {
                setState(() {
                  _user = null;
                }),
              },
            ),
            RegisterUserInFirebaseButton(
              "Continuar",
              _formKey,
              _user,
//              edgeInsets: EdgeInsets.fromLTRB(0, 40, 0, 0),
            ),
          ]),
        ));
  }

  Future getImage() async {
    File image = await ImagePicker.pickImage(source: ImageSource.camera);
    this._image = Image.file(image);
    setState(() {
      _user = null;
    });
  }
}

这是我的“ CircleAvatarImage”组件:

import 'package:flutter/material.dart';

const AssetImage _defaultImage = AssetImage("assets/images/default_image.png");


class CircleAvatarImage extends StatefulWidget {
  Image image;

  CircleAvatarImage(this.image);

  @override
  State<StatefulWidget> createState() {
    return __CircleAvatarImageState();
  }
}

class __CircleAvatarImageState extends State<CircleAvatarImage> {
  AnimationController _controller;

  @override
  Widget build(BuildContext context) {
    return CircleAvatar(
      radius: 62,
      backgroundColor: Colors.blue,
      child: CircleAvatar(
        radius: 60.0,
        child: Padding(
          padding: const EdgeInsets.only(top: 90),
          child: Icon(
            Icons.camera_enhance,
            color: Colors.white,
          ),
        ),
        backgroundImage:
        widget.image == null ? _defaultImage : widget.image.image,
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

您没有使用setState。因此,widget不可能没有它必须udpate。试试:

setState() => this._image = Image.file(image);