如何使用flutter_screenutil实现Flutter应用字体随设备尺寸自适应缩放
字体不随设备尺寸自适应缩放的解决方法
以下是针对你当前代码的修改方案,按顺序核对调整即可:
- 修正
ScreenUtilInit的参数配置
你当前使用的builder传参方式是旧版写法,v5及以上版本的flutter_screenutil需要传入上下文才能正确获取设备尺寸,同时需要显式开启minTextAdapt参数来允许字体随屏幕缩放,修改后的初始化代码如下:
ScreenUtilInit( designSize: const Size(412, 869), minTextAdapt: true, // 开启字体自适应 splitScreenMode: true, // 适配平板、横屏、分屏等大尺寸场景 builder: (context, child) => MaterialApp( useInheritedMediaQuery: true, // 确保屏幕参数向下传递到所有子组件 debugShowCheckedModeBanner: false, title: 'Progressive Institute Events', // 新增全局字体缩放配置,避免系统字体大小设置干扰适配规则 builder: (context, widget) { return MediaQuery( data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0), child: widget!, ); }, theme: ThemeData( primarySwatch: Colors.blue, textTheme: TextTheme( bodyText1: TextStyle(fontSize: 16.sp), bodyText2: TextStyle(fontSize: 16.sp), ), ), home: _runIntroSlider ? IntroScreen( disableIntroScreen: _disableIntroScreen, ) : auth.isAuth ? HomeScreen() : FutureBuilder( future: auth.tryAutoLogin(), builder: (ctx, authResultSnapshot) => authResultSnapshot.connectionState == ConnectionState.waiting ? const Center(child: CircularProgressIndicator()) : AuthScreen(), ), routes: { TabsScreen.routeName: (ctx) => const TabsScreen(), SponsorDetailsScreen.routeName: (ctx) => const SponsorDetailsScreen(), QuestionScreen.routeName: (ctx) => const QuestionScreen(), SendPushNotificationScreen.routeName: (ctx) => const SendPushNotificationScreen(), AboutAppScreen.routeName: (ctx) => const AboutAppScreen(), }, ), )
- 检查业务代码中的字体配置
如果你在页面中自定义了TextStyle,必须确保所有fontSize都使用.sp后缀,不要写固定数值,否则这些文本不会适配屏幕尺寸。
内容的提问来源于stack exchange,提问作者Barnett Temwa Msiska
相关产品推荐
相关产品推荐

