Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 弹出设置页面时加载SharedReference值_Dart_Flutter Layout - Fatal编程技术网

Dart 弹出设置页面时加载SharedReference值

Dart 弹出设置页面时加载SharedReference值,dart,flutter-layout,Dart,Flutter Layout,为了解决这个问题,我已经挣扎了好几天了。我扩展了长笛udacity课程,以帮助创建自己的应用程序,但进展并不顺利。在我的应用程序的背景中,我用从我的项目中的json文件获取的项目列表填充屏幕。该列表包含指向“我的资产”文件夹的路径,当用户点击listview中的listtile时,将在其中播放音频文件。当应用程序启动时,一切正常,但我添加了一个设置页面,用户可以更改音频音量,但它不工作。在我的settins页面中,我有一个滑块,其值保存在SharedReferences中,如下所示: _sav

为了解决这个问题,我已经挣扎了好几天了。我扩展了长笛udacity课程,以帮助创建自己的应用程序,但进展并不顺利。在我的应用程序的背景中,我用从我的项目中的json文件获取的项目列表填充屏幕。该列表包含指向“我的资产”文件夹的路径,当用户点击listview中的listtile时,将在其中播放音频文件。当应用程序启动时,一切正常,但我添加了一个设置页面,用户可以更改音频音量,但它不工作。在我的settins页面中,我有一个滑块,其值保存在SharedReferences中,如下所示:

 _saveSharedPreferences(double volume) async {
_prefs = await SharedPreferences.getInstance();
await _prefs.setDouble(VolumeLevelPrefKey, volume);
}
无论滑块值何时更改,我都会调用它

  ListTile(
                leading: Icon(
                  Icons.volume_down_sharp,
                  color: Colors.red,
                ),
                trailing: Container(
                  width: 290.0,
                  child: Slider(
                    divisions: 10,
                    max: 100.0,
                    label: '${_volume.round()}',
                    activeColor: Colors.blue,
                    inactiveColor: Colors.red,
                    value: _volume,
                    onChanged: (double value) {
                      setState(() {
                        _volume = value;
                        _saveSharedPreferences(_volume);
                      });
                    },
                  ),
                ),
              )
即使在应用程序重新启动后,我仍然设法保持滑块值不变。请在
ini状态()中读取值。

在第一次启动时,当前卷值加载没有问题,但当我导航到设置页面并返回时,该值保持不变

我在
inistate()
中读取了我的共享首选项值,并调用
setstate()
以确定是否调用了它。我也试着从
didChangeDependencies()
didUpDateWidgets()
中读取,但是没有调用它们。我还尝试将一个
UniqueKey()
传递给我的Listtile,它用音频文件填充listview,但不起作用

还有一件事是当导航器在我的background.dart中弹出设置页面时调用setState

 onPressed: () {
            Navigator.push(context,
                    MaterialPageRoute(builder: (context) => Settings()))
                .then((value) {
              setState(() {
                // refresh state of the BackDrop
              });
            });
          },
和设置。省道

 leading: IconButton(
      icon: Icon(Icons.arrow_back),
      onPressed: () {
        Navigator.pop(context, true);
      },
    ),
我在word_translation.dart文件中用这个世界列表填充背景

 /// Creates fresh list of [LIstTile] widgets, given a list of [Word]s.
void _createWordList() {
    final _audioCache = AudioCache();
    var newLists = <Widget>[];
    _readSharedPreferences();
    for (var word in widget.category.words) {
      newLists.add(
        Card(
          child: ListTile(
            leading: word.emoji == "" ? null : Image.asset(word.emoji),
            title: Text(word.english),
            subtitle: Text(
              word.akan,
              style: TextStyle(color: Colors.black, fontSize: 16.0),
            ),
            trailing: Icon(
              Icons.play_arrow,
              size: 28.0,
            ),
            onTap: () {
              _audioCache.play(word.audio, volume: _volume);
            },
          ),
        ),
      );
    }
    setState(() {
      _wordList = newLists;
    });
  }
///在给定[Word]列表的情况下,创建[LIstTile]小部件的新列表。
void _createWordList(){
final_audioCache=audioCache();
var newLists=[];
_ReadSharedReferences();
for(widget.category.words中的var单词){
newLists.add(
卡片(
孩子:ListTile(
前导:word.emoji==“”?空:Image.asset(word.emoji),
标题:文本(word.english),
字幕:文本(
阿肯先生,
样式:TextStyle(颜色:Colors.black,fontSize:16.0),
),
尾随:图标(
图标。播放箭头,
尺寸:28.0,
),
onTap:(){
_audioCache.play(word.audio,音量:_volume);
},
),
),
);
}
设置状态(){
_单词列表=新列表;
});
}

还有什么我可以尝试的吗?

通过阅读构建方法中的首选项解决了这个问题。我甚至不知道为什么我有时会在这里发帖

 /// Creates fresh list of [LIstTile] widgets, given a list of [Word]s.
void _createWordList() {
    final _audioCache = AudioCache();
    var newLists = <Widget>[];
    _readSharedPreferences();
    for (var word in widget.category.words) {
      newLists.add(
        Card(
          child: ListTile(
            leading: word.emoji == "" ? null : Image.asset(word.emoji),
            title: Text(word.english),
            subtitle: Text(
              word.akan,
              style: TextStyle(color: Colors.black, fontSize: 16.0),
            ),
            trailing: Icon(
              Icons.play_arrow,
              size: 28.0,
            ),
            onTap: () {
              _audioCache.play(word.audio, volume: _volume);
            },
          ),
        ),
      );
    }
    setState(() {
      _wordList = newLists;
    });
  }