【发布时间】:2021-03-17 18:29:26
【问题描述】:
谁能解释我收到此错误的原因以及如何解决?
我正在使用我的 _page() 函数来创建我的主页,但现在我已经为 MyHomePage 创建了一个新文件,它给了我那个类型错误。如果我删除 context.read 行的“作为容器”部分,我会得到一个不同的错误。
无论如何,我对“作为容器”部分有点困惑,但我认为它与 Flutter 2.0 相关,因为直到我迁移到 2.0 之后才出现。
在查看此错误时,我看到我应该尝试重新启动应用程序,所以我这样做了,它似乎可以工作,直到我切换到不同的页面,然后尝试切换回主页,即当我收到错误消息时。
我不确定这对这个错误是否重要,但我正在使用 Riverpod 进行状态管理。
my_drawer.dart:
class MyDrawer extends StatefulWidget {
MyDrawer({Key? key}) : super(key: key);
@override
_MyDrawerState createState() => _MyDrawerState();
}
class _MyDrawerState extends State<MyDrawer> {
Widget _homePage = MyHomePage();
Widget _galleryPage = _page(Colors.white, "Gallery");
Widget _bookAppPage = _page(Colors.white, "Book An Appointment");
Widget _aboutUsPage = _page(Colors.white, "About Us");
Widget _contactUsPage = _page(Colors.white, "Contact Us");
Widget _settingsPage = _page(Colors.white, "Settings");
@override
void initState() {
super.initState();
WidgetsBinding.instance!.addPostFrameCallback((_) {
context.read(fragmentProvider).state = _homePage as Container;
});
}
...
...
...
// Temp function to create the rest of the pages
_page(Color color, String title) {
return Container(
height: double.infinity,
width: double.infinity,
color: color,
child: Center(
child: Text(
'$title',
style: TextStyle(fontSize: 30, color: Colors.black),
),
),
);
}
这是 MyHomePage 类:
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(),
drawer: MyDrawer(),
body: Stack(
children: [
Text("Home"),
Consumer(
builder: (context, watch, _) {
final body = watch(fragmentProvider).state;
return body;
},
),
],
),
);
}
}
【问题讨论】:
-
考虑为每个页面创建一个枚举,然后更改您的片段提供程序以提供该枚举,然后使用地图根据枚举决定显示哪个页面,而不是将小部件存储在提供程序中。我不认为你做错了,但很奇怪。
-
我会研究一下,但我对 Flutter 还是很陌生,老实说不知道如何去做。如果您发现任何可以帮助我的链接,请发送!
-
老实说,您的事情过于复杂,强烈建议您在继续之前查看官方和第三方示例:riverpod.dev/docs
-
我将阅读文档并尝试更好地了解如何使用 Riverpod,因为这是我使用 Riverpod 的第一个项目。我昨天查看了枚举和地图,但我仍然不确定如何正确使用它。希望我最终能弄清楚。感谢您的帮助,我真的很感激。顺便说一句,您提供的链接不起作用,但我假设您的意思是这个链接:[link](riverpod.dev/docs/getting_started)
标签: flutter dart state-management riverpod