无法从sharedPrefrence颤振获取数据列表

时间:2020-08-13 09:47:15

标签: flutter

当我按下一个按钮时我试图保存数据列表,然后我试图将数据访问到其他屏幕。但是它会引发错误

我遇到错误

E/flutter (17394): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: type 'List<String>' is not a subtype of type 'FutureOr<String>'
E/flutter (17394): #0      SharedPrefrence.getCartItem (package:boon/Utils/SharedPrefrence.dart:26:5)
E/flutter (17394): <asynchronous suspension>

具有保存列表和检索列表的Sharedprefrence类

Future<bool> setCartItem(List<String> list) async
  {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.setStringList("cartkey", list);
  }

  Future<String> getCartItem() async
  {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getStringList("cartkey") ?? '';
  }

在按钮中按下

SharedPrefrence().setCartItem(cartdatalist);

虚假数据

List<String> cartdatalist=['TWA Cap','₹575','M','Red'];

其他页面中的InitState可以访问保存的数据

void initState() {
    // TODO: implement initState
    super.initState();
    Future listdata = SharedPrefrence().getCartItem();
    listdata.then((data) async {
      listdata = data;
      print(listdata);
    });
  }

2 个答案:

答案 0 :(得分:1)

Future<List<String>> getCartItem() async
  {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getStringList("cartkey") ?? '';
}

其他页面

void initState() {
  super.initState();
  SharedPrefrence().getCartItem().
  then((data) async {
  listdata = data;
  print(listdata);
});
}

答案 1 :(得分:0)

您需要将getCartItem()函数的返回类型更改为Future<List<String>>。当Listprefs.getStringList("cartkey")时,还需要返回一个空的null

  Future<List<String>> getCartItem() async
  {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getStringList("cartkey") ?? [];
  }

然后像这样访问它。

void initState() {
    super.initState();
    List<String> listdata;
    SharedPrefrence().getCartItem().then((data) {
      listdata = data;
      print(listdata);
    });
  }