簡體   English   中英

鈎子只能從混合了“鈎子”的小部件的構建方法中調用

[英]Hooks can only be called from the build method of a widget that mix-in `Hooks`

我想使用模式,我想使用 MultilineTextField 但是當我使用它時,dart 拋出錯誤。 你知道如何解決這個問題嗎? Hooks can only be called from the build method of a widget that mix-in .

Future modalWithReason(BuildContext context) {
  return showModalBottomSheet(
      backgroundColor: Colors.transparent,
      isScrollControlled: true,
      context: context,
      builder: (BuildContext context) {
        return GestureDetector(
          onTap: () => FocusScope.of(context).unfocus(),
          child: Container(
            height: 789.sp,
            padding: EdgeInsets.symmetric(horizontal: 16.sp),
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.only(
                topLeft: Radius.circular(20),
                topRight: Radius.circular(20),
              ),
            ),
            child: Column(
              children: [
                        Container(
                          height: 264.h,
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              SizedBox(height: 34.h),
                              Text(
                                '理由を記述',
                                style: bodySemiBold(black),
                              ),
                              SizedBox(height: 20.h),
                              MultilineTextField(),
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      });
}

我想用這個。

class MultilineTextField extends HookWidget {
  MultilineTextFieldForReason({super.key});

  final myController = useTextEditingController();
  @override
  Widget build(BuildContext context) {
    return TextField(
      keyboardType: TextInputType.multiline,
      controller: myController,
      maxLines: 4,
      decoration: InputDecoration(
          border: OutlineInputBorder(
        borderSide: BorderSide(
          width: 1,
          color: borderMidEmphasis,
        ),
      )),
    );
  }
}

class MultilineTextField extends HookWidget {
  MultilineTextField({super.key});


  @override
  Widget build(BuildContext context) {
    final myController = useTextEditingController();
    return TextField(
      keyboardType: TextInputType.multiline,
      controller: myController,
      maxLines: 4,
      decoration: InputDecoration(
          border: OutlineInputBorder(
        borderSide: BorderSide(
          width: 1,
          color: borderMidEmphasis,
        ),
      )),
    );
  }
}

發生此錯誤是因為您在構建方法之外使用useTextEditingController掛鈎。 要解決此問題,請在構建方法中放置 controller 掛鈎初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM