當鍵盤出現時,我想改變我的 ListView 的物理特性。我在flutter_keyboard_visibility的幫助下做到了這一點。布爾代碼:
class LoginSignUpScreen extends StatefulWidget {
const LoginSignUpScreen({Key? key}) : super(key: key);
@override
State<LoginSignUpScreen> createState() => _LoginSignUpScreenState();
}
class _LoginSignUpScreenState extends State<LoginSignUpScreen> {
late StreamSubscription<bool> keyboardSubscription;
bool isKeyboardVisible = false;
@override
void initState() {
super.initState();
var keyboardVisibilityController = KeyboardVisibilityController();
// Query
print('Keyboard visibility direct query: ${keyboardVisibilityController.isVisible}');
// Subscribe
keyboardSubscription = keyboardVisibilityController.onChange.listen((bool visible) {
print('Keyboard visibility update. Is visible: $visible');
isKeyboardVisible = visible;
});
}
@override
void dispose() {
keyboardSubscription.cancel();
super.dispose();
}
但布爾是正確的。鍵盤關閉時顯示 False,鍵盤啟動時顯示 true。這里的某個地方似乎是一個錯誤,但在哪里?!
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
toolbarHeight: 0.1,
backgroundColor: Colors.black,
),
body: Stack(
children: [
Stack(children: [
Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xfff68972), Color(0xfff67582)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
),
),
ScrollConfiguration(
behavior: MyBehavior(),
child: ListView(
controller: controllerV,
scrollDirection: Axis.vertical,
physics: isKeyboardVisible? const ClampingScrollPhysics(): const NeverScrollableScrollPhysics(),
children:const [
LoginForm(),
RegisterForm(),
]),
),
ElevatedButton(onPressed: (){print(isKeyboardVisible);}, child: Text("TEST?"))
]),
],
),
);
}
}
class MyBehavior extends ScrollBehavior {
@override
Widget buildOverscrollIndicator(BuildContext context, Widget child, ScrollableDetails details) {
return child;
}
}
在這種情況下,物理總是 Neverscrollable,所以初始化狀態,但狀態不再改變。
uj5u.com熱心網友回復:
// Subscribe
keyboardSubscription = keyboardVisibilityController.onChange.listen((bool visible) {
print('Keyboard visibility update. Is visible: $visible');
setState(() { isKeyboardVisible = visible; });
});
您需要在狀態更改時更新狀態
uj5u.com熱心網友回復:
你可以試試:
setState((){
isKeyboardVisible = visible;
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519340.html
標籤:扑镖用户界面状态管理
