จะเปลี่ยนประเภทคีย์บอร์ดใน TextField เมื่อเปลี่ยน Tab ได้อย่างไร?

ฉันต้องการเปลี่ยนประเภทแป้นพิมพ์แบบไดนามิกเมื่อผู้ใช้เปลี่ยนแท็บใน TabBarView ฉันลองหลายอย่างแล้ว autoFocus = true ให้ FocusNode() สำหรับแต่ละ TextField และยกเลิกการโฟกัสและขอโฟกัสสำหรับ focusNode เหล่านี้ FocusNode เดียวกันสำหรับ TextField ทั้งสามนี้

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่ฉันได้ลองไปแล้ว

return TabBar(
      onTap: (_) {
        if (tabController.indexIsChanging) {
//here the input just unfocus



          FocusScope.of(context).unfocus();
          Future.delayed(Duration(seconds: 1)).then((v) {
             FocusScope.of(context).requestFocus();
          });

        }
      }, ... )

ฟิลด์ข้อความของฉัน

 Widget _buildTextField({
    TextInputType keyboardType,
    List<TextInputFormatter> inputFormatters,

  }) {
    return BlocBuilder<TransferBloc, TransferState>(
      builder: (context, state) {
        return TextField(
          controller: inputController,
          // focusNode: focusInput,
          autofocus: true,
          keyboardType: keyboardType,
          inputFormatters: inputFormatters,
}
)
}

person Rafael Menicucci    schedule 22.05.2020    source แหล่งที่มา
comment
ยากที่จะบอกได้จากโค้ดตัวอย่างของคุณ แต่หากมีเพียงฟิลด์เดียวในแต่ละมุมมอง autofocus ก็น่าจะเพียงพอแล้ว codepen.io/kuhnroyal/pen/NWGJWPO   -  person kuhnroyal    schedule 22.05.2020
comment
ขอบคุณสำหรับตัวอย่าง แต่อย่าแก้ปัญหาของฉัน ผู้ใช้ไม่จำเป็นต้องแตะใน TextField เพื่อเปิดคีย์บอร์ด แอปควรทำโดยอัตโนมัติ   -  person Rafael Menicucci    schedule 22.05.2020
comment
แป้นพิมพ์ควรเปิดโดยอัตโนมัติเมื่อโฟกัสช่องข้อความ   -  person kuhnroyal    schedule 22.05.2020
comment
ใช่ แต่ผู้ใช้ไม่จำเป็นต้องแตะใน TextField เพื่อโฟกัส ควรทำโดยอัตโนมัติเมื่อมีการเปลี่ยนแท็บ   -  person Rafael Menicucci    schedule 22.05.2020
comment
นั่นคือสิ่งที่เกิดขึ้นในตัวอย่างของฉัน ไม่มีแป้นพิมพ์ในเว็บแต่มีการเน้นไปที่ฟิลด์   -  person kuhnroyal    schedule 22.05.2020
comment
ขอบคุณสำหรับเวลาของคุณ @kuhnroyal แต่ฉันทดสอบมันบนเครื่องจำลองและคีย์บอร์ดไม่เปิดโดยอัตโนมัติ   -  person Rafael Menicucci    schedule 22.05.2020


คำตอบ (1)


สิ่งนี้ช่วยแก้ปัญหาของฉันได้ แต่ดูเหมือนเป็นการแฮ็ก ไม่มีใครมีแนวทางที่ดีกว่านี้หรือไม่?

FocusScope.of(context).unfocus();

Future.delayed(Duration(milliseconds: 350)).then((value) {
       FocusScope.of(context).requestFocus(inputFocus);
});

น้อยกว่า 350 มิลลิวินาทีไม่ทำงาน :/

person Rafael Menicucci    schedule 22.05.2020