问题描述
我使用 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
状态 -
BaseSpinBoxState
有focusNode
个 getter,调用它并在其上调用requestFocus
- 使用您之前创建的密钥提取