Flutter 在列表视图后禁用FloatingAction按钮并显示超出限制的消息
如何禁用按钮(在本例中为Flutter 在列表视图后禁用FloatingAction按钮并显示超出限制的消息,flutter,mobile,flutter-layout,Flutter,Mobile,Flutter Layout,如何禁用按钮(在本例中为FAB(浮动操作按钮)),并防止用户因超出限制而向列表中添加更多项目并显示消息?我正在使用一个FutureBuilder和一个ListView.builder,在用户向列表中添加3个项目后,我想禁用FAB并阻止用户向列表中添加更多项目,并向用户显示某种通知/消息/浮动按钮消息,说明他超出了每个列表3个项目的限制。代码如下: import 'package:flutter/cupertino.dart'; import 'package:flutter/material.d
FAB(浮动操作按钮)
),并防止用户因超出限制而向列表中添加更多项目并显示消息?我正在使用一个FutureBuilder
和一个ListView.builder
,在用户向列表中添加3个项目后,我想禁用FAB并阻止用户向列表中添加更多项目,并向用户显示某种通知/消息/浮动按钮消息,说明他超出了每个列表3个项目的限制。代码如下:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'screens/add_items_screen.dart';
import 'components/items_list.dart';
class ItemScreen extends StatelessWidget {
static const String id = 'item_screen';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
iconTheme: IconThemeData(
color: Colors.grey[600],
),
),
/// I want to disable this button after the limit of 3 items in the list view
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.grey,
child: Icon(Icons.add),
onPressed: () {
showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (context) => SingleChildScrollView(
child: Container(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom),
child: AddItemScreen(),
)));
},
),
body: SafeArea(
child: SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(20.0),
color: Colors.grey[100],
child: Container(
height: 800,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Item List Display',
style: TextStyle(
fontSize: 22.0,
fontWeight: FontWeight.w700,
),
),
SizedBox(
height: 20.0,
),
Expanded(
child: Column(
children: [
/// Here is where the items are rendered as a list
Expanded(child: ItemList()),
],
),
),
],
),
),
),
),
),
);
}
}
项目列表组件:
import 'package:flutter/material.dart';
import 'common/api/api_caller.dart';
import 'utilities/item_api_helper.dart';
import 'models/item.dart';
import 'stores/item_store.dart';
import 'dart:async';
import 'package:provider/provider.dart';
class ItemList extends StatefulWidget {
@override
_ItemList createState() => _ItemList();
}
class _ItemList extends State<ItemList> {
Future<HTTPResponse<List<ItemData>>> _getItemList() async {
var _itemData = await APICaller.instance.getItems();
var provider = Provider.of<ItemDatStore>(context, listen: false);
provider.setItemList(_itemData.data, notify: false);
return _itemData;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: FutureBuilder<HTTPResponse<List<ItemData>>>(
future: _getItemList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Consumer<ItemDataStore>(
builder: (context, itemData, child) {
return ListView.builder(
itemCount: itemData.itemList.length,
itemBuilder: (context, index) {
ItemData items =
itemData.getItemByIndex(index);
return Card(
child: Container(
padding: EdgeInsets.all(10.0),
child: Text('items.title'),
),
);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return Container();
},
),
),
);
}
}
导入“包装:颤振/材料.省道”;
导入“common/api/api_caller.dart”;
导入“实用程序/item_api_helper.dart”;
导入“models/item.dart”;
导入'stores/item_store.dart';
导入“dart:async”;
导入“包:provider/provider.dart”;
类ItemList扩展了StatefulWidget{
@凌驾
_ItemList createState()=>\u ItemList();
}
类_ItemList扩展了状态{
Future\u getItemList()异步{
var_itemData=wait APICaller.instance.getItems();
var provider=provider.of(上下文,侦听:false);
provider.setItemList(_itemData.data,notify:false);
返回_itemData;
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:安全区(
孩子:未来建设者(
未来:_getItemList(),
生成器:(上下文,快照){
if(snapshot.hasData){
退货消费者(
生成器:(上下文、项数据、子项){
返回ListView.builder(
itemCount:itemData.itemList.length,
itemBuilder:(上下文,索引){
项目数据项=
itemData.getItemByIndex(索引);
回程卡(
子:容器(
填充:所有边缘设置(10.0),
子项:文本('items.title'),
),
);
}else if(snapshot.hasrerror){
返回文本(“${snapshot.error}”);
}
返回容器();
},
),
),
);
}
}
我尝试过使用
if
语句,在这里我可以定义if(itemData.itemList.length您可以像这样禁用FAB
onPressed: items.length < 3? addItemToList : null;
您可以像这样禁用晶圆厂
onPressed: items.length < 3? addItemToList : null;
您可以使用隐藏的可见性包装浮动操作按钮,使其不再工作:)
您可以使用隐藏的可见性包装浮动操作按钮,使其不再工作:)
谢谢,但如何通知用户按钮因超出限制而禁用?您可以通知显示晶圆厂内外的一些倒计时数字。谢谢,但如何通知用户按钮因超出限制而禁用?您可以通知显示晶圆厂内外的一些倒计时数字。
Visibility(
visible: items.length > 3,
child : FAB here,
),