Не удается сфокусироваться на TextField на новой странице после навигации по флаттеру - PullRequest
0 голосов
/ 25 мая 2018

По какой-то причине я не могу сосредоточиться на TextField после на следующей странице после навигации.Клавиатура будет автоматически отклоняться при выборе TextField.Если я установлю autofocus: true на TextField, то клавиатура будет бесконечно всплывать и немедленно исчезать снова и снова.

Я столкнулся с этим, когда мое приложение было разумного размера, но я смог воссоздать его в минимальном примере приложения.

Я использую Dart 2.0.0-dev.55.0 с Flutter beta v0.3.2.

Код для главной страницы:

import 'package:flutter/material.dart';
import 'settings.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Helpful text.',),
            // ===== Where navigation happens =====
            RaisedButton(
              onPressed: () {
                Navigator.push(context, PageRouteBuilder(
                  pageBuilder: (_, __, ___) => SettingsPage()));
              },
              child: Text('Go to input page'),
            ),
          ],
        ),
      ),
    );
  }
}

Вот код для страницы с TextField.

import 'package:flutter/material.dart';

class SettingsPage extends StatefulWidget {
  SettingsPage({Key key}) :
   super(key: key);

  @override
  _SettingsPage createState() => new _SettingsPage();
}


class _SettingsPage extends State<SettingsPage> {

  @override
  Widget build(BuildContext context) {
    final key = GlobalKey<ScaffoldState>();
    return Scaffold(
      key: key,
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text("Settings"),
      ),
      body: ListView(
        children: <Widget>[
          Text("Enter something"),
          // Can't focus on this widget
          TextField(),
        ],
      ),
    );
  }
}

Я могу сосредоточиться на TextField нана главной странице, если я ее там размещу, но не могу на той, что на странице настроек.Я предполагаю, что это как-то связано с тем, что клавиатура не имеет приоритета над всплывающей страницей?Или что происходит?Как заставить приложение просто сфокусироваться на полях ввода на навигационной странице?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Возникла похожая проблема с глобальным ключом.Просматривал похожий пример в примере редукции архитектуры флаттера.

Использование ключа, подобного так, исправило его для меня

static final GlobalKey<FormFieldState<String>> _orderFormKey = GlobalKey<FormFieldState<String>>();
0 голосов
/ 03 июля 2018

У меня также была эта проблема с узлом фокуса, добавленным в текстовое поле.Удаление узла фокуса решило мою проблему.

0 голосов
/ 25 мая 2018

Итак, проблема в том, что я поставляю GlobalKey на эшафот.Удаление ключа решает проблему.Не совсем понятно, почему, но проблема в основном объясняется в этой проблеме Github .

Я использовал клавишу, чтобы всплывающее окно получалось при отображении сообщения об ошибке при проверке ввода, но теперь я предпочитаю просто отображать сообщение об ошибке в текстовом виджете.

...