[英]Dismiss keyboard when swiping between pages in PageView
我正在尝试使用PageView
小部件在 screen2(具有文本字段)和 screen1 之间滑动之间关闭键盘。 我试过调用Focus.of(context).unfocus()
; 在屏幕2的处置方法中。但是键盘仍然存在..这是一个最小的例子......
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Welcome to Flutter',
home: Scaffold(
appBar: AppBar(
title: const Text('Welcome to Flutter'),
),
body: PageView(
children: [
Screen1(),
Screen2(),
],
)),
);
}
}
class Screen1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text("Screen1");
}
}
class Screen2 extends StatefulWidget {
@override
_Screen2State createState() => _Screen2State();
}
class _Screen2State extends State<Screen2> {
@override
void dispose() {
Focus.of(context).unfocus();
super.dispose();
}
@override
Widget build(BuildContext context) {
return
Column(
children: [
Text("Screen2"),
TextField()
],
);
}
}
如果您想在页面上滑动时关闭键盘,可以使用onPageChanged属性,当用户滚动每个页面并且存在焦点时,将执行使用 WidgetsBinding.instance?.focusManager.primaryFocus?.unfocus()。
我拿了你的代码并修改了。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Welcome to Flutter',
home: Scaffold(
appBar: AppBar(
title: const Text('Welcome to Flutter'),
),
body: PageView(
onPageChanged: (index) {
WidgetsBinding.instance?.focusManager.primaryFocus?.unfocus();
},
children: [
Screen1(),
Screen2(),
],
)
),
);
}
}
class Screen1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Text("Screen1");
}
}
class Screen2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
Text("Screen2"),
TextField()
],
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.