首页 > 解决方案 > 使用共享首选项插件时出现问题

问题描述

我正在研究颤振,但共享首选项插件有问题,这是我的代码:

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

标签: fluttersharedpreferences

解决方案


  1. 你必须结束你的main()方法runApp(NewsApp());
  2. 将您的逻辑代码从main()方法移动到NewsApp小部件。
  3. 将您的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,
    );
  }
}

推荐阅读