如何查找小部件大小以避免在设备区域之外呈现小部件时进行呈现



这里我有一个中心偏移值,这是我需要定位小部件的位置,我已经在定位小部件的帮助下定位了小部件,并在分数翻译小部件的帮助下将小部件移动到中心,并将其移动到中心偏移。

但是这里有些部件部件是在画布之外呈现的,所以我想忽略在屏幕之外呈现的部件的呈现。如果我得到了小部件的大小,我可以忽略渲染,但是我很难得到小部件的高度和宽度。

我附上了下面的代码片段供参考。

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: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Stack(children: [
Positioned(
left: 20,
top: 150,
child: FractionalTranslation(translation: const Offset(-0.5, -0.5),child: Container(
color: Colors.grey,
child: const Text('Widget size'),
)))
]),
);
}
}

谢谢。

检查这个解决方案,有点复杂,但值得一试:

import 'package:flutter/material.dart';
import 'package:flutter/scheduler.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: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
double height = 0.0;
double width = 0.0;
final GlobalKey _globalKey = GlobalKey();
@override
void initState() {
SchedulerBinding.instance!.addPostFrameCallback((timeStamp) {
height = _globalKey.currentContext!.size!.height;
width = _globalKey.currentContext!.size!.width;
setState(() {});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Stack(children: [
Positioned(
left: 20,
top: 150,
key: _globalKey,
child: FractionalTranslation(
translation: const Offset(-0.5, -0.5),
child: Container(
color: Colors.grey,
child: Text("      $height $width"),//added spaces so you can see it
)))
]),
);
}
}
To get the screen width and height:
Screen width  : MediaQuery.of(context).size.width
Screen height : MediaQuery.of(context).size.height
To center the widget to the screen it is easy as below code.Center Widget do the trick
@override
Widget build(BuildContext context) {
return Scaffold(
key: keyRed,
appBar: AppBar(),
body: Center(
child: Container(
color: Colors.grey,
child: const Text('Widget size'),
),
),
);
}

我已经至少有一个问题与您的方式中心的容器。然而,我试图得到一个小部件的大小选项的处理。在Flutter中有02种方法可以做到这一点。

  1. 为给定的上下文使用MediaQuery
  • final double ScreenWidth: MediaQuery.of(context).size.width
  • final double ScreenHeight: MediaQuery.of(context).size.height
  1. 在layoutget中使用constraints参数。下面是使用layoutget的示例。我希望这两种方法对你有帮助。
Scaffold(
appBar: AppBar(),
body: Stack(children: [
Positioned(
left: 20,
top: 150,
child: FractionalTranslation(
translation: const Offset(-0.5, -0.5),
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
if (constraints.maxWidth < 600) {
return Container(
color: Colors.teal,
width: 150,
height: 150,
child: const Text('Widget size'),
);
} else {
return Container(
color: Colors.grey,
width: 350,
height: 350,
child: const Text('Widget size'),
);
}
},
),
))
]),
);

最新更新