проблема при использовании плагина общих настроек - PullRequest
0 голосов
/ 13 апреля 2020

Я работаю над флаттером, и у меня возникла проблема с плагином Shared Preference. Это мой код:

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 , Создание нового FlutterEngine для этого FlutterFragment. D / FlutterActivityAndFragmentDelegate (1817): Присоединение FlutterEngine к действию, которому принадлежит этот фрагмент. D / FlutterView (1817): Присоединение к FlutterEngine: io.flutter.embedding.engine. FlutterEngine@e2b1eab

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020
  1. Вы должны завершить свой метод main() с помощью runApp(NewsApp());
  2. переместить свой логический c код из метода 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,
    );
  }
}
0 голосов
/ 13 апреля 2020

Нам нужно добавить WidgetsFlutterBinding.ensureInitialized();, прежде чем получить

await SharedPreferences.getInstance();

Как:

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();
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...