Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 使用不同初始路径的颤振_Dart_Flutter - Fatal编程技术网

Dart 使用不同初始路径的颤振

Dart 使用不同初始路径的颤振,dart,flutter,Dart,Flutter,我有一个移动应用程序,我想用共享的首选项保存页面。但这不是问题所在。 在我的主应用程序中,我想将initialRoute属性设置为退出后查看的最新页面。但它只是返回主路线“/”。 代码如下: class _MainAppState extends State<MainApp> { var _currentRoute; _getCurrentRoute() async { SharedPreferences preferences = await SharedPrefe

我有一个移动应用程序,我想用共享的首选项保存页面。但这不是问题所在。 在我的主应用程序中,我想将initialRoute属性设置为退出后查看的最新页面。但它只是返回主路线“/”。 代码如下:

class _MainAppState extends State<MainApp> {
  var _currentRoute;

 _getCurrentRoute() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      _currentRoute = preferences.getString('LastScreenRoute');
      if (_currentRoute == null) {
        _currentRoute = '/';
        preferences.setString('LastScreenRoute', _currentRoute);
      }
    });
    print(_currentRoute); // result here is true and It's the current page
}

@override
initState() {
  super.initState();
  _getCurrentRoute();
  print(_currenRoute); // but here It's null!
}

@override
Widget build(BuildContext context) {
  return MaterialApp(
    debugShowCheckedModeBanner: false,
    initialRoute: _currentRoute,
    routes: {
      '/': (context) => FirstPage(),
      '/RegisterScreen': (context) => Register(),
      '/LoginScreen': (context) => Login(),
      '/HomeScreen': (context) => HomePage(),
    },
  );
}
class\u MainAppState扩展状态{
var_电流路径;
_getCurrentRoute()异步{
SharedReferences首选项=等待SharedReferences.getInstance();
设置状态(){
_currentRoute=preferences.getString('LastScreenRoute');
如果(_currentRoute==null){
_currentRoute='/';
preferences.setString('LastScreenRoute',_currentRoute);
}
});
print(_currentRoute);//这里的结果为true,它是当前页面
}
@凌驾
initState(){
super.initState();
_getCurrentRoute();
print(_currenRoute);//但这里是空的!
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
initialRoute:_currentRoute,
路线:{
“/”:(上下文)=>FirstPage(),
“/RegisterScreen”:(上下文)=>Register(),
“/LoginScreen”:(上下文)=>Login(),
“/HomeScreen”:(上下文)=>HomePage(),
},
);
}
\u getCurrentRoute()
是异步的,所以不会立即完成。这就是为什么
\u currentRoute
在注释行中仍然为空;
\u getCurrentRoute()
还没有完成,所以没有设置
\u currentRoute

在制作
MaterialApp
之前,您需要等待它设置好,例如:

@override
Widget build(BuildContext context) {
  return (_currentRoute == null) ? Container() : MaterialApp(

print(\u currenRoute);
initState()
中的
可以在
\u getCurrentRoute()
之前调用。使
getCurrentRoute()
方法返回一个路由,并打印该路由,而不是全局变量
\u currentRoute
。打印不是问题。我想使用我在\u getCurrentRoute()中得到的\u currentRoute()在initialRoute属性中。但是initialRoute前面的_currentRoute为null,并且它一直自动变为“/”。非常感谢。我不知道这一点。