سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محمد علی
نحوه صحیح‌تر کار کردن save
یلدا محصلی حل شده توسط یلدا محصلی

من می‌خواهم وقتی روی دکمه save کلیک می‌کنم(اطلاعات رو ذخیره کردم )به صفحه HomeScreen منتقل بشم و تمام تغییرات در این صفحه پیاده بشه و قابل مشاهده  بدون این که نیاز باشه دوباره برنامه رو رفرش کنم تا تغییرات رو ببینم چه کد هایی رو باید پیاده کنم؟

روش‌های زیادی براش هست. مثلا میتونید ValueNotifier استفاده کنید یا در ادامه دوره با استفاده از BloC این کار رو انجام بدید و یا سایر state management ها.

یلدا محصلی ۳۰ دی ۱۴۰۳، ۱۴:۳۳

چه طور از ValueNotifier استفاده کنم چه کد هایی رو پیاده کنم؟

محمد علی ۳۰ دی ۱۴۰۳، ۱۵:۴۹

ValueNotifier  کمک می‌کنه تا تغییرات یه مقدار رو به‌راحتی مدیریت کنید و وقتی اون مقدار عوض می‌شه، به صورت خودکار UI رو به‌روزرسانی کنید. هر وقت مقدار value تغییر کنه، همه جاهایی که بهش گوش میدن (مثل ValueListenableBuilder) فوراً واکنش نشون میدن و رفرش میشن.

میتونید از این مثال هم کمک بگیرید اما برای تمرین بهتره کدتون رو خودتون پیاده‌سازی کنید:

 

import 'package:flutter/material.dart';
void main() {
 runApp(MyApp());
}
class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     home: FormScreen(),
   );
 }
}
// ValueNotifier برای مدیریت لیست
final ValueNotifier<List<String>> listNotifier = ValueNotifier<List<String>>([]);
class FormScreen extends StatelessWidget {
 final TextEditingController controller = TextEditingController();
 @override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(title: Text("فرم ذخیره اطلاعات")),
     body: Padding(
       padding: const EdgeInsets.all(16.0),
       child: Column(
         children: [
           TextField(
             controller: controller,
             decoration: InputDecoration(labelText: "متن خود را وارد کنید"),
           ),
           SizedBox(height: 16),
           ElevatedButton(
             onPressed: () {
               if (controller.text.isNotEmpty) {
                 // اضافه کردن مقدار جدید به لیست
                 listNotifier.value = [...listNotifier.value, controller.text];
                 controller.clear();
                 // انتقال به صفحه HomeScreen
                 Navigator.push(
                   context,
                   MaterialPageRoute(builder: (context) => HomeScreen()),
                 );
               }
             },
             child: Text("ذخیره و رفتن به صفحه اصلی"),
           ),
         ],
       ),
     ),
   );
 }
}
class HomeScreen extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(title: Text("صفحه اصلی")),
     body: Center(
       // استفاده از ValueListenableBuilder برای نمایش لیست
       child: ValueListenableBuilder<List<String>>(
         valueListenable: listNotifier,
         builder: (context, list, child) {
           if (list.isEmpty) {
             return Text("هنوز داده‌ای ذخیره نشده است.");
           }
           return ListView.builder(
             itemCount: list.length,
             itemBuilder: (context, index) {
               return ListTile(
                 title: Text(list[index]),
               );
             },
           );
         },
       ),
     ),
   );
 }
}
بهترین پاسخ
یلدا محصلی ۰۱ بهمن ۱۴۰۳، ۱۳:۵۷