Flutter: клавиша Tab не работает должным образом на рабочем столе флаттера, когда экран не развернут

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

У меня есть 8 текстовых полей, расположенных в Gridview, и когда экран приложения развернут, клавиша табуляции перемещается по полям, как и ожидалось, слева направо, а затем вниз. Когда я уменьшаю размер экрана, клавиша табуляции циклически переключает только 2 поля в непрерывном цикле. Как я могу заставить это работать правильно? Код, как показано:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(

      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

    @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text("Test App"),
      ),
      body: Center(
        // Center is a layout widget. It takes a single child and positions it
        // in the middle of the parent.
        child:Container(
      height: 180,
      // width: MediaQuery.of(context).size.width * 0.9,
      child: GridView.count(
      scrollDirection: Axis.vertical,
      crossAxisCount: 4,
      childAspectRatio: 5,
      children:  [
      buildColumn(context,txt: "A"),
        buildColumn(context,txt: "B"),
        buildColumn(context,txt: "C"),
        buildColumn(context,txt: "D"),
        buildColumn(context,txt: "E"),
        buildColumn(context,txt: "F"),
        buildColumn(context,txt: "G"),
        buildColumn(context,txt: "H"),
      ])
    )
      )
    );
  }

    Column buildColumn(BuildContext context,{txt}) {
      return Column(children: [
    Text(txt),
    Container(
    height: MediaQuery.of(context).size.height * 0.04,
    width: 300,
    child:TextFormField(decoration: InputDecoration(
      enabledBorder: OutlineInputBorder(
        borderSide: BorderSide(
            color: Colors.black12, width: 1.0),
      ),),)
    ),
        ]
  );
    }
}

person West    schedule 04.07.2021    source источник


Ответы (1)


Похоже на ошибку, но ее можно исправить, добавив focusedBorder (либо удалив enabledBorder):

        child: TextFormField(
          decoration: InputDecoration(
            enabledBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.black12, width: 1.0)),
            focusedBorder: OutlineInputBorder(
                borderSide: BorderSide(color: Colors.green, width: 1.0)),
          ),
        ),
person Spatz    schedule 04.07.2021
comment
Спасибо, да, я считаю, что это ошибка. Я попробовал ваш ответ, и он работает хорошо, только если я полностью удалю enableBorder и focusBorder. С обоими или только с сфокусированной границей кажется, что это работает, когда это просто текстовые поля, но когда я меняю одно из текстовых полей, например, G на кнопку раскрывающегося списка, порядок табуляции снова перепутался - person West; 06.07.2021