用户体验控制之 禁用系统字体缩放

141 阅读1分钟

两种方式:一种是禁用全局,一种是禁用跳转的单个页面。本质上用的都是一行代码。 全局配置

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化应用
  await AppInit.initialize();

  runApp(const ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      designSize: const Size(375, 812),
      minTextAdapt: true,
      splitScreenMode: true,
      builder: (context, child) {
        return MediaQuery(
          data: MediaQuery.of(
            context,
          ).copyWith(textScaler: TextScaler.linear(1.0)), /// 这里
          child: child!,
        );
      },
      child: MaterialApp.router(
        title: 'App',
        theme: ThemeData(
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
          useMaterial3: true,
        ),
        debugShowCheckedModeBanner: false,
        routerConfig: AppRouter.router,
      ),
    );
  }
}

单个页面跳转配置

  ///公共打开方式
  ///第一步让其用ios的跳转风格
  ///第二步配置其字体不缩放配置
  ///第三步根据设备来控制内部滚动视图的效果
  static NavigatorRouter(BuildContext context, Widget widget) {
    return Navigator.push(
        context,
        CupertinoPageRoute(
            //  iOS 风格页面跳转动画
            builder: (context) =>
                pageContainer(widget, context))); //  iOS 风格页面跳转动画
  }

  ///Page页面的容器,做一次通用自定义
  static Widget pageContainer(widget, BuildContext context) {
    return MediaQuery(

        ///不受系统字体缩放影响
        data: MediaQuery.of(context)
            .copyWith(textScaler: TextScaler.noScaling), // 先复制系统字体配置,再设置字体不缩放
        child: NeverOverScrollIndicator(
          needOverload: false,
          child: widget,
        ));
  }