Contents
Mẹo về Physics ListView Flutter Mới Nhất
Bạn đang tìm kiếm từ khóa Physics ListView Flutter được Update vào lúc : 2022-01-05 08:19:27 . Với phương châm chia sẻ Thủ Thuật về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi tìm hiểu thêm tài liệu vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Admin lý giải và hướng dẫn lại nha.
A ListView in Flutter is a linear list of scrollable items. We can use it to make a list of items scrollable or make a list of repeating items.
Nội dung chính
- Exploring the types of ListViewA few more things to knowVideo liên quan
Exploring the types of ListView
Well start with looking the types of ListViews and later look the other features and neat modifications for it.
Lets look the types of ListViews there are:
ListViewListView.builderListView.separatedListView.custom
Lets go around exploring these types one by one:
This is the default constructor of the ListView class. A ListView simply takes a list of children and makes it scrollable.
A List contructed using the default constructor:
The general format of the code is:
ListView(
children:[
ItemOne(),
ItemTwo(),
ItemThree(),
],
)
Usually this should be used with a small number of children as the List will also construct the invisible elements in the list and a large amount of elements may render this inefficient.
ListView.builder()
The builder() constructor constructs a repeating list of items. The constructor takes two main parameters:An itemCount for the number of items in the list and an itemBuilder for constructed each list item.
A List contructed using the builder() constructor:
The general format of the code is:
ListView.builder(
itemCount:itemCount,
itemBuilder:(context,position)
return listItem();
)
The list items are constructed lazily,meaning only a specific number of list items are constructed and when a user scrolls ahead,the earlier ones are destroyed.
Neat trick: Since the elements are loaded lazily and only the needed number of elements are loaded,we dont really need an itemCount as a compulsory parameter and the list can be infinite.
ListView.builder(
itemBuilder:(context,position)
return Card(
child:Padding(
padding:const EdgeInsets.all(16.0),
child: Text(position.toString(),style:TextStyle(fontSize:22.0))
),
);
)
A ListView without the itemCount parameter:
ListView.separated()
In the separated() constructor,we generate a list and we can specify the separator between each item.
A ListView constructed using the ListView.separated() constructor:
In essence,we construct two interweaved lists: one as the main list,one as the separator list.
Note That: the infinite count discussed in the earlier constructor cannot be used here and this constructor enforces an itemCount.
The code for this type goes as:
ListView.separated(
itemBuilder: (context, position) => Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
‘main list $position’,
style:
TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold),
),
),
),
separatorBuilder: (context, position)
if (position % 2 == 0 && position <= 4)
return Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
'Separator list $position',
style: TextStyle(fontSize: 22.0, color: Colors.redAccent),
),
),
);
else
return Container();
,
itemCount: 10,
));
This type of list lets you dynamically define separators,have different types of separators for different types of items,add or remove separators when need,etc.
This implementation can also be used for inserting other types of elements (advertisements for example) easily and without any modification to the main list in the middle of the list items.
Note: The separator list length is 1 less than the item list as a separator does not exist after the last element.
ListView.custom()
The custom() constructor as its name suggests,lets you build ListViews with custom functionality for how the children of the list are build. The main parameter required for this is a SliverChildDelegate which builds the items.
The types of SliverChildDelegtes are:
SliverChildListDelegateSliverChildBuilderDelegate
SliverChildListDelegate accepts a direct list of children whereas SliverChildBuilderDelegate accepts an IndexedWidgetBuilder(The builder function we use).
You can either use or subclass these for building your own delegates
ListView.builder is essentially a ListView.custom with a SliverChildBuilderDelegate
The ListView default constructor behaves like a ListView.custom with a SliverChildListDelegate
Now that were done with the types of ListViews,lets take a look ScrollPhysics.
To control the way scrolling takes place,we set the physics parameter in the ListView constructor. The different types of physics are:
NeverScrollablePhysics
NeverScrollablePhysics renders the list non-scrollable.Use this to disable scrolling of the ListView completely.
BouncingScrollPhysics
BouncingScrollPhysics bound back the list when the list ends. A similar effect is used on IOS.
ClampingScrollPhysics
This is the default scrolling physics used on Android. The list stops the end and gives an effect indicating it.
FixedExtentScrollPhysics
This is slightly different than the other ones in this list in the sense that is only works with FixedExtendScrollControllers and lists that use them. For an example we will take a ListWheelScrollView which makes a wheel-like list.
FixedExtentScrollPhysics Only scrolls to items instead of any offset in between.
The code for this example is incredibly simple:
import ‘package:flutter/material.dart’;
class DeepDiveHome extends StatefulWidget
_DeepDiveHomeState createState() => _DeepDiveHomeState();
class _DeepDiveHomeState extends State
FixedExtentScrollController fixedExtentScrollController =
new FixedExtentScrollController();
final mothsOfTheYear = [
“January”,
“February”,
“March”,
“April”,
“May”,
“June”,
“July”,
“August”,
“September”,
“October”,
“November”,
“December”
];
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text(‘Deep Dive Flutter’),
),
body toàn thân: ListWheelScrollView(
controller: fixedExtentScrollController,
physics: FixedExtentScrollPhysics(),
children: mothsOfTheYear.map((month)
return Card(
child: Row(
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
month,
style: TextStyle(fontSize: 18.0),
),
),
)
],
),
);
).toList(),
itemExtent: 60.0,
),
);
A few more things to know
How to keep elements that get destroy alive in a list?
Flutter provides a KeepAlive() widget which keeps an item alive which would have otherwise be destroyed. In a list,elements are wrapped by default in a AutomaticKeepAlive widget.
AutomaticKeepAlives can be disabled by setting the addAutomaticKeepAlives field to false. This is useful in cases where the elements dont need to be kept alive or for a custom implementation of KeepAlive.
Why does my ListView have space between the list and the outer Widget?
By default,a ListView has padding between it and the outer widget,to remove it,set padding to EdgeInsets.all(0.0).
Video Physics ListView Flutter ?
Bạn vừa tìm hiểu thêm nội dung bài viết Với Một số hướng dẫn một cách rõ ràng hơn về Video Physics ListView Flutter tiên tiến và phát triển nhất
Heros đang tìm một số trong những Chia SẻLink Tải Physics ListView Flutter Free.
Giải đáp vướng mắc về Physics ListView Flutter
Nếu sau khi đọc nội dung bài viết Physics ListView Flutter vẫn chưa hiểu thì hoàn toàn có thể lại Comment ở cuối bài để Tác giả lý giải và hướng dẫn lại nha
#Physics #ListView #Flutter