有沒有合適的方法來撰寫回應式應用程式而無需任何額外的包?我通常使用 MediaQuery,但我覺得它不夠合適,因為很難從 figma 測量大小,因為 figma 使用數字所以我必須計算它,但我擔心每次計算它都不精確,而且字體大小是用來制作它的反應靈敏?
var height = MediaQuery.of(context).size.height;
var width = MediaQuery.of(context).size.width;
uj5u.com熱心網友回復:
通過使用 Sizer 插件,我們可以使 Flutter 應用程式回應。
https://pub.dev/packages/sizer
請參見下面的示例:
添加到
pubspec.yaml依賴項:flutter:sdk:flutter sizer:^2.0.15
在代碼中添加匯入陳述句
import 'package:sizer/sizer.dart';用 ResponsiveSizer 小部件包裝 MaterialApp
主要.dart
import 'package:flutter/material.dart';
import 'package:mediaquerydemo/sizer_demo.dart';
import 'package:sizer/sizer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Sizer(
builder: (context, orientation, deviceType) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SizerDemo(),
);
}
);
}
}
- 您可以在其中顯示 UI 的實際代碼
SizerDemo.dart
import 'package:flutter/material.dart';
import 'package:sizer/sizer.dart';
class SizerDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
final deviceInfo = MediaQuery.of(context);
late var h = deviceInfo.size.height;
late var w = deviceInfo.size.width;
return Scaffold(
appBar: AppBar(
title: Text("Responsive App"),
),
body: deviceInfo.orientation == Orientation.portrait
? SizedBox(
width:30.w,
height: 20.h,
child: Container(
child: Center(child: Text("HELLO", style: TextStyle(fontSize: 20.sp),)),
color: Colors.green,
),
)
: SizedBox(
width:30.w,
height: 20.h,
child: Container(
child: Center(child: Text("World!", style: TextStyle(fontSize: 20.sp),)),
color: Colors.red,
),
)
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459959.html
