首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在尝试使用getx获取滑块图像,但是有错误。

我正在尝试使用getx获取滑块图像,但是有错误。
EN

Stack Overflow用户
提问于 2022-01-26 03:21:57
回答 1查看 402关注 0票数 1

#这是我的模型课

代码语言:javascript
复制
List<SliderModel> sliderModelFromJson(String str) => List<SliderModel>.from(json.decode(str).map((x) => SliderModel.fromJson(x)));

String sliderModelToJson(List<SliderModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class SliderModel {
  SliderModel({
    this.id,
    this.title,
    this.description,
    this.image,
    this.type,
    this.url,
    this.schoolid,
  });

  int id;
  String title;
  dynamic description;
  String image;
  String type;
  String url;
  String schoolid;

  factory SliderModel.fromJson(Map<String, dynamic> json) => SliderModel(
    id: json["id"],
    title: json["title"],
    description: json["description"],
    image: json["image"],
    type: json["type"],
    url: json["url"],
    schoolid: json["schoolid"],
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "title": title,
    "description": description,
    "image": image,
    "type": type,
    "url": url,
    "schoolid": schoolid,
  };
}

#这是我的服务类,我在其中调用api

代码语言:javascript
复制
  static Future<List<SliderModel>> getSliderData(String id) async{
    var dio = don.Dio();
    don.Response response =await dio.get("https://shikshyasoftware.com.np/CoreApplicationandAPIService-4617993073/api/shikshyanotice?schoolid=$id") ;
    try{
      var responseData = response.data;
      if(response.statusCode==200){
        print("responseData:-${responseData}");
        return sliderModelFromJson(jsonEncode(responseData));
      }
    }catch(e){
      rethrow;
    }
  }

#这是我的控制器类

代码语言:javascript
复制
class SliderController extends GetxController{
  var isLoading = true.obs;
  var sliderData = <SliderModel>[];

  Future<void> fetchImageSilder(String id) async{
    try{
      isLoading(true);
      var slider = await Services.getSliderData(id);
      sliderData = slider;
      print(sliderData.length);
    }finally{
      isLoading(false);
    }
  }

  SliderModel findById(String id){
    return sliderData.firstWhere((e) => e.schoolid == id,orElse: ()=>null);
  }
}

#这是我的观点,我试图调用控制器并像这样加载映像

代码语言:javascript
复制
  var isInit = true;
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
    if(isInit) {
      final schoolId = ModalRoute.of(context).settings.arguments;
      Get.put(SliderController().fetchImageSilder(schoolId));
    }
    isInit = false;
    super.didChangeDependencies();
  }




 SliderController sliderData = Get.put(SliderController());
 Obx((){
                  if(sliderData.isLoading.value){
                    return Center(
                      child: LinearProgressIndicator(
                        minHeight: 95.h,
                        color: Colors.grey.shade100,
                        backgroundColor: Colors.grey.shade200,
                      ),
                    );
                  }else{
                    return SizedBox(
                      // height: MediaQuery.of(context).size.height*0.15,
                      // width: MediaQuery.of(context).size.width*0.99,
                      height: 95.h,
                      width: double.infinity,
                      child:CarouselSlider(
                        items:sliderData.sliderData.map((e) =>ClipRRect(
                          borderRadius: BorderRadius.circular(5.r),
                          child: Stack(
                            fit: StackFit.expand,
                            children: [
                              Image.network(e.image??Image.asset("icons/shik_banner_20200553123753.png"),fit: BoxFit.fill,errorBuilder:  (BuildContext context, Object exception, StackTrace stackTrace) {
                                return Image.asset("icons/shik_banner_20200553123753.png");
                              },)
                            ],
                          ),
                        ) ).toList()
                        , options: CarouselOptions(viewportFraction: 1,autoPlay: false,autoPlayAnimationDuration: const Duration(milliseconds: 800),
                      ),
                      ),
                    );
                  }

#我没有收到任何错误,但我的加载屏幕继续加载,图像没有显示,我得到了这个W/编舞师(22264):帧的时间是16.052103 ms的未来!检查图形HAL是否使用正确的时间基生成vsync时间戳。在我跑步的时候,我不知道该做些什么来加载我的形象,需要你的帮助,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-01-26 13:15:39

试着使用折叠代码。我建议使用StatefulWidget Widget来调用您的方法,特别是如果您的方法具有参数。initState帮助调用我们的函数。如果你觉得这个答案有用,请投上一票。

代码语言:javascript
复制
class MyHomePage extends StatefulWidget {
 const MyHomePage({Key? key, required this.title}) : super(key: key);
 final String title;

    @override
    State<MyHomePage> createState() => _MyHomePageState();
  }

class _MyHomePageState extends State<MyHomePage> {
final _sliderController= Get.put(SliderController());
 @override
 void initState() {
  super.initState();
  _sliderController.fetchImageSilder(schoolId);//Here you can pass parameters to your function
}

@override
Widget build(BuildContext context) {

  return Scaffold(
  appBar: AppBar(
   
    title: Text(widget.title),
   ),
   body: Obx((){
       if(sliderData.isLoading.value){
            return Center(
                child: LinearProgressIndicator(
                   minHeight: 95.h,
                   color: Colors.grey.shade100,
                   backgroundColor: Colors.grey.shade200,
              ),
            );
       }else{
     return Widget()// Pass your Widget
    }
  );
 }
}

// Getx控制器

代码语言:javascript
复制
class SliderController extends GetxController{
var isLoading = true.obs;
RxList<SliderModel> sliderData = [].obs; // If you are using `Obx()` then your list type should be obs 

Future<void> fetchImageSilder(String id) async{
     try{
          isLoading(true);
          var slider = await Services.getSliderData(id);
          sliderData.add(slider); // Add your data into `RxList`
          print(sliderData.length);
       }finally{
          isLoading(false);
       }
    }

  SliderModel findById(String id){
      return sliderData.firstWhere((e) => e.schoolid == id,orElse: ()=>null);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70858326

复制
相关文章

相似问题

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