Flutter 如何在第一屏前调用SharedReference

Flutter 如何在第一屏前调用SharedReference,flutter,sharedpreferences,Flutter,Sharedpreferences,我正在登录屏幕上实现记住我选项,希望在创建小部件之前调用共享首选项。我们只有一个入口点,即主函数,但我们如何在这里调用函数来读取原始数据(电子邮件/密码) 读取布尔值 Future<bool> read(String key) async { final prefs = await SharedPreferences.getInstance(); return prefs.getbool(key); } 在构建任何窗口小部件之前,不要等待SharedRefe

我正在登录屏幕上实现记住我选项,希望在创建小部件之前调用共享首选项。我们只有一个入口点,即
主函数
,但我们如何在这里调用函数来读取原始数据(电子邮件/密码)

读取布尔值

 Future<bool> read(String key) async {
    final prefs = await SharedPreferences.getInstance();
     return prefs.getbool(key);
  }

在构建任何窗口小部件之前,不要等待SharedReference加载,只需显示一个带有进度指示器的加载程序窗口小部件,直到加载共享首选项,加载后,根据SharedReference加载的值显示所需的视图,以下是您如何修改代码,(将HomeView和RootView小部件替换为HomeView和/或路由的相应小部件)

void main(){
setupLocator();
runApp(材料应用程序)(
debugShowCheckedModeBanner:false,
主题:新主题数据(fontFamily:“OpenSans Light”),
initialRoute:Loader(),
onGenerateRoute:Router.generateRoute,
));
}
类加载器扩展StatefulWidget{
@凌驾
_LoaderState createState();
}
类_LoaderState扩展状态{
第一导航;
@凌驾
void initState(){
super.initState();
readSharedPref();
}
void readSharedPref()异步{
Utiles df=Utiles();
String isRem=wait df.read(“记住”);
如果(isRem.contains(“true”)){
设置状态(){
//firstNav='homeview';
firstNav=HomeView();//将HomeView替换为用于HomeView路由的小部件
});
}否则{
设置状态(){
//第一导航='/';
firstNav=RootView();//将RootView替换为用于/route的小部件
});
}
}
@凌驾
小部件构建(构建上下文){
return firstNav!=null?firstNav:Center(子项:CircularProgressIndicator(),);
}
}

在构建任何小部件之前,不要等待SharedReference加载,只需显示一个带有进度指示器的加载程序小部件,直到加载共享首选项,加载后,根据SharedReference加载的值显示所需的视图,以下是如何修改代码,(将HomeView和RootView小部件替换为HomeView和/或路由的相应小部件)

void main(){
setupLocator();
runApp(材料应用程序)(
debugShowCheckedModeBanner:false,
主题:新主题数据(fontFamily:“OpenSans Light”),
initialRoute:Loader(),
onGenerateRoute:Router.generateRoute,
));
}
类加载器扩展StatefulWidget{
@凌驾
_LoaderState createState();
}
类_LoaderState扩展状态{
第一导航;
@凌驾
void initState(){
super.initState();
readSharedPref();
}
void readSharedPref()异步{
Utiles df=Utiles();
String isRem=wait df.read(“记住”);
如果(isRem.contains(“true”)){
设置状态(){
//firstNav='homeview';
firstNav=HomeView();//将HomeView替换为用于HomeView路由的小部件
});
}否则{
设置状态(){
//第一导航='/';
firstNav=RootView();//将RootView替换为用于/route的小部件
});
}
}
@凌驾
小部件构建(构建上下文){
return firstNav!=null?firstNav:Center(子项:CircularProgressIndicator(),);
}
}

您需要将
main
函数设置为async,并添加一个
wait
和一行代码:

void main()异步{
//既然您的main是异步的,那么添加这些行是必要的
WidgetsFlutterBinding.ensureInitialized();
//现在您必须“等待”readSharedRef()函数
等待readSharedPref();
//这是你所有的代码
}

您需要将
main
函数设置为async,并添加一个
wait
和一行代码:

void main()异步{
//既然您的main是异步的,那么添加这些行是必要的
WidgetsFlutterBinding.enselineInitiated();
//现在您必须“等待”readSharedPref()函数
等待ReadSharedRef();
//这是你所有的代码
}
 Future<bool> read(String key) async {
    final prefs = await SharedPreferences.getInstance();
     return prefs.getbool(key);
  }

String firstNav;
void main() {

  setupLocator();
  readSharedPref();
  if(firstNav!=null)
    runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: new ThemeData(fontFamily: 'OpenSans-Light'),
      initialRoute: firstNav,
      onGenerateRoute: Router.generateRoute,
    ));
  }

  void readSharedPref() async {
    Utiles df=Utiles();
    String isRem=await df.read("remember");
    if (isRem.contains("true")) {
      firstNav='homeview';
    } else {
      firstNav='/';
    }
}


void main() {
  setupLocator();
    runApp(MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: new ThemeData(fontFamily: 'OpenSans-Light'),
      initialRoute: Loader(),
      onGenerateRoute: Router.generateRoute,
    ));

}

class Loader extends StatefulWidget {
  @override
  _LoaderState createState() => _LoaderState();
}

class _LoaderState extends State<Loader> {
  Widget firstNav;
  @override
  void initState() { 
    super.initState();
    readSharedPref();
  }
  void readSharedPref() async {
    Utiles df=Utiles();
    String isRem=await df.read("remember");
    if (isRem.contains("true")) {
      setState(() {
        // firstNav='homeview';
        firstNav=HomeView(); // replace HomeView with the widget you use for homeview route
      });
    } else {
      setState(() {
        // firstNav='/';
        firstNav=RootView(); // replace RootView with the widget you use for / route
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return firstNav != null ? firstNav : Center(child: CircularProgressIndicator(),);
  }
}