一行代码解决Scrollview和TextInput焦点获取问题
在Flutter中,如果你想要在ScrollView中使用TextInput时避免键盘遮盖TextInput,你可以使用FocusNode
来控制焦点。以下是一个简单的例子,展示了如何在ScrollView中使用TextFormField
并保证键盘在滚动时不会遮盖输入框:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: FocusScope(
node: FocusScopeNode(),
child: ListView(
children: <Widget>[
Container(
height: 80,
color: Colors.blue,
child: const Center(child: Text('Header')),
),
const SizedBox(height: 20),
TextFormField(
focusNode: FocusNode(),
decoration: InputDecoration(hintText: 'Input Field 1'),
),
const SizedBox(height: 20),
TextFormField(
focusNode: FocusNode(),
decoration: InputDecoration(hintText: 'Input Field 2'),
),
// ...add more TextFormFields if needed...
const SizedBox(height: 20),
Container(
height: 80,
color: Colors.blue,
child: const Center(child: Text('Footer')),
),
],
),
),
),
),
);
}
}
在这个例子中,我们使用了FocusScope
来包裹ListView
,这样在TextFormField
获取焦点时,键盘会自动滚动ListView
而不会遮盖输入框。每个TextFormField
都有自己的FocusNode
,这样它们可以独立地管理焦点。如果你不需要多个TextFormField
的焦点管理,可以共享同一个FocusScopeNode
。
评论已关闭