簡體   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