citomoltd_workspace.json
C

CitomoLtd

Verified Studio
const Organization = { ceo: "Md Shakil Hossain" };
 

Flutter GridView, ListView & Custom Widget - All Common Properties


 

Flutter GridView, ListView & Custom Widget - All Common Properties


🔹 ListView - All Common Properties

List আকারে Widget দেখানোর জন্য ব্যবহার করা হয়।

ListView(

  // Children Widgets
  children: [

    Text("Item 1"),

    Text("Item 2"),

    Text("Item 3"),
  ],

  // Scroll Direction
  scrollDirection: Axis.vertical,

  // Reverse Scroll
  reverse: false,

  // Padding
  padding: EdgeInsets.all(16),

  // Scroll Controller
  controller: scrollController,

  // Physics
  physics: BouncingScrollPhysics(),

  // Content অনুযায়ী Height নিবে
  shrinkWrap: false,

  // Primary Scroll View
  primary: false,

  // Keyboard Dismiss
  keyboardDismissBehavior:
      ScrollViewKeyboardDismissBehavior.onDrag,

  // Item Clip
  clipBehavior: Clip.hardEdge,
)

🔹 ListView.builder

বড় List-এর জন্য সবচেয়ে বেশি ব্যবহৃত।

ListView.builder(

  // Total Item
  itemCount: 100,

  // Item Builder
  itemBuilder: (context, index) {

    return ListTile(
      title: Text(
        "Item $index",
      ),
    );
  },

  // Scroll Direction
  scrollDirection: Axis.vertical,

  // Reverse
  reverse: false,

  // Padding
  padding: EdgeInsets.all(10),

  // Shrink Wrap
  shrinkWrap: false,

  // Physics
  physics: BouncingScrollPhysics(),
)

🔹 ListView.separated

Item এর মাঝে Divider দেওয়ার জন্য।

ListView.separated(

  itemCount: 20,

  itemBuilder: (context, index) {

    return ListTile(
      title: Text(
        "Item $index",
      ),
    );
  },

  separatorBuilder:
      (context, index) {

    return Divider();
  },
)

🔹 ListView.custom

ListView.custom(

  childrenDelegate:
      SliverChildBuilderDelegate(

    (context, index) {

      return Text(
        "Item $index",
      );
    },
  ),
)

🔹 GridView - All Common Properties

Grid Layout তৈরির জন্য ব্যবহার করা হয়।

GridView(

  // Grid Delegate
  gridDelegate:

      SliverGridDelegateWithFixedCrossAxisCount(

    // Column Count
    crossAxisCount: 2,

    // Horizontal Gap
    crossAxisSpacing: 10,

    // Vertical Gap
    mainAxisSpacing: 10,

    // Item Ratio
    childAspectRatio: 1,
  ),

  children: [

    Container(color: Colors.red),

    Container(color: Colors.green),

    Container(color: Colors.blue),
  ],

  padding: EdgeInsets.all(10),

  physics: BouncingScrollPhysics(),

  shrinkWrap: false,
)

🔹 GridView.builder

সবচেয়ে বেশি ব্যবহৃত GridView।

GridView.builder(

  itemCount: 100,

  gridDelegate:

      SliverGridDelegateWithFixedCrossAxisCount(

    crossAxisCount: 2,

    crossAxisSpacing: 10,

    mainAxisSpacing: 10,

    childAspectRatio: 1,
  ),

  itemBuilder: (context, index) {

    return Card(
      child: Center(
        child: Text(
          "$index",
        ),
      ),
    );
  },
)

🔹 GridView.extent

GridView.extent(

  // Maximum Width
  maxCrossAxisExtent: 200,

  mainAxisSpacing: 10,

  crossAxisSpacing: 10,

  children: [],
)

🔹 SliverGridDelegate Properties

Fixed Cross Axis Count

SliverGridDelegateWithFixedCrossAxisCount(

  crossAxisCount: 2,

  crossAxisSpacing: 10,

  mainAxisSpacing: 10,

  childAspectRatio: 1,

  mainAxisExtent: 200,
)

Max Extent

SliverGridDelegateWithMaxCrossAxisExtent(

  maxCrossAxisExtent: 200,

  crossAxisSpacing: 10,

  mainAxisSpacing: 10,

  childAspectRatio: 1,

  mainAxisExtent: 200,
)

🔹 Custom Widget

বারবার একই UI ব্যবহার করার জন্য Custom Widget তৈরি করা হয়।


Stateless Custom Widget

class MyButton extends StatelessWidget {

  final String title;

  const MyButton({
    super.key,
    required this.title,
  });

  @override
  Widget build(
    BuildContext context,
  ) {

    return ElevatedButton(

      onPressed: () {},

      child: Text(title),
    );
  }
}

Usage

MyButton(
  title: "Login",
)

Stateful Custom Widget

class CounterWidget
    extends StatefulWidget {

  const CounterWidget({
    super.key,
  });

  @override
  State<CounterWidget>
      createState() {

    return _CounterWidgetState();
  }
}

class _CounterWidgetState
    extends State<CounterWidget> {

  int count = 0;

  @override
  Widget build(
    BuildContext context,
  ) {

    return Column(

      children: [

        Text("$count"),

        ElevatedButton(

          onPressed: () {

            setState(() {

              count++;
            });
          },

          child: Text("Increment"),
        ),
      ],
    );
  }
}

🔹 Reusable Card Widget

class UserCard
    extends StatelessWidget {

  final String name;

  final String email;

  const UserCard({

    super.key,

    required this.name,

    required this.email,
  });

  @override
  Widget build(
    BuildContext context,
  ) {

    return Card(

      child: ListTile(

        title: Text(name),

        subtitle: Text(email),
      ),
    );
  }
}

Usage

UserCard(

  name: "Shakil",

  email: "abc@gmail.com",
)

📌 ListView Summary

Widgetব্যবহার
ListViewসাধারণ List
ListView.builderLarge Data
ListView.separatedDivider সহ List
ListView.customAdvanced List

📌 GridView Summary

Widgetব্যবহার
GridViewসাধারণ Grid
GridView.builderLarge Grid
GridView.extentResponsive Grid

📌 Custom Widget Summary

Widgetব্যবহার
StatelessWidgetStatic UI
StatefulWidgetDynamic UI
Reusable WidgetCode Reuse
Custom CardCommon UI Design

Flutter-এ Clean Code এবং Reusable UI তৈরির জন্য Custom Widget ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ।

Comments