flutter - 使用共享首选项插件时出现问题
问题描述
我正在研究颤振,但共享首选项插件有问题,这是我的代码:
import 'package:flutter/material.dart';
import 'package:newsapp/screens/homescreen.dart';
import 'package:newsapp/screens/onboarding.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences prefs = await SharedPreferences.getInstance();
int seen1 = prefs.getInt('seen');
Widget _screen = HomeScreen();
if (seen1 == null || seen1 == 0)
_screen = OnBoarding();
else {
_screen = HomeScreen();
}
}
class NewsApp extends StatelessWidget {
final Widget _screen;
NewsApp(this._screen);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: this._screen,
);
}
}
这是错误信息:
没有提供首选的 FlutterEngine。为这个 FlutterFragment 创建一个新的 FlutterEngine。D/FlutterActivityAndFragmentDelegate(1817):将 FlutterEngine 附加到拥有该 Fragment 的 Activity。D/FlutterView(1817):附加到 FlutterEngine:io.flutter.embedding.engine.FlutterEngine@e2b1eab
解决方案
- 你必须结束你的
main()
方法runApp(NewsApp());
- 将您的逻辑代码从
main()
方法移动到NewsApp
小部件。 - 将您的
NewsApp
小部件转换为以StatefulWidget
适合您的数据SharedPreferences
。
像这样 :
import 'package:flutter/material.dart';
import 'package:newsapp/screens/homescreen.dart';
import 'package:newsapp/screens/onboarding.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(NewsApp());
}
class NewsApp extends StatefulWidget {
@override
_NewsAppState createState() => _NewsAppState();
}
class _NewsAppState extends State<NewsApp> {
final Widget _screen = HomeScreen();
@override
void initState() {
super.initState();
Future.delayed(Duration.zero, () async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int seen1 = prefs.getInt('seen');
if (seen1 == null || seen1 == 0)
_screen = OnBoarding();
else {
_screen = HomeScreen();
}
setState(() {});
}
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: this._screen,
);
}
}
推荐阅读
- git - Git 从分支签出文件而不更改索引
- java - 以编程方式设置 Spring OAuth2 userInfoUri
- python - 在 Python 中使用 if 语句打印二维数组
- swift - Swift:字符串中的子字符串(整数/数字)
- internet-explorer - 当操作 url 是跨域时,Microsoft 浏览器不会将表单发布到 iframe
- azure - 在 azure 上运行 docker 容器
- eclipse - 将现有工作空间中的项目从 ADT 转换为 Andmore
- microcontroller - 如何使用 SPI 总线对压力传感器进行编程
- c# - 如何一键获取gridcontrol中的所有数据
- .htaccess - 如何使用 htaccess 用连字符分隔两个变量