Flutter Globals теряют свою ценность - PullRequest
1 голос
/ 22 марта 2019

Хорошо, я уверен, что это, вероятно, вопрос, на который легко ответить, но после долгих поисков я не могу разобраться с решением.

Как можно создать переменную в приложении в Flutter / DartXYZ, который сохраняет свое значение в течение времени, когда пользователь уходит из приложения, использует другое приложение, позволяет телефону перейти в спящий режим и т. Д., А затем снова открывает приложение XYZ.

Я создалкрошечное приложение, которое демонстрирует проблему, как показано ниже.

Статическая переменная Globals.UID может быть увеличена вверх, но если приложение удалено от (какой термин описывает использование другого приложения правильно?), то, как отмечалось,телефон переходит в спящий режим, когда пользователь возвращается в приложение, переменная Globals.UID сбрасывается обратно на -1.

Иногда сброс происходит не сразу, и я вынужден оставить телефон IOS в спящем режиме на 5 минут.чтобы воссоздать поведение.

В основном мне нужно Globals.UID, чтобы сохранять его значение до тех пор, пока приложение не будет фактически закрыто.

Любое понимание действительно будет приложениемreciated.

import 'package:flutter/material.dart';

import 'package:test_flutter/Globals.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;

      Globals.UID ++;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
            Text ( "Global variable is:")
            , Text ( Globals.UID.toString() )
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

И в другом файле под названием Globals.dart

class Globals {

  static int    UID = -1;
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2019

На самом деле это происходит, когда вы не импортируете со ссылкой.Это известные проблемы, которые уже исправлены, возможно, еще не приземлились.Вы можете проверить проблему здесь .

Пожалуйста, попробуйте import package_name/globals.dart вместо import globals.dart, если вы это делаете.

Надеюсь, что это поможет!

0 голосов
/ 23 марта 2019

В конечном итоге решение, по-видимому, решается в основном с помощью библиотеки shared_preferences. Это решение сопряжено с множеством задокументированных проблем, но для сохранения данных, когда приложение находится в фоновом режиме или даже может быть убито пользователем, возможно, стоит использовать shared_preferences.

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