我希望我的 onPressed 方法打开 Spinbox 的键盘

问题描述

我使用 spinBox 以分钟为单位设置休息时间的数量。如果您点击号码,则会打开一个键盘,您可以设置您的号码。如何在按下 ElevatedButton 的同时打开旋转框的相同键盘

我准备了下面的测试代码, 我将 (Flutter_spinBox: ^0.4.0) 添加到 pubspec.yaml

import 'package:Flutter/material.dart';
import 'package:Flutter_spinBox/Flutter_spinBox.dart';

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

class MyApp extends StatelessWidget {
  int breaktime = 60;
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("SpinBox")),body: Column(
          children: [
            Container(
              child: ElevatedButton(
                child: Text(
                  'Break in minutes',),onpressed: () => {},Container(
              height: 35,child: SpinBox(
                min: 0,max: 120,value: 60,onChanged: (value) => breaktime = value.toInt(),],);
  }
}


解决方法

不幸的是,基于 SpinBox sources,没有简单的方法可以做到。

幸运的是,有一个解决方法:

class MyApp extends StatelessWidget {
  final spinBoxKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: SpinBox(
            key: spinBoxKey,),floatingActionButton: FloatingActionButton(
          onPressed: () {
            final focusNode = (spinBoxKey.currentState as dynamic).focusNode as FocusNode;
            focusNode.requestFocus();
          },child: Icon(Icons.keyboard),);
  }
}
  • 为小部件(在本例中为 SpinBox)分配一个 GlobalKey
  • 点击:
    • 使用您之前创建的密钥提取 BaseSpinBoxState 状态
    • BaseSpinBoxStatefocusNode 个 getter,调用它并在其上调用 requestFocus