Matrix4参数在传递以间接转换时作用着



我遇到了一个非常奇怪的问题。这就像某种类型的混乱吗?

如果我这样写动画,它可以按预期工作:

Widget _animatedButtonsBuilder(BuildContext context, LoginState state) {
    final animTarget = state.isPhoneNumberFocused
        ? _controller.lowerBound
        : _controller.upperBound;
    _controller.animateTo(animTarget);
    final double width = MediaQuery.of(context).size.width;
    //final transform = Matrix4.translationValues(_animation.value * width, 0.0, 0.0)..scale(1.0, 1.0-_animation.value, 1.0);
    return AnimatedBuilder(
        animation: _controller,
        builder: (BuildContext context, Widget child) {
          return Transform(
            transform: Matrix4.translationValues(_animation.value * width, 0.0, 0.0)..scale(1.0, 1.0-_animation.value, 1.0),
            child: new RaisedButton(
              child: const Text('Login'),
              color: Color(0xff938065),
              elevation: 4.0,
              splashColor: Colors.blueGrey,
              textColor: Color(0xffffffff),
              onPressed: () {},
          ));
    });
  }

,但是如果我不满意

//final transform = Matrix4.transla...

并将其传递给transform:参数,它似乎无法正常工作。

发生了什么事?

我认为要获得等效的结果,您需要将线路移动到构建器中,因为每次动画都在动画开始时都会执行它。

Widget _animatedButtonsBuilder(BuildContext context, LoginState state) {
    final animTarget = state.isPhoneNumberFocused
        ? _controller.lowerBound
        : _controller.upperBound;
    _controller.animateTo(animTarget);
    final double width = MediaQuery.of(context).size.width;
    return AnimatedBuilder(
        animation: _controller,
        builder: (BuildContext context, Widget child) {
          //final transform = Matrix4.translationValues(_animation.value * width, 0.0, 0.0)..scale(1.0, 1.0-_animation.value, 1.0);
          return Transform(
            transform: Matrix4.translationValues(_animation.value * width, 0.0, 0.0)..scale(1.0, 1.0-_animation.value, 1.0),
            child: new RaisedButton(
              child: const Text('Login'),
              color: Color(0xff938065),
              elevation: 4.0,
              splashColor: Colors.blueGrey,
              textColor: Color(0xffffffff),
              onPressed: () {},
          ));
    });
  }

最新更新