![見出し画像](https://assets.st-note.com/production/uploads/images/103851492/rectangle_large_type_2_5208ad475482ca3325b08b59351dadd6.png?width=1200)
スマホ毎のレスポンシブ対応を解決!(screenutilライブラリ)
flutterでアプリ開発を進めていく中で、壁にぶち当たりました。
スマホごとに画面サイズが違うことは分かっているけど、うまいことやってくれるでしょう精神でいると、悲惨なことが起きます。
![](https://assets.st-note.com/img/1682310118952-CUQhsBwyOV.png?width=1200)
とまぁこんな感じで、スマホサイズによって、画面外に飛び出してエラー起きちゃうよって話です。
ちなみに、上記の画像のコードはこんな感じ。
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'screenutilライブラリの確認',
style: TextStyle(fontSize: 30),
),
Center(
child: Container(height: 350,width: 400,color: Colors.red,),
),
Center(
child: Container(height: 350,width: 400,color: Colors.blue,),
),
],
),
),
皆さんも開発する上で、事前に考えておきましょう。
その上で、解決してくれるライブラリを紹介します。
flutter_screenutil
なんて発音すれば良いか分からないライブラリですね。
Googleさんに読んでもらいましたけど、「スクリーニュゥティル」って言ってました。
スクリーンユーティリティってことですかね。
このライブラリを使用すると、一部変更するだけで、画面サイズに合わせて調整してくれます。
![](https://assets.st-note.com/img/1682310001360-1yvECv41Ly.png?width=1200)
変更内容としては『fontSize: 30.sp』のように、文字サイズであれば「.sp」を、画像などのサイズであれば「.h」や「.w」と記載するだけです。
(初期設定が少しだけ手間ですが、そのあとは簡単♪)
コードはこんな感じ。
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'screenutilライブラリの確認',
style: TextStyle(fontSize: 30.sp),
),
Center(
child: Container(height: 350.h,width: 400.w,color: Colors.red,),
),
Center(
child: Container(height: 350.h,width: 400.w,color: Colors.blue,),
),
],
),
),
いざ、導入!
どんなライブラリか分かった所で、早速、入れていきましょう。
ターミナルでライブラリをゲット!
flutter pub add flutter_screenutil
ライブラリを利用するファイルに、インポートコードを記載!
import 'package:flutter_screenutil/flutter_screenutil.dart';
main.dartのvoid main() を修正!
void main() {
runApp(
ScreenUtilInit(
designSize: const Size(428, 926),
builder: (BuildContext context, Widget? widget) => const MyApp(),
)
);
}
ここまで、できれば後は、「.sp」とか「.h」を記載するだけです。
designSize: const Size(428, 926), とは?
基準となる画面サイズを設定するコードです。
自分は、iPhone 13 Pro Max でビルドしていたので、その画面サイズである『横428px 縦926px』にしました。(iPhone 13 持ってないけど。)
皆さんもすでに作り始めているのであれば、ビルドしている画面サイズを基準にすれば良いのかなと思います。
例えば、
「fontSize: 30.sp」と記載した場合、こういう意味合いになります。
基準で設定した画面サイズ(428, 926)がフォントサイズ30の時、iPhone 8 の画面サイズ(375, 667)だと、いくつ。
っというように計算し表示されます。
その為、毎回、画面サイズが違うスマホでテストする必要がなくなります!
便利ですね!
ということで、最後まで見てくださりありがとうございました。
このコードの全文を載せておきます。
ありがとうございました。
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
void main() {
runApp(
ScreenUtilInit(
designSize: const Size(428, 926),
builder: (BuildContext context, Widget? widget) => const MyApp(),
)
);
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: const [
Center(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text("flutter_screenutilライブラリ"),
),
),
],
),
),
),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'screenutilライブラリの確認',
style: TextStyle(fontSize: 30.sp),
),
Center(
child: Container(height: 350.h,width: 400.w,color: Colors.red,),
),
Center(
child: Container(height: 350.h,width: 400.w,color: Colors.blue,),
),
],
),
), // This trailing comma makes auto-formatting nicer for build methods.
),
);
}
}