flutter - 选择下拉按钮时文本字段焦点卡住

标签 flutter dart bloc

我有一个文本字段和一个下拉菜单,两者都由 Bloc 控制。我遇到的问题是,一旦选择文本字段,如果用户尝试从下拉菜单中选择某些内容,它就不会放弃焦点。菜单出现,然后立即消失,焦点仍然在文本字段上。

这是一个演示该问题的基本应用程序:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Textfield Focus Example',
      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {

  FormBloc formBloc = FormBloc();

  final List<DropdownMenuItem> userMenuItems = ['Bob', 'Frank']
      .map((String name) => DropdownMenuItem(
            value: name,
            child: Text(name),
          ))
      .toList();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            // user - drop down menu
            Row(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('To: '),
                StreamBuilder<String>(
                    stream: formBloc.selectedUser,
                    builder: (context, snapshot) {
                      return DropdownButton(
                          items: userMenuItems,
                          value: snapshot.data,
                          onChanged: formBloc.selectUser);
                    }),
              ],
            ),

            // amount - text field
            Row(
              mainAxisSize: MainAxisSize.min,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text('Amount: '),
                Container(
                    width: 100.0,
                    child: StreamBuilder<double>(
                        stream: formBloc.billAmount,
                        builder: (context, snapshot) {
                          return TextField(
                            keyboardType: TextInputType.number,
                            onChanged: formBloc.newBillAmount,
                          );
                        })),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

class FormBloc {
  StreamController<String> _selectedUserController = StreamController<String>();
  Stream<String> get selectedUser =>
      _selectedUserController.stream;
  Function get selectUser => _selectedUserController.sink.add;

  //Amount
  StreamController<double> _billAmountController = StreamController<double>();
  Stream<double> get billAmount =>
      _billAmountController.stream;
  void newBillAmount(String amt) =>
      _billAmountController.sink.add(double.parse(amt));


  void dispose() {
    _selectedUserController.close();
    _billAmountController.close();
  }
}

我是否需要手动为textField声明FocusNode并告诉它何时放弃焦点?或者还有其他原因导致文本字段占据了所有注意力吗?

最佳答案

很抱歉回答晚了,您需要在 DropDownButton Widget 的 onTapListener 中添加以下代码。当您在下拉菜单中选择或单击屏幕外部时,它将删除对文本字段的焦点。谢谢

FocusScope.of(context).requestFocus(new FocusNode());

关于flutter - 选择下拉按钮时文本字段焦点卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513576/

相关文章:

android - 无法保存 flutter 中 TabBar 选项卡位置的状态

flutter - 尝试将名称更正为现有 setter/getter 的名称,或定义一个名为 'isInitialRoute'的 setter/getter 或字段

flutter 河荚 : how to use consumer widget in slivers

forms - 什么是 copyWith 以及如何在 Flutter 中使用它以及它的用例是什么?

flutter - BLoC 中的逻辑应该如何触发一次性 UI 警报,例如对话框或 snackbar ?

flutter - 继承 Widget 和 BLoC 之间的区别?

database - 让 webview 在 flutter 上使用某些触发器更改数据

flutter - DART:如何在单击按钮时随机生成一个六 (6) 位数字以显示在下一页上?

image - 如何从网络图像中获取 Flutter Uint8List?

dart - Flutter将扩展容器中的小部件对齐到左上角和右下角?