php - Flutter/MySQL:如何将 URL 从 mysql 数据库传递到 PageView/ImageSlider Widget?
问题描述
我想将动态数量的图像 url 从我的 mysql 数据库传递到 PageView Widget 作为简单的 ImageSlider。
问题:一些类型错误,例如“参数类型 'List(ImageList)' 不能分配给参数类型 String”。或者“类型列表(动态)不是类型列表(字符串)”等的子类型,如果我将选择传递给小部件。
问题:如何将数据库中的选择传递给 PageView Widget?我必须更改我的 sql 选择吗?
在我的带有静态列表的简短代码示例下方(什么工作正常):
final _images = ["url1","url2",];
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 16 / 9,
child: PageView(
physics: BouncingScrollPhysics(),
controller: _pageController,
children: _images.map((item) => Image.network(item,)).toList(),
),
);
}
到目前为止我尝试了什么:
从数据库中选择 json 或字符串 (GROUP_CONCAT(image)) --> 不成功
为 php-download 更改 Future 中的数据类型 --> 没有成功
试图作为 String 或 List(String) 传递给地图 --> 没有成功
如果有人有想法会很棒。如果需要更多代码/答案,请发表评论。非常感谢你。
解决方案
//this is the first part from link in the comment above
List<Payload> payloadFromJson(String str) => List<Payload>.from(json.decode(str).map((x) => Payload.fromJson(x)));
String payloadToJson(List<Payload> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Payload {
String sponsorlogo;
Payload({
this.sponsorlogo,
});
factory Payload.fromJson(Map<String, dynamic> json) => Payload(
sponsorlogo: json["image"] == null ? null : json["image"],
);
Map<String, dynamic> toJson() => {
"image": sponsorlogo == null ? null : sponsorlogo,
};
}
//now the second part looks like these
Future<List<Payload>> dlimagelist(String idaddress) async {
var map = Map<String, dynamic>();
map['idaddress'] = idaddress;
final response = await post("<url>.php", body: map);
var payloadList = payloadFromJson(response.body);
return payloadList;
}
//the third part is my future builder where i select with the cutomer id 'idaddress' or widget.id
body: FutureBuilder(
future: Future.wait(
[download1('${widget.id}'), download2('${widget.id}'), dlimagelist('${widget.id}')]),
builder: (context, snapshot) {
List<Payload> imagelist = snapshot.data[2];
return Scrollbar(
controller: _controller,
child: ListView(
children: [
if (imagelist.isNotEmpty) SliderWidget(imagelist) else StandardImage(snapshot.data[0]),
//some other widgets
],
),
);
},
),
//the last part is my Widget
class SliderWidget extends StatefulWidget {
final List<Payload> list;
SliderWidget(this.list);
@override
_SliderWidgetState createState() => _SliderWidgetState();
}
class _SliderWidgetState extends State<SliderWidget> {
PageController _pageController = PageController(initialPage: 1);
int _currentIndex = 1;
@override
Widget build(BuildContext context) {
final _images = widget.list;
List addedImages = [];
if (_images.length > 0) {
addedImages
..add(_images[_images.length - 1])
..addAll(_images)
..add(_images[0]);
}
return AspectRatio(
aspectRatio: 16 / 8,
child: Stack(
children: [
PageView(
physics: BouncingScrollPhysics(),
controller: _pageController,
onPageChanged: (page) {
int newIndex;
if (page == addedImages.length - 1) {
newIndex = 1;
_pageController.jumpToPage(newIndex);
} else if (page == 0) {
newIndex = addedImages.length - 2;
_pageController.jumpToPage(newIndex);
} else {
newIndex = page;
}
setState(() {
_currentIndex = newIndex;
});
},
children: addedImages
.map((item) => Container(
margin: EdgeInsets.fromLTRB(10, 10, 10, 0),
child: ClipRRect(
borderRadius: BorderRadius.circular(10),
child: Image.network(
item.sponsorlogo,
fit: BoxFit.contain,
),
),
))
.toList(),
),
Positioned(
bottom: 5,
left: 0,
right: 0,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: _images
.asMap()
.map((i, v) => MapEntry(
i,
Container(
width: 6,
height: 6,
margin: EdgeInsets.only(left: 2, right: 2),
decoration: ShapeDecoration(
color: _currentIndex == i + 1 ? Colors.red : Colors.white,
shape: CircleBorder(),
),
)))
.values
.toList(),
),
)
],
),
);
}
}
推荐阅读
- ruby-on-rails - 制作api时更新函数单向改变参数
- coldfusion - 如何将 ReportCloud API 响应返回到可下载文件中?
- javascript - 如何使用 AJAX 插入具有不同连接 ID 的同一张表
- php - PHP MYSQL 输入表单需要输入特定的单词
- bash - 我应该如何在 bash 中有效地基于公共文本字符串提取和组合部分文件?
- python - Python子进程错误:Popen,调用,运行“没有这样的文件或目录:错误
- javascript - 将字符串拆分为对象 JavaScript
- html - 容器内的 CSS 行
- django - 如何配置 Django url 以指向页面中的特定部分?
- django - Django 1.11 - 为生产中的现有用户添加权限