تو ترمینال دستور زیر رو اجرا کنید:
flutter run -d chrome
تو ترمینال دستور زیر رو اجرا کنید:
flutter run -d chrome
سه پوشه ی data، bussiness_logic و presentation .
در پوشه ی data، پوشه هایی مانند models, dataproviders و repositories قرار میگیرند.
در پوشه ی bussiness_logic نیز دو پوشه ی cubits و blocs قرار میگیرند.
و در پوشه ی presentation ، پوشه های animations ، pages و screens و widgets قرار میگیرد.
سلام به شما امیدوارم حالتون خوب باشه. امروز تصمیم گرفتم داکیومنت آشنایی پکیج bloc رو ترجمه کنم و بذارم خدمت شما. امیدوارم به دردتون بخوره
ادامه خواندن “آشنایی به معماری BLOC در فلاتر-ترجمه ی داکیومنت”
دوستان عزیزی که میخوان بخش اول رو مطالعه کنن، میتونن از این لینک بهش دسترسی داشته باشن.
حالا که شما درباره ی declarative UI programming ( — همونجور که تو بخش اول گفته شد ترجمه و مطالعه ی این بخش رو برای کسانی که از منابع Android SDK یا iOS UIKit به فلاتر مهاجرت کردن به عهده ی خودشون گذاشتیم–) و تفاوت بین epemeral state و app state دانستید، برای یادگیری مدیریت استیت در یک اپ ساده آماده اید.
در این صفحه ما به سراغ پکیج provider میرویم.
ادامه خواندن “مدیریت state در فلاتر- ترجمه ی توضیحات سایت flutter.dev- بخش دوم”
سلام. راجع به state management خیلی مقالات هست اما چه مقاله و داکیومنتی بهتر از سایت فلاتر که خودش توضیح داده. من صرفا اومدم و ترجمش ترجمه کردم تا جاییکه سوادم یاری میکرد که حداقل کمکی بشه برا درک بهتر این مبحث تقریبا پیچیده. اگر جایی اشتباه ترجمه شده ممنون میشم اطلاع بدید تا اصلاحش کنم. نکته دیگه اینکه من فقط جاهایی که خودم لازمم بود رو ترجمه کردم پس ببخشید که بعضی جاها رفرنس میدم به سایت خود فلاتر.
ادامه خواندن “مدیریت state در فلاتر- ترجمه ی توضیحات سایت flutter.dev- بخش اول”
دوستان سلام. به یکی از چرت ترین مشکلاتی که بهش برخوردم میخوام صحبت کنم.
تو یکی از پروژه ها یه متغیر رو داخل یه 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;
});
});
دوباره تکرار میشه و مثل یه حلقه ی بی پایان ویجت ساخته میشه .
اما شرطی که اضافه کردیم فقط برای بار اول این کار رو انجام میده و تمام!!!
جواب این مشکل در سایت stackoverflowهم جواب داده نشده(تا به این تاریخ) ولی هیچ ارور خاصی نیست.
شما یک کلاس تعریف کردید و همچنین داخلش constructor تعریف کردید اما اونجایی که کلاس رو صدا زدید متدهای ورودی رو صدا نزدید.
منبع:آچارکد AcharCode.ir
تو جدیدترین کشفیاتم متوجه شدم این پکیج طول دستگاه(و احتمالا ارتفاع)رو که تو برنامه تنظیم کردیم درست نشون نمیده :/
به فکر یه جایگزین براش باشید.
یه مبحثی هستش به عنوان null safety . مثلا اگه متغیری تو حال خاص null باشه همچین اروری باید بده.
من تو یکی از پروژه هام یه اشتباه کوچولو که تو عکس زیر میبینید بود:
همینطور که میبینید وقتی میخواهیم questionText رو داخل q بریزیم،وقتی این حالتی مینویسیم، q مقدارnull میگیره. بنابراین راه درستش اینه که به صورت زیر بنویسیم:
questionText = q ;
questionAnswer = a ;
اگه مشکلتون حل نشد، شاید این لینک هم شاید به دردتون بخوره: How to fix ‘A non-null String must be provided to a Text widget’
این اصا مشکل نیست 🙂 شبیه ساز رو ری استارت کنید حل میشه.