如何解决如何使用MediaQuery构建主题?
开始学习Flutter,所以我在考虑是否有可能创建一个返回ThemeData
对象的函数,但是在这个函数中我想使用MediaQuery.of(context)
。我的意思是,我知道我可以创建这样的函数,但是如果我在其中使用MediaQuery.of(context)
,则会出错
(MediaQuery.of() called with a context that does not contain a MediaQuery)
抱怨缺少MediaQueryProvider。我知道我可以在MaterialApp的子元素中使用MediaQuery,但是现在有一个设计问题。想象一下:
ThemeData getTheme(BuildContext context) {
// I wanna be able to call MediaQuery.of(contex) here
return ThemeData();
}
MaterialApp(
home: home,// the getTheme() must be able to use MediaQuery. It takes a context and returns a ThemeData object
theme: theme.getTheme(context),routes: routes,)
有办法吗?还是活动更好,我应该这样做吗?
谢谢您的帮助。
解决方法
欢迎加入兄弟会。
实际上,要调用MediaQuery
,您将需要用MaterialApp()
包装主窗口小部件,这通常是在main.dart文件中完成的。
这是一个示例:
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),);
}
}
希望有帮助!
,您可以尝试一下。
为home
的{{1}}创建一个无状态/有状态的小部件,并在其中创建MaterialApp
方法。
示例
getTheme
现在,在您的材质应用中,只需调用该方法即可。
homePage extends StatelessWidget{
ThemeData getTheme(BuildContext context) {
// Call MediaQuery.of(contex) here
return ThemeData();
}
@override
//build method
}//homePage ends here.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。