0

我正在尝试获取未来的字符串值,并在颤动中保存状态。用户选择 endTime,它应该显示在 UI 上,直到它结束。但是,我收到以下错误:

type 'String' is not a subtype of type 'Future<String>' in type cast

方法:

final Future<SharedPreferences> _prefs = 
SharedPreferences.getInstance();
Future<String> _textLine = '' as Future<String>;

Future<String> fastTrue() async {
final SharedPreferences prefs = await _prefs;
String formattedDate = DateFormat('yyyy-MM-dd, 
   hh:mma').format(endTime);
final textLine = (prefs.getString('formattedDate') ?? 
 Languages.of(context)!.setYourFastTime) as Future<String>;

setState(() {
  _textLine = prefs.setString('formattedDate',
      Languages.of(context)!.endTimeIs
 +'\n$formattedDate').then((bool success) {
    return textLine;
  });
});
return textLine;
 }

在 initState() 中:

 @override
  void initState() {
  super.initState();
  
  _textLine = _prefs.then((SharedPreferences prefs) {
  return prefs.getString('formattedDate') ?? 
  Languages.of(context)!.setEndTime +'\n'+DateFormat('yyyy-MM-dd, 
 hh:mma').format(DateTime.now());
});

然后在我的小部件 build() 中:

  Padding(padding: const EdgeInsets.only(top: 170),
                child: FutureBuilder<String>(
                    future: _textLine,
                    builder: (BuildContext context, 
   AsyncSnapshot<String> snapshot) {
                      switch (snapshot.connectionState) {
                        case ConnectionState.waiting:
                          return const CircularProgressIndicator();
                        default:
                          if (snapshot.hasError) {
                            return Text('Error: ${snapshot.error}');
                          } else {
                            return Text(
                              Languages.of(context)!.endTimeIs + 
      "\n${snapshot.data}"
                            );
                          }
                      }
                    })),

请帮助我,尝试使用配置单元,但无法保存小部件的状态。谢谢!

4

1 回答 1

0

此代码引发错误,因为您尝试将 a 强制String转换为 a Future<String>>,尽管它是 a String

Future<String> _textLine = '' as Future<String>;

如果要声明Future带有值的 a,可以使用value方法。

Future<String> _textLine = Future.value('');
于 2022-03-01T13:50:14.987 回答