【发布时间】:2021-06-24 19:38:34
【问题描述】:
我遇到了这个问题github link. 如果一个小部件使用 TickerProviderStateMixin,那么当页面导航发生时它会被重建。我有一个非常复杂的页面,重建整个页面会导致页面导航出现 UI 卡顿。如果我不重建,那么一切都很好,没有卡顿。有解决方法吗?在我看来,这是某种内部颤振错误或意外行为?
例子:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PageA(title: 'Flutter Demo Home Page'),
);
}
}
class PageA extends StatefulWidget {
PageA({Key key, this.title}) : super(key: key);
final String title;
@override
_PageAState createState() => _PageAState();
}
class _PageAState extends State<PageA>
with SingleTickerProviderStateMixin {
TabController tabController;
@override
void initState() {
super.initState();
tabController = TabController(length: 2, vsync: this);
}
void toPageB() {
//tabController.animateTo(1);
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
return PageB();
}));
}
@override
Widget build(BuildContext context) {
print("Page A");
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: TabBar(
tabs: [
Text(
"Tab A",
style: Theme.of(context).textTheme.bodyText1,
),
Text(
"Tab B",
style: Theme.of(context).textTheme.bodyText1,
)
],
controller: tabController,
),
),
floatingActionButton: FloatingActionButton(
onPressed: toPageB,
child: Icon(Icons.add),
),
);
}
}
class PageB extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("Page B");
return Scaffold(
appBar: AppBar(
title: Text("Page A"),
),
body: Container(
child: Center(
child: Text("Page A"),
),
));
}
}
【问题讨论】:
-
即使你不使用
TickerProviderStateMixin,重建也可能发生,这只是 Flutter 的做事方式。你无能为力。 -
好吧,我想我只是对颤振无法保持我的树结构感到失望。我有大约 400 个容器和一些动画对象。
-
400 个容器在列表、列或其他地方?
-
在页面视图内
-
好的,那么你是在使用
PageView.builder还是其他构造函数?
标签: flutter