【问题标题】:Flutter dont reload a image when i take a picture当我拍照时颤振不重新加载图像
【发布时间】:2020-05-07 04:30:01
【问题描述】:

我正在研究颤振,我正在尝试创建一个人员注册。在此页面中,我有一个包含基本数据和人物照片的普通寄存器。

但是我在更新图像时遇到了一些问题,当我拍照时,组件图像不会更改为拍摄的图像; 我尝试为 Image 或 Image Provider 找到一些控制器,但没有成功。 这是我的代码:

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,
      ),
    );
  }
}

【问题讨论】:

  • CircleAvatarImage() 的实现在哪里?
  • 什么是CircleAvatarImage 小部件?它是您正在使用的自定义小部件吗?
  • @VickySalunkhe 我添加了 CircleAvatarImage 的代码

标签: flutter flutter-layout


【解决方案1】:

你没有使用 setState。所以,Widget 不可能不更新。试试看:

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

【讨论】:

  • 他在下一行调用 setstate,所以我认为这不是问题。
  • 对!但是 setstate 不包括_image。它只是将用户设置为空。
  • 我将设置所有改变其值的变量。
  • 好的。也许我对 setState 的理解是错误的。我会检查。谢谢。
  • 所以,我尝试了你的方法,但图像也没有改变。 ://
猜你喜欢
  • 2021-01-21
  • 2021-12-26
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
  • 2021-03-06
  • 2021-07-19
  • 1970-01-01
相关资源
最近更新 更多