首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据数据库中的数据在最终列表中添加循环?

如何根据数据库中的数据在最终列表中添加循环?
EN

Stack Overflow用户
提问于 2022-07-04 05:44:30
回答 2查看 192关注 0票数 0

我想在循环中显示图像,这些图像存储在列表小部件中,但这是静态数据。像这样:-

最终名单=[

“资产/图像/人”,

“资产/图像/人”、“资产/图像/人”、

“资产/图像/人”,

“资产/图像/人”,

];

现在,我想用动态数据显示这个列表,这就是为什么我有一个从数据库返回图像的API。现在,我想在final List<String> imgs = []小部件中显示这些图像。那么如何在这个小部件中添加循环呢?请帮帮我。在图像中,我存储来自数据库的图像URL。

我想在List widget中显示这些图像

这是我的代码:

代码语言:javascript
复制
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:io';
import 'package:mindmatch/utils/Auth.dart';
import 'package:http_parser/http_parser.dart';

class ProfileImages extends StatefulWidget {

ProfileImages({Key? key}) : super(key: key);

@override
_ProfileImages createState() => _ProfileImages();
}

class _ProfileImages extends State<ProfileImages>{

 var UsrID = Auth.prefs?.getString('usrid');
 var Imagedata;
 var Images = "";

 @override
  void initState() {
  super.initState();

  getImageData();

 }

 getImageData() async{
 var res = await http.get(Uri.https('www.*******.net', '/mm_api/index.php',{'act':'usrPhotos','UsrID': '${UsriD}'}));
 var jsonData = json.decode(res.body);
 var images = jsonData.map<String>((json) => json['image']).toList();
//print(images);

 setState(() {
  for(var img in images){
    imgs.add(img);
  }
 });
 }

 final List<String> imgs = [];




@override
Widget build(BuildContext context) {


return
  Imagedata != null?GFItemsCarousel(
  rowCount: 3,
  //itemHeight: MediaQuery.of(context).size.height / 1.5,
  children: imgs.map(
        (url) {
      return Container(
        child: ListView.builder(
          itemCount: imgs.length,
          itemBuilder: (context, index) {
            //check the image if it is asset or network
              return Container(
                margin: EdgeInsets.all(5.0),
                child: Stack(
                  children: [
                    ClipRRect(
                      borderRadius: BorderRadius.all(Radius.circular(8.0)),
                      child:
                      Image.network(imgs[index]),
                    ),
                    Positioned(
                      top: 9,
                      right: 9,
                      child: SvgPicture.asset(
                        width: 30,
                        'assets/images/close.svg',
                        height: 30,
                      ),
                    )
                  ],

                ),
              );

          },
        ),
      );
    },
  ).toList(),
): const Center(
    child: CircularProgressIndicator(),
);
}
}

在image变量中,我从数据库中存储完整的图像URL,但是如何在List widget中显示它--请帮助我在循环中显示这些图像。

这是我的JSON数据:-

代码语言:javascript
复制
[{"id":"8","image":"5e11b3c030f07b70ee982158bccff41f.jpeg"},{"id":"9","image":"158ad385dff9ec07a40d4401351de434.jpeg"},{"id":"10","image":"af8079a1832c0458b80ac17c865a840b.jpeg"}]

这是一个新的错误,请大家帮助我。

请帮助我如何显示这些图像。

EN

回答 2

Stack Overflow用户

发布于 2022-07-04 05:54:26

从响应中提取图像并将其添加到imgs列表中。

代码语言:javascript
复制
  var res = await http.get(Uri.https('www.*******.net', '/mm_api/index.php',{'act':'usrPhotos','UsrID': '${UsrID}'}));
  Imagedata = jsonDecode(res.body);

  
  imgs.clear();
  ImagesData.forEach((e){
imgs.add(e.image);

})

 }```

Then after 

ClipRRect(
              borderRadius: BorderRadius.all(Radius.circular(8.0)),
              child:

//append with baseURL
              Image.network(
             "https://www.*******.net/files/profile/" +   url,
                fit: BoxFit.cover,
              ),
            ),
票数 0
EN

Stack Overflow用户

发布于 2022-07-04 06:00:58

像这样使用ListView.builder

用于资产映像

代码语言:javascript
复制
ListView.builder(
  itemCount: img.length,
  itemBuilder: (BuildContext context, int index) {
  return new Image.asset(img[index], fit: BoxFit.cover);
 },
);

来自网络的图像

代码语言:javascript
复制
 ListView.builder(
      itemCount: urls.length,
      itemBuilder: (BuildContext context, int index) {
        return Image.network(urls[index]);
      },
    );
  }

您可以使用cached_network_image从网络中获取图像一次,然后从本地缓存获取图像。

在您的示例中,成功地从数据库获取图像之后,将它们与imgs列表合并

getImageData更改为

代码语言:javascript
复制
 getImageData() async{
  var res = await http.get(Uri.https('www.*******.net', '/mm_api/index.php',{'act':'usrPhotos','UsrID': '${UsrID}'}));
  var jsonData = json.decode(res.body);
  var images = jsonData.map<String>((json) => json['image']).toList();
  
  setState(() {
     for(var img in images){
       imgs.add(img);
   }  
  });
 }

build更改为

代码语言:javascript
复制
@override
Widget build(BuildContext context) {

  return Scaffold(
    appBar: AppBar(
      title: Text("Profile Images"),
    ),
    body: Container(
      child: ListView.builder(
        itemCount: imgs.length,
        itemBuilder: (context, index) {
          //check the image if it is asset or network 
          if(imgs[index].contains("assets")){
            return Container(
              margin: EdgeInsets.all(10),
              child: Image.asset(imgs[index]),
            );
          }else{
            return Container(
              margin: EdgeInsets.all(10),
              child: Image.network(imgs[index]),
            );
          }
        },
      ),
    ),
  );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72852212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档