如何从SharedPreferences获取值?解决Future/await及返回报错问题
问题原因
build方法要求同步返回Widget,你之前的写法中,return语句写在then的异步回调里,返回值仅作用于回调函数本身,build方法没有明确的返回值,因此触发缺少返回路径的报错。
解决方法
使用Flutter内置的FutureBuilder组件处理异步逻辑的UI构建即可,示例代码如下:
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder( // 传入读取SharedPreferences的异步Future future: sharedGetData(Application.USER_LOGIN), builder: (context, AsyncSnapshot snapshot) { // Future执行完成的分支 if (snapshot.connectionState == ConnectionState.done) { // 读取值为true判定为已登录,空值/其他值均判定为未登录 bool isLogin = snapshot.data == true; return MaterialApp( home: isLogin ? DashboardScreen() : LoginScreen(), ); } // Future还在加载的分支,可替换为App启动屏提升体验 return MaterialApp( home: Scaffold( body: Center(child: CircularProgressIndicator()), ), ); }, ); } }
FutureBuilder会自动监听传入Future的执行状态,加载阶段返回你指定的占位组件,加载完成后根据返回值构建对应页面,完全符合build方法的返回要求。
补充优化点
- 若需要处理读取异常场景,可在
builder中新增if(snapshot.hasError)分支,指定异常时的跳转逻辑 - 可将
sharedGetData方法的返回类型调整为Future<bool?>,减少后续类型判断的额外操作
内容的提问来源于stack exchange,提问作者milox
相关产品推荐
相关产品推荐

