حل مشکل تکرار بی پایان یک اجرا هنگام استفاده از setState در FutureBuilder و ListView.Builder در فلاتر

دوستان سلام. به یکی از چرت ترین مشکلاتی که بهش برخوردم میخوام صحبت کنم.

تو یکی از پروژه ها یه متغیر رو داخل یه FutureBuilder ( داخل ListViewBuilder هم همین مشکل وجود داره) یه مقدار جدید دادم بهش . یه BottomNavigationBar هم داشتم که یه ویجت Text قرار داده بودم وهمون متغیر رو داخلش قرار داده بودم. به شکل زیر:

class BasketBar extends StatefulWidget {
  @override
  _BasketBarState createState() => _BasketBarState();
}

class _BasketBarState extends State<BasketBar> {
  double? finalTotal;
...
@override
  Widget build(BuildContext context) {
    S().init(context);
    return Scaffold(
      appBar: buildAppBar(context),
      body: FutureBuilder<List<Data>>(
          future: getData,
          builder: (context, local) {
            if (local.hasData) {
                  ...
                  myVariable = local.data!.name;
                  ...
      bottomNavigationBar: Text(myVariable.toString()),

اما مقدار داخل bottomNavigationBar برای بار اول بروز نمیشد و null نشون میداد. و باید صفحه رو رفرش میکردم تا مقدار درست رو نشون بده. بنابراین از کد زیر استفاده کردم:

Future.delayed(Duration.zero, () {
                setState(() {
                  myVariable = local.data!.name;

                });
              });

با این کد، متغیر myVariable برای بار اول نشون داده شد اما انگار برنامه میفتاد رو دور تکرار و بی وقفه این setState اجرا میشد. بنابرین یه شرط اضافه کردم به این شکل:

if(myVariable == null)Future.delayed(Duration.zero, () {
                setState(() {
                  myVariable = local.data!.name;
                 });
              });

و مشکل حل شد!

اما قضیه از چه قرار بود؟

وقتی از setState استفاده میکنم ویجت build دوباره ساخته میشه و بنابراین فیچربیلدر هم دوباره ساخته میشه و این شرط :

Future.delayed(Duration.zero, () {
                setState(() {
                  myVariable = local.data!.name;
                 });
              });

دوباره تکرار میشه و مثل یه حلقه ی بی پایان ویجت ساخته میشه .

اما شرطی که اضافه کردیم فقط برای بار اول این کار رو انجام میده و تمام!!!

مفهوم null safety در زبان برنامه نویسی dart

سلام به شما دوستان عزیز.

پروژه رو باز کردم و sdk فلاتر رو روی ورژن 2 قرار دادم. و چی شد؟ بووووووووووم… یه عالمه ارور که باید اصلاحشون میکردم. بخاطر چی؟ مفهوم جدید null safety . که خیلی از پکیج ها هم بخاطرش ارور دادن.

خب طبیعتا برای اینکه ارور هارو رفع کنید باید با این مفهوم آشنا بشید که البته اولش شاید یکم گنگ به نظر بیاد اما با مطالعه اونها و انجامش روی پروژه قابل فهم تر میشه.

یه مقاله خیلی خوب براتون معرفی میکنم که خیلی خلاصه و مفید توضیح داده

روی این لیییییییییییینک کلیک کنید)click).

استفاده از transaction در حلقه foreach در لاراول

به شکل زیر عمل کنید:

$dbConn->begin_transaction();

try{

    foreach($ítems as $item){
        //Whatever you are going to do
    }

    if($dbConn->commit()){

    //Notify buyer about all the transactions, the user doesn't receives the notification unless the commit was succesful

   }

catch(Exception ex){
    $dbConn->rollback();
}

منبع: کلیک کنید

تفاوت PrimaryKey و ForeignKey

تفاوت بین کلید خارجی و کلید اصلی

تفاوت اصلی بین کلید خارجی و کلید اصلی در این است که کلید خارجی یک ستون یا مجموعه ای از ستون ها است که به یک کلید اصلی یا کلید نامزد جدول دیگر اشاره می کنند در حالی که کلید اصلی یک ستون یا مجموعه ستون هایی است که می توان از آنها استفاده کرد منحصر به فرد یک ردیف در یک جدول را مشخص کنید.یک ستون یا مجموعه ای از ستون ها که می تواند برای شناسایی یا دسترسی به یک ردیف یا مجموعه ای از ردیف ها در یک پایگاه داده استفاده شود ، کلید نامیده می شود. کلید اصلی در یک پایگاه داده رابطه ای ترکیبی از ستون ها در یک جدول است که به طور منحصر به فرد…

برای مشاهده کامل پست روی این لینک کلیک کنید

Laravel. Redirect intended to post method

4

I’m using laravel 5 and this is my problem. User fill in form X and if he isin’t logged in, he gets redirected to fill in more fields form OR he gets possibility to log in. Everything works just fine, if user fill in additional fields, but if he login, laravel redirects user to form X with GET method instead of POST.

This is how my middleware redirect looks like:

return redirect()->guest('user/additional-fields');

This redirect appears on successfull log in:

return redirect()->intended();

You can use a named route to solve this issue:

Lets make a named route like this:

For Get

Route::get('user/additional-fields',array(
    'uses' => 'UserController@getAdditionalFields',
    'as'   => 'user.getAdditionalFields'
));

For post

Route::post('user/additional-fields',array(
    'uses' => 'UserController@postAdditionalFields',
    'as'   => 'user.postAdditionalFields'
));

So we can now ensure Laravel uses the right route by doing this

return redirect()->guest(route('user.getAdditionalFields'));

Also note that its not possible to redirect a POST because Laravel expects form to be submitted. SO you can’t do this:

return redirect()->guest(route('user.postAdditionalFields'));

except you use something like cURL or GuzzleHttp simulate a post request

منبع : کلیک کنید

فرستادن متغیر از کنترلی به کنترل دیگر در لاراول8

تو یکی از پروژه هام میخواستم اگر کاربر ادمین بود ، عملیات دیگه ای رو تو کنترل دیگه انجام بده( چون موضوع کمی پیچیدست از جزئیات بیشتر صرف نظر میکنم.) بنابراین به شکل زیر کد رو زدم:

pass variable to another controller in laravel8.0

به جای [$id] میتونید از compact(‘id’) هم استفاده کنید.

مسیرهاRoute هم به صورت زیره:

Routes

توجه کنید مسیر دوم با نام showProduct حتما باید ایدی داخل مسیر قرار داده بشه.

و کنترلر مقصد :

با برگردوندن ایدی متوجه میشیم انتقال متغیر به درستی انجام شده.

خوشحال میشم نظر بدید.