【发布时间】:2022-01-21 19:49:51
【问题描述】:
我正在创建一个 Flutter 应用程序。而且我第 3 天无法使用“添加”按钮手动将项目添加到 ListView。
我尝试使用 setState,但它在无状态小部件中不起作用。因为我有从有状态小部件到无状态的路线。我正在使用 Navigator.push(...)。
然后我尝试使用 Cubit,但它不起作用。 Flutter - BloC Cubit function doesn't emitting state
我能做什么?
[代码太大了。我上传了必要的部分]
主页(有状态小部件)
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
有状态小部件的状态
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: 'List App',
actions: [
IconButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SearchPage())
);
}
])
})
搜索页面(带有 ListView)
class SearchPage extends StatelessWidget {
const SearchPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return DefaultTabController(
child: Builder(builder: (BuildContext context) {
final TabController tabController = DefaultTabController.of(context)!;
tabController.addListener(() {
if (!tabController.indexIsChanging) {
}
});
return Scaffold(
body: (context, items) => TabBarView(
children: [
Container(
child: FutureBuilder(
future: items_client.getItems(),
builder: (BuildContext context, AsyncSnapshot<List<Item>> snapshot) {
if (snapshot.hasData) {
items = snapshot.data!;
return ListView(
children: items.asMap()
.map(
(i, item) => MapEntry(i,
Column(
children: [
Text('${item.name'})
]
))
)
}
}
)
]
)
)
}
}
【问题讨论】:
-
能否请您添加代码以重现问题
-
已添加回答
-
试试getx简单少代码状态管理
-
据我所知,这段代码有一个带有搜索功能的应用栏,点击时重定向到新屏幕,你的搜索屏幕有动态标签。
-
所以问题是你想实现什么,因为从我所看到的你是否面临在 tabcontroller 中动态添加选项卡让我知道