在我的应用程序中,我有一个始终可见的底部栏。我在这个网站中发现,在内存中保留选项卡同时拥有多个导航器的一个好方法是使用 Offscreen。但是,当我将导航器放入屏幕外时,它的任何内容都无法获得焦点。我做了一个非常简单的例子来重现我所说的:
void main() async {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
MyApp({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: MyHomeScreen(),
);
}
}
class MyHomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
child: Scaffold(
body: Stack(
children: [
Offstage(
offstage:false,
child: Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute(
builder: (BuildContext context) {
return Center(child: TextField());
},
);
},
),
),
Offstage(
offstage:true,
child: Navigator(
onGenerateRoute: (RouteSettings settings) {
return MaterialPageRoute(
builder: (BuildContext context) {
return Center(child: TextField());
},
);
},
),
),
],
),
),
);
}
}
如果单击文本字段,它将不会获得焦点,因此用户无法键入任何内容。
有没有办法将焦点引导到屏幕外的活动(可见)?对这个问题还有其他建议吗?
谢谢
这是Github中当前的问题。要解决这个问题,您需要在每个导航器顶部放置一个 FocusScope 小部件。
GH 线程中的此注释有一个示例:https://github.com/flutter/flutter/issues/17098#issuecomment-414610135