Saya mengumpulkan input pengguna dengan a TextFormField
dan ketika pengguna menekan tanda FloatingActionButton
bahwa mereka sudah selesai, saya ingin menutup keyboard di layar.
Bagaimana cara membuat keyboard hilang secara otomatis?
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
MyHomePageState createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
TextEditingController _controller = new TextEditingController();
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.send),
onPressed: () {
setState(() {
// send message
// dismiss on screen keyboard here
_controller.clear();
});
},
),
body: new Container(
alignment: FractionalOffset.center,
padding: new EdgeInsets.all(20.0),
child: new TextFormField(
controller: _controller,
decoration: new InputDecoration(labelText: 'Example Text'),
),
),
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
void main() {
runApp(new MyApp());
}
Jawaban:
Pada Flutter v1.7.8 + hotfix.2, cara yang harus dilakukan adalah:
Komentar PR tentang itu:
-> JANGAN gunakan
̶r̶e̶q̶u̶e̶s̶t̶F̶o̶c̶u̶s̶(̶F̶o̶c̶u̶s̶N̶o̶d̶e̶(̶)̶
lagi.sumber
TextField
widget dan edit lainnya). Saya tidak tahu kenapa tapi kadangunfocus
tidak berpengaruh. Menggantinya dengan solusi yang diterima (tidak ada perubahan lain) akan memperbaiki masalah. Mungkin itu terkait dengan lokasi asalunfocus
panggilan. Saya perlu menyebutnya misalnya dariCheckBoxListTile.onChanged
untuk menutup keyboard saat pengguna berinteraksi dengan widget kotak centang, dan dari lokasi serupa lainnya. Saya tidak ingat persis lokasi masalah.Catatan: Jawaban ini sudah ketinggalan zaman. Lihat jawabannya untuk Flutter versi terbaru .
Anda dapat menutup keyboard dengan menghilangkan fokus
TextFormField
dan memberikannya ke yang tidak digunakanFocusNode
:sumber
onChanged:
atau dalam tindakan tombol kustom Anda?FocusScope.of(context).unfocus()
Solusi dengan FocusScope tidak berhasil untuk saya. Saya menemukan yang lain:
Itu memecahkan masalah saya.
sumber
build
metode misalnya.Untuk Flutter 1.17.3 (saluran stabil per Juni 2020), gunakan
sumber
Tidak ada solusi di atas yang tidak berhasil untuk saya.
Flutter menyarankan ini - Letakkan widget Anda di dalam GestureDetector baru () di mana ketukan akan menyembunyikan keyboard dan onTap menggunakan FocusScope.of (konteks) .requestFocus (new FocusNode ())
sumber
Kode berikut membantu saya menyembunyikan keyboard
sumber
Contoh implementasi .unfocus () untuk menyembunyikan keyboard secara otomatis saat menggulir daftar
Anda dapat menemukannya di
https://github.com/flutter/flutter/issues/36869#issuecomment-518118441
Terima kasih untuk szotp
sumber
coba ini pada gerakan ketuk
sumber
Karena di Flutter semuanya adalah widget, saya memutuskan untuk membungkus
SystemChannels.textInput.invokeMethod('TextInput.hide');
danFocusScope.of(context).requestFocus(FocusNode());
pendekatan dalam modul utilitas singkat dengan widget dan mixin di dalamnya.Dengan widget, Anda dapat menggabungkan widget apa pun (sangat nyaman jika menggunakan dukungan IDE yang bagus) dengan
KeyboardHider
widget:Dengan mixin, Anda dapat memicu persembunyian keyboard dari status atau widget apa pun pada interaksi apa pun:
Cukup buat
keyboard_hider.dart
file dan widget dan mixin siap digunakan:sumber
Anda dapat menggunakan
unfocus()
metode dariFocusNode
kelas.sumber
unfocus
metode. Jika Anda tidak ingin melakukan spam ini di aplikasi Anda, Anda dapat menggunakan cara lain, sepertiTextFormField
peristiwa perubahan atau pola reaktif, itu tergantung pada arsitektur aplikasi Anda.Sepertinya pendekatan berbeda untuk versi berbeda. Saya menggunakan Flutter v1.17.1 dan yang di bawah ini berfungsi untuk saya.
sumber
sumber
coba gunakan pengontrol pengeditan teks. di awal,
dan di acara pers,
ini akan menutup keybord.
sumber