اذهب إلى المحتوى
  • 0

جلب اكثر من صوره في وقت واحد الى listview في فلاتر

Flutter Dev

السؤال

تحيه طيبه للجميع 

اقوم بعرض مجموعة من الصور للمستخدم تم تخزينها مسبقا على قاعدة البيانات من خلال listview  بالاضافة الى استعمال المكتبة :

https://pub.dev/packages/wechat_assets_picker

من خلالها اقوم باضافة المزيد من الصور بجانب الصور التي احصل عليها من قاعدة البيانات الى نفس listview  السابقة.

المشكله الان لما اذهب الى اختيار الصور واختار صور عدد (2) او (3) على سبيل المثال من الصور على الهاتف بعد الضغط على ادراج انا احصل على صوره واحده فقط وهيا اول صوره تم تحديدها من اصل (2) التي تم اختيارهم او (3) ولو رجعت لختيار مجموعة مختلفه من الصور رح اجد ان الصور تم تحديدها فعلا مسبقاً ولكن لم يتم سحبها الى listview ولو قمت بضغط على ادراج من جديد سوف يتم استكمال العملية وادراج الصوره التاليه التي سبق وتم تحديدها سابقاً.

الكود المستعمل كالتالي كامل:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:wechat_assets_picker/wechat_assets_picker.dart';



void main() {
  runApp(
    MyApp(),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: UpdateItem(),
    );
  }
}

class UpdateItem extends StatefulWidget {

  @override
  _update_profiletttState createState() => new _update_profiletttState();
}

class _update_profiletttState extends State<UpdateItem> {

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

  void init() {

    GetImage().then((value) {
      setState(() {
        users.addAll(value);
        filteredUsers = users;

      });
    });
  }

  List<DataImage> users = [];
  List<DataImage> filteredUsers = [];



  final _formKeys = GlobalKey<FormState>();


 var  imagesCounter = 0;

  String api;
  Future<List<DataImage>> GetImage() async {
    api = '*****************************' ;
    var response = await http.post(Uri.parse(api));
    if (response.statusCode == 200) {
      final items = json.decode(response.body).cast<Map<String, dynamic>>();
      List<DataImage> listOfFruits = items.map<DataImage>((json) {
        return DataImage.fromJson(json);
      }).toList();
      imagesCounter = listOfFruits.length; 
      return listOfFruits;
    }

  }

  List<AssetEntity> assets = <AssetEntity>[];

  @override
  Widget build(BuildContext context) {


    return  MaterialApp(
      home: Scaffold(

        body: Form(
            key: _formKeys,
            child:  Center(
              child:   ListView(
                children: <Widget>[

                  Card(
                    child: new Column(
                      children: <Widget>[
                        Container(
                          child: Center(
                            child: Column(
                              children: <Widget>[
                                Padding(
                                  padding: EdgeInsets.all(0),
                                  child: SingleChildScrollView(
                                    child: SizedBox(
                                      child: Column(
                                        //  mainAxisAlignment: MainAxisAlignment.start,
                                        //   crossAxisAlignment: CrossAxisAlignment.start,
                                        children: <Widget>[

                                          Column(
                                            children: <Widget>[
                                              AnimatedContainer(
                                                duration: kThemeAnimationDuration,
                                                curve: Curves.easeInOut,
                                                width: MediaQuery.of(context).size.width,
                                                height: filteredUsers.isNotEmpty ? 100.0 : 0.0,
                                                child: ListView.builder(
                                                    physics:  BouncingScrollPhysics(),

                                                    scrollDirection: Axis.horizontal,
                                                    itemCount: filteredUsers.length + 1  ,
                                                    itemBuilder: (BuildContext context, int index) {

                                                      if (index < filteredUsers.length) {
                                                        return Container(
                                                          margin: const EdgeInsets.symmetric(
                                                              horizontal: 0.5, vertical: 6.0),
                                                          child: AspectRatio(
                                                            aspectRatio: 1.0,
                                                            child: Stack(
                                                              children: <Widget>[

                                                                filteredUsers[index].isLocal ?


                                                                Image(
                                                                  image: AssetEntityImageProvider(
                                                                    assets.elementAt(index-imagesCounter) ,
                                                                    isOriginal: false,
                                                                  ),
                                                                  fit: BoxFit.cover,
                                                                )


                                                                    : Image.network(
                                                                  filteredUsers[index].ImageURL.toString(),
                                                                  width: double.infinity,
                                                                  height: 400,
                                                                  fit: BoxFit.cover,
                                                                ),




                                                              ],

                                                            ),
                                                          ),
                                                        );
                                                      }
                                                      else {

                                                        return
                                                          IconButton(
                                                            icon: Icon(Icons.add,size: 50,),
                                                            onPressed: ()  async {

                                                              final List<AssetEntity> result = await AssetPicker.pickAssets(context,
                                                                 // maxAssets: 4,
                                                                  pathThumbSize: 84,
                                                                  gridCount: 4,
                                                                  selectedAssets: assets,
                                                                  maxAssets: 4 - imagesCounter,
                                                                  //we use this for languge
                                                                  textDelegate: EnglishTextDelegate());

                                                              if (result != null) {

                                                                setState(() {

                                                                  assets = List<AssetEntity>.from(result);

                                                                  filteredUsers.add(DataImage( isLocal: true));


                                                                });
                                                              }



                                                            },
                                                          );

                                                      }

                                                    }

                                                  //itemBuilder: assetItemBuilder,
                                                ),
                                              )

                                            ],
                                          ),

                                        ],
                                      ),
                                    ),
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                        /*     Card(
                                child: showImage(),
                              ),*/

                      ],
                    ),
                  ),


                ],
              ),
            )),
      ),
    );
  }



}
class DataImage {

  bool isLocal;
  String ImageURL;


  DataImage(
      { this.ImageURL, this.isLocal = false});

  factory DataImage.fromJson(Map<String, dynamic> json) {
    return DataImage(

      ImageURL: json['image'].toString(),

    );
  }

  Map<String, dynamic> toJson() => {

    'ImageURL': ImageURL,
    'isLocal': isLocal,

  };


}

ياليت اذا احد لديه فكره عن سبب المشكله وكيفية حلها يفيدنا بارك الله فيكم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ منذ ساعة مضت قال Wael Aljamal:

ماذا تقصد بعملية الطرح هذه.

اقوم بانقاص ما سبق وتم تحميله عن طريق الشبكه من قاعدة البيانات بدونه واجهت نفس المشكله مع اضافة صوره واحده جديده حتى بعد اضافته حسب ما اشرت انت سابقا

maxAssets: 4 - imagesCounter,

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 ساعات قال مروان مروان3:

اقوم بانقاص ما سبق وتم تحميله عن طريق الشبكه من قاعدة البيانات بدونه واجهت نفس المشكله مع اضافة صوره واحده جديده حتى بعد اضافته حسب ما اشرت انت سابقا

maxAssets: 4 - imagesCounter,

هل يمكنك كتابة الخطوات التي تتبعها، اي كيفية الربط بين الإضافة و التعديل وهكذا..

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...