繁体   English   中英

在 PageView 中的页面之间滑动时关闭键盘

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM