gpt4 book ai didi

flutter - 单击Flutter中的按钮时如何将对象存储在数组中?

转载 作者:行者123 更新时间:2023-12-03 04:15:44 26 4
gpt4 key购买 nike

我是Flutter的新手。我想单击按钮时将所有id存储在数组中。如果可以的话请给我一个解决方案,然后我接受您的回答这里有人为此提供解决方案吗?提前致谢。这是我的代码。

错误的样子,

[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: type 'String' is not a subtype of type 'List<String>'

码:
_saveQtyValue(id) async {
print(id);
var pId = id; // 5d9890c7773be00ab5b41701


final prefs = await SharedPreferences.getInstance();
prefs.setStringList('id_list', pId);

List<String> show_id = List<String>();
show_id = prefs.getStringList('id_list');
print('id====$show_id');

List<String> list = show_id;
list.add(id);
print('list id=====$list');


}

在单击_saveQtyValue()函数传递ID时,我要将所有ID存储在一个数组中。

完整代码:
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';
import 'package:spurtcommerce/config.dart' as config;
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:toast/toast.dart';

class ProductViewScreen extends StatefulWidget {
final id;
final name;
ProductViewScreen({Key key, @required this.id, this.name}) : super(key: key);
@override
ProductViewScreenState createState() => ProductViewScreenState();
}

class ProductViewScreenState extends State<ProductViewScreen> {
List product;
List productImage;
List pId;

// List<String> productIdArray = new List();

@override
void initState() {
super.initState();
this.getProduct(); // Function for get product details
}

/*
* For Product get by id
*/
Future<String> getProduct() async {
var id = this.widget.id;
var response = await http.get(
Uri.encodeFull(config.baseUrl + 'product-store/productdetail/$id'),
headers: {"Accept": "application/json"});
setState(() {
product = json.decode(response.body)['data'];
});

setState(() {
productImage = product[0]['productImage'];
});

return "Successfull";
}

_saveQtyValue(id) async {
print(id);
// var pId = id;
setState(() {
pId = id;
});
print('state id===$pId');
final prefs = await SharedPreferences.getInstance();
prefs.setStringList('id_list', pId);

List<String> show_id = List<String>();
show_id = prefs.getStringList('id_list');
print('id====$show_id');

List<String> list = show_id;
list.add(id);
print('list id=====$list');

Toast.show("Added in cart", context,
duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
}

@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(this.widget.name),
actions: [
Icon(
Icons.notifications,
color: Colors.yellowAccent,
size: 24.0,
),
],
),
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: <Widget>[
Column(children: [
CarouselSlider(
height: 200.0,
items: productImage.map((i) {
return Builder(
builder: (BuildContext context) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 5.0),
child: Image.network(
config.mediaUrl +
'${i['containerName']}' +
'${i['image']}',
width: 200,
height: 200,
fit: BoxFit.fill));
},
);
}).toList(),
),
]),
new Row(children: <Widget>[
Expanded(
child: SizedBox(
height: 700.0,
child: new ListView.builder(
itemCount: product.length,
itemBuilder: (BuildContext ctxt, int i) {
return SizedBox(
child: Card(
color: Colors.grey[200],
child: Padding(
padding:
EdgeInsets.only(right: 5.0, left: 5.0),
child: new Container(
margin: EdgeInsets.all(10),
child: Column(
children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Text(
'${product[i]['name']}',
textAlign: TextAlign.left,
style: TextStyle(fontSize: 15.0),
),
),
new Divider(),
Align(
alignment: Alignment.centerLeft,
child: Text(
'Category: ${product[i]['Category'][0]['categoryName']}',
textAlign: TextAlign.right,
style: TextStyle(fontSize: 15.0),
),
),
new Divider(),
Align(
alignment: Alignment.centerLeft,
child: Text(
'Availability : ${product[i]['price']}',
textAlign: TextAlign.right,
style: TextStyle(fontSize: 15.0),
),
),
new Divider(),
Align(
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
children: <Widget>[
Text(
'Rs. : ${product[i]['price']}',
textAlign: TextAlign.right,
style: TextStyle(
fontSize: 15.0,
color: Colors.red),
),
],
),
],
)),
new Divider(),
Align(
alignment: Alignment.center,
child: Icon(
Icons.favorite,
color: Colors.deepPurple,
size: 40.0,
),
),
new Divider(),
Align(
child: Card(
child: FlatButton(
onPressed: () => {
_saveQtyValue(
'${product[i]['productId']}')
},
color: Color.fromRGBO(
94, 199, 182, 0.9),
padding: EdgeInsets.all(10.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.center,
children: <Widget>[
Icon(Icons.shopping_cart),
Text(
" Add to Cart",
)
],
),
),
),
),
new Divider(),
Align(
alignment: Alignment.topLeft,
child: Text(
'Description',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold),
),
),
Align(
alignment: Alignment.center,
child: Html(
data:
'${product[i]['description']}',
)),
],
)),
),
),
);
},
)),
),
]),
],
)));
}
}

我想要这种格式
[{5d9890c7773be00ab5b41701},{5d9890c7773be00ab5b41702}]

最佳答案

_saveQtyValue(id) async {
print(id);
var pId = id; // 5d9890c7773be00ab5b41701


final prefs = await SharedPreferences.getInstance();

List<String> show_id = prefs.getStringList('id_list') ?? List<String>(); // <-EDITED HERE
print('id====$show_id');

List<String> list = show_id;
list.add(id);
prefs.setStringList('id_list', list);

print('list id=====$list');


}

我对您的函数进行了较小的编辑,这应该保存字符串列表。该代码可以通过其他方式进行改进。

关于flutter - 单击Flutter中的按钮时如何将对象存储在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58760834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com