flutter - 单击网格元素以显示更多元素颤动
解决方案
解决方案:
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class Contact {
final String name;
Contact(this.name);
}
class ContactsPage extends StatefulWidget {
@override
_ContactsPageState createState() => _ContactsPageState();
}
class _ContactsPageState extends State<ContactsPage> {
final contacts = [
Contact("sahar"),
Contact("Joe"),
Contact("fo"),
Contact("Fifo"),
Contact("Moshe"),
];
var _displayAll = false;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("contacts"),),
backgroundColor: Colors.white,
body: Center(
child:_gridContacts(),
),
);
}
Widget _gridContacts() {
final size = _displayAll ? contacts.length : contacts.length - 2;
final contactsWidget = List.generate(
size, (index) => _contactItem(contacts[index]))
..add(_seeNoSeeMore());
return GridView.count(
crossAxisCount: 3,
childAspectRatio: 2/1,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
children: contactsWidget,);
}
Widget _contactItem(Contact item) {
return Container(
color: Colors.blue.withOpacity(0.5),
padding: EdgeInsets.all(5),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.person),
Text(item.name),
],
),
);
}
Widget _seeNoSeeMore() {
return InkWell(
onTap: ()=>setState(()=>_displayAll = !_displayAll),
child: Container(
color: Colors.blue.withOpacity(0.5),
padding: EdgeInsets.all(5),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.person),
Text(_displayAll?"hide":"Show all"),
],
),
),
);
}
}
注意:为了获得更好的性能,不要使用 setState 而是使用状态管理或本机的一个流构建器。
推荐阅读
- javascript - 在带有 PKCE 的 OAuth 授权流中使用时,如何在 Azure 应用注册中启用 CORS?
- excel - 如果范围内的单元格不等于空白,则将字符串应用于另一个范围内的单元格
- java - 带有 fcm 的 Android 网页视图
- erlang - 如何在 Erlang 中修复不正确的列表?
- azure-active-directory - 在两个 AD B2C 租户之间共享本地帐户
- mysql - 如何在 laravel 中运行多个查询
- c# - 如何在 Linq 中编写此代码以减少代码?
- python-3.x - 使用 Python 在配置文件底部读取未知数量的行
- php - 如何将分页从“每页”更改为只有第一页和最后一页?
- java - 在java compareTo中通过多种方法进行比较?