我在一个包含多个选项卡的页面中有一个ListView.builder
.
删除列表项(通过向左或向右滑动)后,转到另一个选项卡,然后返回到第一个选项卡会导致范围错误.
转到另一页并返回不会导致错误.也许转到另一个页面会导致生成器重新构建,而tab不会?
我是做错了什么,还是这是一个TabView
的错误?下面是完全可复制的代码.
要复制问题,请滑动项目以将其删除,然后转到第二个选项卡,然后返回第一个选项卡.
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'List Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
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) {
List<int> list = [1, 2, 3, 4, 5];
return DefaultTabController(
length: 3,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(icon: Icon(Icons.recycling_outlined)),
Tab(icon: Icon(Icons.directions_transit)),
Tab(icon: Icon(Icons.directions_bike)),
],
),
),
body: TabBarView(
children: [
ListView.builder(
padding: const EdgeInsets.all(4.0),
itemCount: list.length,
itemBuilder: (context, index) {
var item = list[index];
return Dismissible(
key: Key(item.toString()),
onDismissed: (direction) {
list.removeAt(index);
},
child: ListTile(
title: Text(item.toString()),
),
);
},
),
const Icon(Icons.directions_transit),
const Icon(Icons.directions_bike),
],
),
),
);
}
}