gpt4 book ai didi

flutter - 抽屉布局 : How to make this Custom Layout in flutter

转载 作者:IT王子 更新时间:2023-10-29 07:14:04 27 4
gpt4 key购买 nike

我有一个抽屉,我想在其中实现以下屏幕截图中发布的布局。

AllTask​​s、Today、Complete 和 Incomplete 以及 numbers 是固定的。用户不能添加这些。已经被我添加了。 CreateList 和 Settings 也是如此。

MyList 由用户添加,他可以添加更多如食物、运动、阅读等。

分隔符,也可能在 1 行或 3 行之后显示为组。

我应该使用 ListView 吗?请提出任何建议。

https://us.v-cdn.net/5019960/uploads/editor/ed/wtgcly2nls78.jpg

https://us.v-cdn.net/5019960/uploads/editor/2t/0g4rbo6rufsm.png

最佳答案

您有几种方法可以做到这一点,第一种方法是像这样使用 ListView:

drawer: new Drawer(
child: new Column(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: const Text('Test Widget'),
accountEmail: const Text('test.widget@example.com'),
margin: EdgeInsets.zero,
onDetailsPressed: () {},
),
new Expanded(
child: new ListView(
padding: const EdgeInsets.only(top: 8.0),
children: <Widget>[
new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: _drawerContents.map((String id) {
return new ListTile(
leading: new CircleAvatar(child: new Text(id)),
title: new Text('Drawer item $id'),
);
}).toList(),
),
// The drawer's "details" view.
new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
new ListTile(
leading: const Icon(Icons.add),
title: const Text('Add account'),
),
new ListTile(
leading: const Icon(Icons.settings),
title: const Text('Manage accounts'),
),
],
),
],
),
),
],
),
)

但它只对有限数量的列表项有效,因为该 ListView 的所有项目都是一次呈现的。

另一种方法是使用像这样的 ListView.builder:

drawer: new Drawer(
child: new Column(
children: <Widget>[
new UserAccountsDrawerHeader(
accountName: const Text('Test Test'),
accountEmail: const Text('test@example.com'),
margin: EdgeInsets.zero,
onDetailsPressed: () {},
),
new Expanded(
child: new ListView.builder(
itemBuilder: (BuildContext context, int index) =>
new EntryItem(data[index]),
itemCount: data.length,
),
),
],
),
),

这样一来,您的列表元素将在滚动过程中一个接一个地呈现。您应该为硬编码元素和可变元素创建一个模型,然后创建一个不同的 ListTile(在示例 EntryItem 中)。

如果您需要更多详细信息,请告诉我。

附言。下面的 EntryItem 示例:

class EntryItem extends StatelessWidget {
const EntryItem(this.entry);

final Entry entry;

Widget _buildTiles(Entry root) {
if(root.counter != null) {
return new ListTile(
leading: Icon(root.icon),
title: Text(root.title),
trailing: new Text(root.counter)
);
} else {
return new ListTile(
leading: Icon(root.icon),
title: Text(root.title),
);
}
}

@override
Widget build(BuildContext context) {
return _buildTiles(entry);
}
}

关于flutter - 抽屉布局 : How to make this Custom Layout in flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50338887/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com