BloC:发出新状态后小部件未更新

问题描述 投票:0回答:1

在我的“ProductScreen”上,我有一个自定义的 TextFiled,其声明如下

Padding(
  padding: const EdgeInsets.only(top: Dimensions.m),
  child: AppMoneyField(
    title: "Value",
    initialValue: state.cost,
    isMandatory: true,
    onTextChange: (value) {
      context.read<AddPositionBloc>().add(ChangeCostEvent(double.tryParse(value)));
    })),

在AppMoneyField的

initState
上我定义了如何处理initialValue

  @override
  void initState() {
    controller = TextEditingController(
        text: widget.initialValue != null
            ? NumberFormat(".##").format(widget.initialValue)
            : "");
    super.initState();
  }

最初 state.cost 为 null,因此文本字段为空。然后在获取数据后,就会出现新状态。我的问题是,当新状态出现时,它会触发 UI 重建,因为我使用的是

BlocBuilder
,但是 AppMoneyField 中的
initState
没有被调用,只有
build
方法被调用,因此 TextField 不会更新。

initState没有被调用正常吗?那我该怎么办?

flutter flutter-bloc
1个回答
0
投票

找到了怎么做,我不得不打电话

didUpdateWidget

  void initController() {
    controller = TextEditingController(
        text: widget.initialValue != null
            ? NumberFormat(".##").format(widget.initialValue)
            : "");
  }

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

  @override
  void didUpdateWidget(AppMoneyField oldWidget) {
    super.didUpdateWidget(oldWidget);
    initController();
  }
© www.soinside.com 2019 - 2024. All rights reserved.