<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chintan Gohil</title>
    <description>The latest articles on DEV Community by Chintan Gohil (@pritam_pande).</description>
    <link>https://dev.to/pritam_pande</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3267160%2F6dda0228-3e59-4f98-a01a-1c1cddd11216.png</url>
      <title>DEV Community: Chintan Gohil</title>
      <link>https://dev.to/pritam_pande</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pritam_pande"/>
    <language>en</language>
    <item>
      <title>Fetxhing-keys</title>
      <dc:creator>Chintan Gohil</dc:creator>
      <pubDate>Sat, 21 Jun 2025 02:14:15 +0000</pubDate>
      <link>https://dev.to/pritam_pande/fetxhing-keys-59ai</link>
      <guid>https://dev.to/pritam_pande/fetxhing-keys-59ai</guid>
      <description>&lt;p&gt;//base_services     import 'dart:convert';&lt;br&gt;
import 'dart:io';&lt;/p&gt;

&lt;p&gt;import 'package:aqark/models/ad_master.dart';&lt;br&gt;
import 'package:aqark/models/category_master.dart';&lt;br&gt;
import 'package:aqark/models/google_address.dart';&lt;br&gt;
import 'package:aqark/models/message/message.dart';&lt;br&gt;
import 'package:aqark/models/message_master.dart';&lt;br&gt;
import 'package:aqark/models/notification_master.dart';&lt;br&gt;
import 'package:aqark/models/otp_send_master.dart';&lt;br&gt;
import 'package:aqark/models/property_detail_master.dart';&lt;br&gt;
import 'package:aqark/models/property_list_master.dart';&lt;br&gt;
import 'package:aqark/models/region_master.dart';&lt;br&gt;
import 'package:aqark/models/user.dart';&lt;br&gt;
import 'package:aqark/utils/closable_multipart_request.dart';&lt;br&gt;
import 'package:aqark/utils/constant.dart';&lt;br&gt;
import 'package:async/async.dart';&lt;br&gt;
import 'package:connectivity_plus/connectivity_plus.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;br&gt;
import 'package:path/path.dart';&lt;/p&gt;

&lt;p&gt;import 'api_para.dart';&lt;br&gt;
import 'api_url.dart';&lt;/p&gt;

&lt;p&gt;class Services {&lt;br&gt;
  Future? userDetails(String params) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.USER_DETAILS, body: params);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (response.statusCode == 200) {&lt;br&gt;
          print(response.body);&lt;br&gt;
          return LoginMaster.fromJson(json.decode(response.body));&lt;br&gt;
        } else {&lt;br&gt;
          throw Exception("The username or password is incorrect.");&lt;br&gt;
        }&lt;br&gt;
      } catch (err) {&lt;br&gt;
        throw err;&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      throw Exception("No internet connection");&lt;br&gt;
    }&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future? login(&lt;br&gt;
      {isSocial,&lt;br&gt;
      name,&lt;br&gt;
      phone,&lt;br&gt;
      password,&lt;br&gt;
      deviceToken,&lt;br&gt;
      languageCode,&lt;br&gt;
      email,&lt;br&gt;
      facebookId,&lt;br&gt;
      googleId,&lt;br&gt;
      isEmailVerified,&lt;br&gt;
      isPhoneVerified,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getLoginParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.languageCode] = languageCode;&lt;br&gt;
        if (phone != null) {&lt;br&gt;
          map[ApiParams.phone] = phone;&lt;br&gt;
        }&lt;br&gt;
        if (password != null) {&lt;br&gt;
          map[ApiParams.password] = password;&lt;br&gt;
        }&lt;br&gt;
        map[ApiParams.deviceToken] = deviceToken;&lt;br&gt;
        map[ApiParams.name] = name;&lt;br&gt;
        if (email != null) {&lt;br&gt;
          map[ApiParams.Email_ID] = email;&lt;br&gt;
        }&lt;br&gt;
        map[ApiParams.issocial] = isSocial;&lt;br&gt;
        if (facebookId != null) {&lt;br&gt;
          map[ApiParams.facebookId] = facebookId;&lt;br&gt;
          map[ApiParams.isEmailVerified] = "1";&lt;br&gt;
          map[ApiParams.isPhoneVerified] = "0";&lt;br&gt;
        }&lt;br&gt;
        if (googleId != null) {&lt;br&gt;
          map[ApiParams.googleId] = googleId;&lt;br&gt;
          map[ApiParams.isEmailVerified] = "1";&lt;br&gt;
          map[ApiParams.isPhoneVerified] = "0";&lt;br&gt;
        }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    map[ApiParams.deviceName] = Platform.isAndroid
        ? AppConstants.DEVICE_ACCESS_ANDROID
        : AppConstants.DEVICE_ACCESS_IOS;
    print("Parameter: " + json.encode(map));
    return json.encode(map);
  }

  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response =
        await http.post(ApiUrl.LOGIN, body: getLoginParams());
    print("URL: " + response.request!.url.toString());
    if (onStopLoading != null) onStopLoading();
    print(response.body);
    return LoginMaster.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;/* forgot password*/&lt;/p&gt;

&lt;p&gt;Future? forgotPassword(&lt;br&gt;
      {email,&lt;br&gt;
      languageCode,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getLoginParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.languageCode] = languageCode;&lt;br&gt;
        map[ApiParams.email] = email;&lt;br&gt;
        print("Parameter: " + json.encode(map));&lt;br&gt;
        return json.encode(map);&lt;br&gt;
      }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response =
        await http.post(ApiUrl.FORGOT_PASSWORD, body: getLoginParams());
    print("URL: " + response.request!.url.toString());
    if (onStopLoading != null) onStopLoading();
    return Message.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future? otpSend(&lt;br&gt;
      {mobile,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onFailed,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getLoginParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.phone] = mobile;&lt;br&gt;
        print("Parameter: " + json.encode(map));&lt;br&gt;
        return json.encode(map);&lt;br&gt;
      }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  print("URL: " + ApiUrl.SEND_OTP.toString());

  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response =
        await http.post(ApiUrl.SEND_OTP, body: getLoginParams());
    print("URL: " + response.request!.url.toString());
    print("Response: " + response.body.toString());
    if (onStopLoading != null) onStopLoading();
    return OtpSendMaster.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future? otpVerify(&lt;br&gt;
      {mobile,&lt;br&gt;
      otp,&lt;br&gt;
      verificationId,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getLoginParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.phone] = mobile;&lt;br&gt;
        map[ApiParams.otp] = otp;&lt;br&gt;
        map[ApiParams.verificationId] = int.parse(verificationId);&lt;br&gt;
        print("Parameter: " + json.encode(map));&lt;br&gt;
        return json.encode(map);&lt;br&gt;
      }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response = await http.post(ApiUrl.OTP_VERIFY,
        body: getLoginParams(),
        headers: {"Content-Type": "application/json"});
    print("URL: " + response.request!.url.toString());
    if (onStopLoading != null) onStopLoading();
    return OtpSendMaster.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future? createUser(&lt;br&gt;
      {isSocial,&lt;br&gt;
      name,&lt;br&gt;
      email,&lt;br&gt;
      phone,&lt;br&gt;
      password,&lt;br&gt;
      deviceToken,&lt;br&gt;
      languageCode,&lt;br&gt;
      facebookId,&lt;br&gt;
      googleId,&lt;br&gt;
      String? image,&lt;br&gt;
      isEmailverified,&lt;br&gt;
      isPhoneverified,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    // TODO: implement createUser&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getRegisterParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.languageCode] = languageCode;&lt;br&gt;
        map[ApiParams.name] = name;&lt;br&gt;
        if (phone != null) {&lt;br&gt;
          map[ApiParams.phone] = phone;&lt;br&gt;
        }&lt;br&gt;
        if (password != null &amp;amp;&amp;amp; isSocial == "0") {&lt;br&gt;
          map[ApiParams.password] = password;&lt;br&gt;
        }&lt;br&gt;
        map[ApiParams.deviceToken] = deviceToken;&lt;br&gt;
        map[ApiParams.issocial] = isSocial;&lt;br&gt;
        if (email != null) {&lt;br&gt;
          map[ApiParams.Email_ID] = email;&lt;br&gt;
        }&lt;br&gt;
        map[ApiParams.isEmailVerified] = isEmailverified ?? "0";&lt;br&gt;
        map[ApiParams.isPhoneVerified] = isPhoneverified ?? "0";&lt;br&gt;
        if (facebookId != null) {&lt;br&gt;
          map[ApiParams.facebookId] = facebookId;&lt;br&gt;
        }&lt;br&gt;
        if (googleId != null) {&lt;br&gt;
          map[ApiParams.googleId] = googleId;&lt;br&gt;
        }&lt;br&gt;
        if (image != null) {&lt;br&gt;
          map[ApiParams.image] = image ?? "";&lt;br&gt;
        }&lt;br&gt;
        map[ApiParams.deviceName] = Platform.isAndroid&lt;br&gt;
            ? AppConstants.DEVICE_ACCESS_ANDROID&lt;br&gt;
            : AppConstants.DEVICE_ACCESS_IOS;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    print("SignUp Parameter: " + json.encode(map));
    return json.encode(map);
  }

  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response =
        await http.post(ApiUrl.REGISTER, body: getRegisterParams());
    print("URL: " + response.request!.url.toString());
    print("Response: " + response.body);
    if (onStopLoading != null) onStopLoading();
    return LoginMaster.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    print("Service error: " + err.toString());
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future updateProfile({&lt;br&gt;
    String? params,&lt;br&gt;
    String? imagePath,&lt;br&gt;
    Function? success,&lt;br&gt;
    Function? fail,&lt;br&gt;
    Function? onNoInternet,&lt;br&gt;
  }) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      final request = await http.MultipartRequest(&lt;br&gt;
          AppConstants.METHOD_POST, ApiUrl.UPDATE_PROFILE);&lt;br&gt;
      request.fields[ApiParams.json_content] = params!;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  try {
    if (imagePath != null || !imagePath!.startsWith("http")) {
      File imageFile = new File(imagePath);
      var stream =
          new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
      var length = await imageFile.length();
      var multipartFile = new http.MultipartFile(
          ApiParams.image, stream, length,
          filename: basename(imageFile.path));
      request.files.add(multipartFile);
    }
  } catch (e) {}

  request.send().then((response) {
    print("URL: " + response.request!.url.toString());
    try {
      response.stream.transform(utf8.decoder).listen((value) {
        print("Response: " + value);
        print("statusCode: " + response.statusCode.toString());
        if (response.statusCode == 200) {
          LoginMaster user = LoginMaster.fromJson(json.decode(value));
          success!(user);
        } else {
          fail!();
        }
      });
    } catch (e) {
      print("Error: " + e.toString());
      fail!();
    }
  });
} else {
  if (onNoInternet != null) onNoInternet();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future? appLogout(&lt;br&gt;
      {jsons,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        if (onStartLoading != null) onStartLoading();&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.APP_LOGOUT, body: jsons);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        print("APP LOGOUT" + response.body);&lt;br&gt;
        return MessageMaster.fromJson(json.decode(response.body));&lt;br&gt;
      } catch (err) {&lt;br&gt;
        print("APP LOGOUT ERROR: " + err.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        return null;&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      if (onNoInternet != null) onNoInternet();&lt;br&gt;
    }&lt;br&gt;
    return null;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future? getCategory(&lt;br&gt;
      {languageCode,&lt;br&gt;
      type,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getLoginParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.languageCode] = languageCode;&lt;br&gt;
        if (type != null) {&lt;br&gt;
          map[ApiParams.type] = type;&lt;br&gt;
        }&lt;br&gt;
        print("Parameter: " + json.encode(map));&lt;br&gt;
        return json.encode(map);&lt;br&gt;
      }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response =
        await http.post(ApiUrl.GET_CATEGORY_LIST, body: getLoginParams());
    print("URL: " + response.request!.url.toString());
    if (onStopLoading != null) onStopLoading();
    return CategoryMaster.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    print(err.toString());
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future? getRegions(&lt;br&gt;
      {languageCode,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      String getLoginParams() {&lt;br&gt;
        var map = new Map();&lt;br&gt;
        map[ApiParams.languageCode] = languageCode;&lt;br&gt;
        print("Parameter: " + json.encode(map));&lt;br&gt;
        return json.encode(map);&lt;br&gt;
      }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  try {
    if (onStartLoading != null) onStartLoading();
    final http.Response response =
        await http.post(ApiUrl.GET_REGION_LIST, body: getLoginParams());
    print("URL: " + response.request!.url.toString());
    if (onStopLoading != null) onStopLoading();
    return RegionMaster.fromJson(json.decode(response.body));
  } catch (err) {
    if (onStopLoading != null) onStopLoading();
    print(err.toString());
    return null;
  }
} else {
  if (onNoInternet != null) onNoInternet();
}
return null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;/* get Notification list */&lt;/p&gt;

&lt;p&gt;Future? getNotificationList(&lt;br&gt;
      {jsons,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        if (onStartLoading != null) onStartLoading();&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.GET_NOTIFICATION_LIST, body: jsons);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        print("jobsResponse" + response.body);&lt;br&gt;
        return NotificationMaster.fromJson(json.decode(response.body));&lt;br&gt;
      } catch (err) {&lt;br&gt;
        print("Job list error: " + err.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        return null;&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      if (onNoInternet != null) onNoInternet();&lt;br&gt;
    }&lt;br&gt;
    return null;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;/* get Property list */&lt;/p&gt;

&lt;p&gt;Future? getPropertyList(&lt;br&gt;
      {jsons,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        if (onStartLoading != null) onStartLoading();&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.GET_PROPERTY_LIST, body: jsons);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        print("jobsResponse" + response.body);&lt;br&gt;
        return PropertyListMaster.fromJson(json.decode(response.body));&lt;br&gt;
      } catch (err) {&lt;br&gt;
        print("Job list error: " + err.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        return null;&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      if (onNoInternet != null) onNoInternet();&lt;br&gt;
    }&lt;br&gt;
    return null;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;/* get user Property list */&lt;/p&gt;

&lt;p&gt;Future? getUserPropertyList(&lt;br&gt;
      {jsons,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        if (onStartLoading != null) onStartLoading();&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.USER_PROPERTY_LIST, body: jsons);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        print("jobsResponse" + response.body);&lt;br&gt;
        return PropertyListMaster.fromJson(json.decode(response.body));&lt;br&gt;
      } catch (err) {&lt;br&gt;
        print("Job list error: " + err.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        return null;&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      if (onNoInternet != null) onNoInternet();&lt;br&gt;
    }&lt;br&gt;
    return null;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;/* get Property list */&lt;/p&gt;

&lt;p&gt;Future? getMapPropertyList(&lt;br&gt;
      {jsons,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        if (onStartLoading != null) onStartLoading();&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.GET_MAP_PROPERTY_LIST, body: jsons);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        print("jobsResponse" + response.body);&lt;br&gt;
        return PropertyListMaster.fromJson(json.decode(response.body));&lt;br&gt;
      } catch (err) {&lt;br&gt;
        print("Job list error: " + err.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        return null;&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      if (onNoInternet != null) onNoInternet();&lt;br&gt;
    }&lt;br&gt;
    return null;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future? getFavoutitePropertyList(&lt;br&gt;
      {jsons,&lt;br&gt;
      Function? onStartLoading,&lt;br&gt;
      Function? onStopLoading,&lt;br&gt;
      Function? onNoInternet}) async {&lt;br&gt;
    var connectivityResult = await (Connectivity().checkConnectivity());&lt;br&gt;
    if (connectivityResult == ConnectivityResult.mobile ||&lt;br&gt;
        connectivityResult == ConnectivityResult.wifi) {&lt;br&gt;
      try {&lt;br&gt;
        if (onStartLoading != null) onStartLoading();&lt;br&gt;
        final http.Response response =&lt;br&gt;
            await http.post(ApiUrl.GET_FAVOURITE_PROPERTY_LIST, body: jsons);&lt;br&gt;
        print("URL: " + response.request!.url.toString());&lt;br&gt;
        if (onStopLoading != null) onStopLoading();&lt;br&gt;
        print("jobsResponse" + response.body);&lt;br&gt;
        return Pr&lt;/p&gt;

</description>
    </item>
    <item>
      <title>flutter load more 1</title>
      <dc:creator>Chintan Gohil</dc:creator>
      <pubDate>Mon, 16 Jun 2025 00:20:15 +0000</pubDate>
      <link>https://dev.to/pritam_pande/flutter-load-more-1-33j7</link>
      <guid>https://dev.to/pritam_pande/flutter-load-more-1-33j7</guid>
      <description>&lt;p&gt;//search bar import 'dart:convert';&lt;br&gt;
import 'package:flutter/material.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;/p&gt;

&lt;p&gt;class LastDemo extends StatefulWidget {&lt;br&gt;
  const LastDemo({super.key});&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  State createState() =&amp;gt; _LastDemoState();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class _LastDemoState extends State {&lt;br&gt;
  List posts = [];&lt;br&gt;
  bool _isloading = false;&lt;br&gt;
  bool hasmore = true;&lt;br&gt;
  int currentpage = 1;&lt;br&gt;
  int limit = 15;&lt;br&gt;
  String? erroemessage;&lt;br&gt;
  ScrollController scrollController = ScrollController();&lt;/p&gt;

&lt;p&gt;TextEditingController searchController = TextEditingController();&lt;br&gt;
  String searchQuery = '';&lt;/p&gt;

&lt;p&gt;List get filteredPosts {&lt;br&gt;
    if (searchQuery.isEmpty) return posts;&lt;br&gt;
    return posts&lt;br&gt;
        .where((post) =&amp;gt; post['title']&lt;br&gt;
            .toString()&lt;br&gt;
            .toLowerCase()&lt;br&gt;
            .contains(searchQuery.toLowerCase()))&lt;br&gt;
        .toList();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void initState() {&lt;br&gt;
    super.initState();&lt;br&gt;
    fetchProducts();&lt;br&gt;
    scrollController.addListener(() {&lt;br&gt;
      if (scrollController.position.pixels &amp;gt;=&lt;br&gt;
              scrollController.position.maxScrollExtent - 200 &amp;amp;&amp;amp;&lt;br&gt;
          !_isloading &amp;amp;&amp;amp;&lt;br&gt;
          hasmore &amp;amp;&amp;amp;&lt;br&gt;
          searchQuery.isEmpty) {&lt;br&gt;
        fetchProducts();&lt;br&gt;
      }&lt;br&gt;
    });&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future fetchProducts() async {&lt;br&gt;
    setState(() {&lt;br&gt;
      _isloading = true;&lt;br&gt;
    });&lt;br&gt;
    final response = await http.get(Uri.parse(&lt;br&gt;
        '&lt;a href="https://jsonplaceholder.typicode.com/posts?_page=$currentpage&amp;amp;_limit=$limit')" rel="noopener noreferrer"&gt;https://jsonplaceholder.typicode.com/posts?_page=$currentpage&amp;amp;_limit=$limit')&lt;/a&gt;);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try {
  if (response.statusCode == 200) {
    final List&amp;lt;dynamic&amp;gt; data = jsonDecode(response.body);

    setState(() {
      currentpage++;
      posts.addAll(data);
      _isloading = false;
      if (data.length &amp;lt; limit) {
        hasmore = false;
      }
    });
  } else {
    setState(() {
      _isloading = false;
      ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Failed to load data')));
    });
  }
} catch (e) {
  setState(() {
    _isloading = false;
    ScaffoldMessenger.of(context)
        .showSnackBar(SnackBar(content: Text("The error is $e")));
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  Widget build(BuildContext context) {&lt;br&gt;
    return Scaffold(&lt;br&gt;
      appBar: AppBar(title: Text('Demo Of AppBar')),&lt;br&gt;
      body: Column(&lt;br&gt;
        children: [&lt;br&gt;
          Padding(&lt;br&gt;
            padding: const EdgeInsets.all(8.0),&lt;br&gt;
            child: TextField(&lt;br&gt;
              controller: searchController,&lt;br&gt;
              decoration: InputDecoration(&lt;br&gt;
                labelText: 'Search by title',&lt;br&gt;
                border: OutlineInputBorder(),&lt;br&gt;
                prefixIcon: Icon(Icons.search),&lt;br&gt;
              ),&lt;br&gt;
              onChanged: (value) {&lt;br&gt;
                setState(() {&lt;br&gt;
                  searchQuery = value;&lt;br&gt;
                });&lt;br&gt;
              },&lt;br&gt;
            ),&lt;br&gt;
          ),&lt;br&gt;
          Expanded(&lt;br&gt;
            child: ListView.builder(&lt;br&gt;
              controller: scrollController,&lt;br&gt;
              itemCount: filteredPosts.length +&lt;br&gt;
                  (_isloading &amp;amp;&amp;amp; hasmore &amp;amp;&amp;amp; searchQuery.isEmpty ? 1 : 0),&lt;br&gt;
              itemBuilder: (context, index) {&lt;br&gt;
                if (index &amp;lt; filteredPosts.length) {&lt;br&gt;
                  final post = filteredPosts[index];&lt;br&gt;
                  return ListTile(&lt;br&gt;
                    leading: CircleAvatar(&lt;br&gt;
                      child: Text(post['id'].toString()),&lt;br&gt;
                    ),&lt;br&gt;
                    title: Text(post['title']),&lt;br&gt;
                  );&lt;br&gt;
                } else {&lt;br&gt;
                  // Only show loader if not searching&lt;br&gt;
                  return searchQuery.isEmpty&lt;br&gt;
                      ? Padding(&lt;br&gt;
                          padding: EdgeInsets.all(16),&lt;br&gt;
                          child: Center(child: CircularProgressIndicator()),&lt;br&gt;
                        )&lt;br&gt;
                      : SizedBox(); // No loader during search&lt;br&gt;
                }&lt;br&gt;
              },&lt;br&gt;
            ),&lt;br&gt;
          ),&lt;br&gt;
        ],&lt;br&gt;
      ),&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;//push data &lt;br&gt;
import 'dart:convert';&lt;br&gt;
import 'package:flutter/material.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;/p&gt;

&lt;p&gt;class PushAndLoadDemo extends StatefulWidget {&lt;br&gt;
  const PushAndLoadDemo({super.key});&lt;br&gt;
  &lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  State createState() =&amp;gt; _PushAndLoadDemoState();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class _PushAndLoadDemoState extends State {&lt;br&gt;
  List users = [];&lt;br&gt;
  int page = 1;&lt;br&gt;
  bool isLoading = false;&lt;/p&gt;

&lt;p&gt;final nameController = TextEditingController();&lt;br&gt;
  final jobController = TextEditingController();&lt;/p&gt;

&lt;p&gt;Future postData(String name, String job) async {&lt;br&gt;
    final res = await http.post(&lt;br&gt;
      Uri.parse("&lt;a href="https://reqres.in/api/users%22" rel="noopener noreferrer"&gt;https://reqres.in/api/users"&lt;/a&gt;),&lt;br&gt;
      body: {'name': name, 'job': job},&lt;br&gt;
    );&lt;br&gt;
    if (res.statusCode == 201) {&lt;br&gt;
      final data = json.decode(res.body);&lt;br&gt;
      ScaffoldMessenger.of(context).showSnackBar(&lt;br&gt;
        SnackBar(content: Text("User Added: ${data['name']}")),&lt;br&gt;
      );&lt;br&gt;
    }&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future loadUsers() async {&lt;br&gt;
    if (isLoading) return;&lt;br&gt;
    setState(() =&amp;gt; isLoading = true);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final res = await http.get(Uri.parse("https://reqres.in/api/users?page=$page"));
if (res.statusCode == 200) {
  final data = json.decode(res.body);
  setState(() {
    users.addAll(data['data']);
    page++;
    isLoading = false;
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void initState() {&lt;br&gt;
    super.initState();&lt;br&gt;
    loadUsers();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  Widget build(BuildContext context) {&lt;br&gt;
    return Scaffold(&lt;br&gt;
      appBar: AppBar(title: const Text("POST + Load More")),&lt;br&gt;
      body: Column(&lt;br&gt;
        children: [&lt;br&gt;
          Padding(&lt;br&gt;
            padding: const EdgeInsets.all(8),&lt;br&gt;
            child: Column(&lt;br&gt;
              children: [&lt;br&gt;
                TextField(controller: nameController, decoration: InputDecoration(labelText: "Name")),&lt;br&gt;
                TextField(controller: jobController, decoration: InputDecoration(labelText: "Job")),&lt;br&gt;
                ElevatedButton(&lt;br&gt;
                  onPressed: () =&amp;gt; postData(nameController.text, jobController.text),&lt;br&gt;
                  child: Text("Submit"),&lt;br&gt;
                ),&lt;br&gt;
              ],&lt;br&gt;
            ),&lt;br&gt;
          ),&lt;br&gt;
          Expanded(&lt;br&gt;
            child: ListView.builder(&lt;br&gt;
              itemCount: users.length + 1,&lt;br&gt;
              itemBuilder: (context, index) {&lt;br&gt;
                if (index &amp;lt; users.length) {&lt;br&gt;
                  return ListTile(&lt;br&gt;
                    leading: Image.network(users[index]['avatar']),&lt;br&gt;
                    title: Text(users[index]['first_name']),&lt;br&gt;
                  );&lt;br&gt;
                } else {&lt;br&gt;
                  loadUsers(); // Load more&lt;br&gt;
                  return Center(child: CircularProgressIndicator());&lt;br&gt;
                }&lt;br&gt;
              },&lt;br&gt;
            ),&lt;br&gt;
          ),&lt;br&gt;
        ],&lt;br&gt;
      ),&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

</description>
    </item>
    <item>
      <title>flutter load more</title>
      <dc:creator>Chintan Gohil</dc:creator>
      <pubDate>Sun, 15 Jun 2025 18:58:49 +0000</pubDate>
      <link>https://dev.to/pritam_pande/flutter-load-more-jg9</link>
      <guid>https://dev.to/pritam_pande/flutter-load-more-jg9</guid>
      <description>&lt;p&gt;//skip and limit&lt;br&gt;
`import 'dart:convert';&lt;br&gt;
import 'package:flutter/material.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;/p&gt;

&lt;p&gt;class PaginatedApiListView extends StatefulWidget {&lt;br&gt;
  &lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  _PaginatedApiListViewState createState() =&amp;gt; _PaginatedApiListViewState();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class _PaginatedApiListViewState extends State {&lt;br&gt;
  final ScrollController _scrollController = ScrollController();&lt;br&gt;
  List _products = [];&lt;br&gt;
  int _currentPage = 1;&lt;br&gt;
  final int _limit = 10;&lt;br&gt;
  bool _isLoading = false;&lt;br&gt;
  bool _hasMore = true;&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void initState() {&lt;br&gt;
    super.initState();&lt;br&gt;
    _fetchProducts();&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_scrollController.addListener(() {
  if (_scrollController.position.pixels &amp;gt;=
      _scrollController.position.maxScrollExtent - 200 &amp;amp;&amp;amp;
      !_isLoading &amp;amp;&amp;amp;
      _hasMore) {
    _fetchProducts();
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future _fetchProducts() async {&lt;br&gt;
    setState(() {&lt;br&gt;
      _isLoading = true;&lt;br&gt;
    });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final skip = (_currentPage - 1) * _limit;
final response = await http.get(
  Uri.parse('https://dummyjson.com/products?limit=$_limit&amp;amp;skip=$skip'),
);

if (response.statusCode == 200) {
  final data = json.decode(response.body);
  final List&amp;lt;dynamic&amp;gt; newProducts = data['products'];

  setState(() {
    _currentPage++;
    _products.addAll(newProducts);
    _hasMore = _products.length &amp;lt; data['total']; // total = 100
    _isLoading = false;
  });
} else {
  setState(() {
    _isLoading = false;
  });

  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Failed to load data')),
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void dispose() {&lt;br&gt;
    _scrollController.dispose();&lt;br&gt;
    super.dispose();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  Widget build(BuildContext context) {&lt;br&gt;
    return Scaffold(&lt;br&gt;
      appBar: AppBar(title: Text('Paginated Products')),&lt;br&gt;
      body: ListView.builder(&lt;br&gt;
        controller: _scrollController,&lt;br&gt;
        itemCount: _products.length + (_isLoading || _hasMore ? 1 : 0),&lt;br&gt;
        itemBuilder: (context, index) {&lt;br&gt;
          if (index &amp;lt; _products.length) {&lt;br&gt;
            final product = _products[index];&lt;br&gt;
            return ListTile(&lt;br&gt;
              leading: CircleAvatar(&lt;br&gt;
                backgroundImage: NetworkImage(product['thumbnail']),&lt;br&gt;
              ),&lt;br&gt;
              title: Text(product['title']),&lt;br&gt;
              subtitle: Text("\$${product['price']}"),&lt;br&gt;
            );&lt;br&gt;
          } else {&lt;br&gt;
            return Padding(&lt;br&gt;
              padding: const EdgeInsets.all(16.0),&lt;br&gt;
              child: Center(child: CircularProgressIndicator()),&lt;br&gt;
            );&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
      ),&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;| List (array)                | List data = jsonDecode(...)                                           | posts.addAll(data); |&lt;br&gt;
| Single Object               | Map data = jsonDecode(...)                                     | posts.add(data);    |&lt;br&gt;
| Object with List inside key | Map json = jsonDecode(...); List data = json['data']; | posts.addAll(data); |&lt;/p&gt;

&lt;p&gt;'import 'dart:convert';&lt;br&gt;
import 'package:flutter/material.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;/p&gt;

&lt;p&gt;class LastDemo extends StatefulWidget {&lt;br&gt;
  const LastDemo({super.key});&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  State createState() =&amp;gt; _DemoState();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class _DemoState extends State {&lt;br&gt;
  List posts = [];&lt;br&gt;
  bool _isloading = false;&lt;br&gt;
  bool hasmore = true;&lt;br&gt;
  int currenpage = 1;&lt;br&gt;
  final int limit = 20;&lt;br&gt;
  final ScrollController scrollController = ScrollController();&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void initState() {&lt;br&gt;
    super.initState();&lt;br&gt;
    fetchPosts();&lt;br&gt;
    scrollController.addListener(_scrollListener);&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;void _scrollListener() {&lt;br&gt;
    if (scrollController.position.pixels &amp;gt;=&lt;br&gt;
        scrollController.position.maxScrollExtent - 200 &amp;amp;&amp;amp;&lt;br&gt;
        !_isloading &amp;amp;&amp;amp;&lt;br&gt;
        hasmore) {&lt;br&gt;
      fetchPosts();&lt;br&gt;
    }&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future fetchPosts() async {&lt;br&gt;
    setState(() {&lt;br&gt;
      _isloading = true;&lt;br&gt;
    });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final response = await http.get(Uri.parse(
    'https://jsonplaceholder.typicode.com/posts?_page=$currenpage&amp;amp;_limit=$limit'));

if (response.statusCode == 200) {
  final List&amp;lt;dynamic&amp;gt; data = jsonDecode(response.body);

  setState(() {
    currenpage++;
    posts.addAll(data);
    _isloading = false;
    if (data.length &amp;lt; limit) {
      hasmore = false;
    }
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void dispose() {&lt;br&gt;
    scrollController.dispose();&lt;br&gt;
    super.dispose();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  Widget build(BuildContext context) {&lt;br&gt;
    return Scaffold(&lt;br&gt;
      appBar: AppBar(title: Text("Paginated Posts")),&lt;br&gt;
      body: ListView.builder(&lt;br&gt;
        controller: scrollController,&lt;br&gt;
        itemCount: posts.length + (_isloading &amp;amp;&amp;amp; hasmore ? 1 : 0),&lt;br&gt;
        itemBuilder: (context, index) {&lt;br&gt;
          if (index &amp;lt; posts.length) {&lt;br&gt;
            final post = posts[index];&lt;br&gt;
            return ListTile(&lt;br&gt;
              title: Text(post['title']),&lt;br&gt;
              subtitle: Text(post['body']),&lt;br&gt;
            );&lt;br&gt;
          } else {&lt;br&gt;
            return const Padding(&lt;br&gt;
              padding: EdgeInsets.all(12),&lt;br&gt;
              child: Center(child: CircularProgressIndicator()),&lt;br&gt;
            );&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
      ),&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
'&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Flutter Load More</title>
      <dc:creator>Chintan Gohil</dc:creator>
      <pubDate>Sun, 15 Jun 2025 18:56:02 +0000</pubDate>
      <link>https://dev.to/pritam_pande/flutter-load-more-pagination-step-by-step-guide-with-page-limit-skip-23mp</link>
      <guid>https://dev.to/pritam_pande/flutter-load-more-pagination-step-by-step-guide-with-page-limit-skip-23mp</guid>
      <description>&lt;p&gt;//limit-skip&lt;br&gt;
import 'dart:convert';&lt;br&gt;
import 'package:flutter/material.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;/p&gt;

&lt;p&gt;class PaginatedApiListView extends StatefulWidget {&lt;br&gt;
  &lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  _PaginatedApiListViewState createState() =&amp;gt; _PaginatedApiListViewState();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class _PaginatedApiListViewState extends State {&lt;br&gt;
  final ScrollController _scrollController = ScrollController();&lt;br&gt;
  List _products = [];&lt;br&gt;
  int _currentPage = 1;&lt;br&gt;
  final int _limit = 10;&lt;br&gt;
  bool _isLoading = false;&lt;br&gt;
  bool _hasMore = true;&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void initState() {&lt;br&gt;
    super.initState();&lt;br&gt;
    _fetchProducts();&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_scrollController.addListener(() {
  if (_scrollController.position.pixels &amp;gt;=
      _scrollController.position.maxScrollExtent - 200 &amp;amp;&amp;amp;
      !_isLoading &amp;amp;&amp;amp;
      _hasMore) {
    _fetchProducts();
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;Future _fetchProducts() async {&lt;br&gt;
    setState(() {&lt;br&gt;
      _isLoading = true;&lt;br&gt;
    });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final skip = (_currentPage - 1) * _limit;
final response = await http.get(
  Uri.parse('https://dummyjson.com/products?limit=$_limit&amp;amp;skip=$skip'),
);

if (response.statusCode == 200) {
  final data = json.decode(response.body);
  final List&amp;lt;dynamic&amp;gt; newProducts = data['products'];

  setState(() {
    _currentPage++;
    _products.addAll(newProducts);
    _hasMore = _products.length &amp;lt; data['total']; // total = 100
    _isLoading = false;
  });
} else {
  setState(() {
    _isLoading = false;
  });

  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(content: Text('Failed to load data')),
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void dispose() {&lt;br&gt;
    _scrollController.dispose();&lt;br&gt;
    super.dispose();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  Widget build(BuildContext context) {&lt;br&gt;
    return Scaffold(&lt;br&gt;
      appBar: AppBar(title: Text('Paginated Products')),&lt;br&gt;
      body: ListView.builder(&lt;br&gt;
        controller: _scrollController,&lt;br&gt;
        itemCount: _products.length + (_isLoading || _hasMore ? 1 : 0),&lt;br&gt;
        itemBuilder: (context, index) {&lt;br&gt;
          if (index &amp;lt; _products.length) {&lt;br&gt;
            final product = _products[index];&lt;br&gt;
            return ListTile(&lt;br&gt;
              leading: CircleAvatar(&lt;br&gt;
                backgroundImage: NetworkImage(product['thumbnail']),&lt;br&gt;
              ),&lt;br&gt;
              title: Text(product['title']),&lt;br&gt;
              subtitle: Text("\$${product['price']}"),&lt;br&gt;
            );&lt;br&gt;
          } else {&lt;br&gt;
            return Padding(&lt;br&gt;
              padding: const EdgeInsets.all(16.0),&lt;br&gt;
              child: Center(child: CircularProgressIndicator()),&lt;br&gt;
            );&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
      ),&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;| List (array)                | List data = jsonDecode(...)                                           | posts.addAll(data); |&lt;br&gt;
| Single Object               | Map data = jsonDecode(...)                                     | posts.add(data);    |&lt;br&gt;
| Object with List inside key | Map json = jsonDecode(...); List data = json['data']; | posts.addAll(data); |&lt;/p&gt;

&lt;p&gt;//page and limit&lt;br&gt;
import 'dart:convert';&lt;br&gt;
import 'package:flutter/material.dart';&lt;br&gt;
import 'package:http/http.dart' as http;&lt;/p&gt;

&lt;p&gt;class LastDemo extends StatefulWidget {&lt;br&gt;
  const LastDemo({super.key});&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  State createState() =&amp;gt; _DemoState();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;class _DemoState extends State {&lt;br&gt;
  List posts = [];&lt;br&gt;
  bool _isloading = false;&lt;br&gt;
  bool hasmore = true;&lt;br&gt;
  int currenpage = 1;&lt;br&gt;
  final int limit = 20;&lt;br&gt;
  final ScrollController scrollController = ScrollController();&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void initState() {&lt;br&gt;
    super.initState();&lt;br&gt;
    fetchPosts();&lt;br&gt;
    scrollController.addListener(_scrollListener);&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;void _scrollListener() {&lt;br&gt;
    if (scrollController.position.pixels &amp;gt;=&lt;br&gt;
        scrollController.position.maxScrollExtent - 200 &amp;amp;&amp;amp;&lt;br&gt;
        !_isloading &amp;amp;&amp;amp;&lt;br&gt;
        hasmore) {&lt;br&gt;
      fetchPosts();&lt;br&gt;
    }&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;Future fetchPosts() async {&lt;br&gt;
    setState(() {&lt;br&gt;
      _isloading = true;&lt;br&gt;
    });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final response = await http.get(Uri.parse(
    'https://jsonplaceholder.typicode.com/posts?_page=$currenpage&amp;amp;_limit=$limit'));

if (response.statusCode == 200) {
  final List&amp;lt;dynamic&amp;gt; data = jsonDecode(response.body);

  setState(() {
    currenpage++;
    posts.addAll(data);
    _isloading = false;
    if (data.length &amp;lt; limit) {
      hasmore = false;
    }
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  void dispose() {&lt;br&gt;
    scrollController.dispose();&lt;br&gt;
    super.dispose();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/override"&gt;@override&lt;/a&gt;&lt;br&gt;
  Widget build(BuildContext context) {&lt;br&gt;
    return Scaffold(&lt;br&gt;
      appBar: AppBar(title: Text("Paginated Posts")),&lt;br&gt;
      body: ListView.builder(&lt;br&gt;
        controller: scrollController,&lt;br&gt;
        itemCount: posts.length + (_isloading &amp;amp;&amp;amp; hasmore ? 1 : 0),&lt;br&gt;
        itemBuilder: (context, index) {&lt;br&gt;
          if (index &amp;lt; posts.length) {&lt;br&gt;
            final post = posts[index];&lt;br&gt;
            return ListTile(&lt;br&gt;
              title: Text(post['title']),&lt;br&gt;
              subtitle: Text(post['body']),&lt;br&gt;
            );&lt;br&gt;
          } else {&lt;br&gt;
            return const Padding(&lt;br&gt;
              padding: EdgeInsets.all(12),&lt;br&gt;
              child: Center(child: CircularProgressIndicator()),&lt;br&gt;
            );&lt;br&gt;
          }&lt;br&gt;
        },&lt;br&gt;
      ),&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
