MaterialApp 作为 MediaQuery 小部件的祖先。但是怎么办?
MaterialApp as ancestor of MediaQuery widget. But how?
我正在尝试根据 window/screen 的宽度制作三种不同的布局。我收到错误 “找不到 MediaQuery 小部件祖先。” 由于有很多示例表明人们对 MediaQuery 小部件祖先有问题,我想,我必须给 MediaQuery 小部件一个 MaterialApp作为祖先。但是我不能全神贯注,我该如何实现呢?有人可以帮助我吗?
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) {
var screenSize = MediaQuery.of(context).size;
if (screenSize.width < 600) {
return lay1();
} else if (screenSize.width < 800) {
return lay2();
} else {
return lay3();
}
}
}
Widget lay1() {
return Container(
color: Colors.lightGreenAccent,
);
}
Widget lay2() {
return Container(
color: Colors.lightBlueAccent,
);
}
Widget lay3() {
return Container(
color: Colors.orangeAccent,
);
}
您应该将 MyApp
小部件包装在 MaterialApp
小部件中,如下所示:
void main() {
runApp(const MaterialApp(
home: MyApp(),
));
}
MediaQuery
实例由 MaterialApp
提供。这就是为什么在获取 MediaQuery
的当前实例时需要调用 MediaQuery.of(context)
,并从那里提取视图的大小
我正在尝试根据 window/screen 的宽度制作三种不同的布局。我收到错误 “找不到 MediaQuery 小部件祖先。” 由于有很多示例表明人们对 MediaQuery 小部件祖先有问题,我想,我必须给 MediaQuery 小部件一个 MaterialApp作为祖先。但是我不能全神贯注,我该如何实现呢?有人可以帮助我吗?
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) {
var screenSize = MediaQuery.of(context).size;
if (screenSize.width < 600) {
return lay1();
} else if (screenSize.width < 800) {
return lay2();
} else {
return lay3();
}
}
}
Widget lay1() {
return Container(
color: Colors.lightGreenAccent,
);
}
Widget lay2() {
return Container(
color: Colors.lightBlueAccent,
);
}
Widget lay3() {
return Container(
color: Colors.orangeAccent,
);
}
您应该将 MyApp
小部件包装在 MaterialApp
小部件中,如下所示:
void main() {
runApp(const MaterialApp(
home: MyApp(),
));
}
MediaQuery
实例由 MaterialApp
提供。这就是为什么在获取 MediaQuery
的当前实例时需要调用 MediaQuery.of(context)
,并从那里提取视图的大小