You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何根据设备系统语言与国家启动对应App页面?

实现基于系统语言与国家的自动页面跳转方案

完全可以在当前代码结构下实现需求,具体操作步骤如下:

1. 核心逻辑说明

我们需要先获取设备的语言代码和国家代码,再按照你指定的规则匹配对应页面:

  • 优先级最高:系统语言为俄语(ru)且国家为拉脱维亚(LV)→ 启动MyHomeRUPage
  • 次优先级:系统语言为拉脱维亚语(lv)→ 启动MyHomePage
  • 其他俄语环境 → 启动MyHomeRUPage
  • 剩余所有情况(英语或未匹配语言)→ 启动英语版本页面(假设类名为MyHomeENPage,请替换为你实际的英语页面类名)

2. 修改代码实现

步骤2.1 补充本地化配置(必要)

为了正确获取设备的语言和地区信息,需要在MaterialApp中添加本地化代理和支持的语言列表:

步骤2.2 动态判断启动页面

将原来固定的home: MyHomePage()替换为动态判断逻辑,完整修改后的MyApp代码如下:

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';

// 请确保你已导入三个页面的类:MyHomePage、MyHomeRUPage、MyHomeENPage

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations([
    DeviceOrientation.portraitUp,
    DeviceOrientation.portraitDown,
  ]);
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light.copyWith(
    statusBarColor: Colors.transparent,
    statusBarIconBrightness: Brightness.light,
  ));
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => MyAppState(),
      child: MaterialApp(
        title: 'Assistant',
        theme: ThemeData(
          useMaterial3: true,
          colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),
          scaffoldBackgroundColor: const Color.fromARGB(255, 255, 255, 255),
        ),
        // 添加本地化配置
        localizationsDelegates: const [
          GlobalMaterialLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
          GlobalCupertinoLocalizations.delegate,
        ],
        supportedLocales: const [
          Locale('lv', 'LV'), // 拉脱维亚语-拉脱维亚
          Locale('ru', 'LV'), // 俄语-拉脱维亚
          Locale('ru', 'RU'), // 俄语-俄罗斯
          Locale('en'),       // 英语(通用)
          Locale('en', 'US'), // 英语-美国
        ],
        // 动态判断启动页面
        home: _getStartupPage(context),
        debugShowCheckedModeBanner: false,
      ),
    );
  }

  Widget _getStartupPage(BuildContext context) {
    final locale = Localizations.localeOf(context);
    final languageCode = locale.languageCode;
    final countryCode = locale.countryCode;

    // 优先判断俄语+拉脱维亚的情况
    if (languageCode == 'ru' && countryCode == 'LV') {
      return const MyHomeRUPage();
    }
    // 匹配拉脱维亚语
    if (languageCode == 'lv') {
      return const MyHomePage();
    }
    // 匹配其他俄语环境
    if (languageCode == 'ru') {
      return const MyHomeRUPage();
    }
    // 默认返回英语页面
    return const MyHomeENPage(); // 替换为你的英语页面类名
  }
}

// 保留你的MyAppState类
class MyAppState extends ChangeNotifier {
  // 你的现有状态逻辑
}

3. 测试验证

你可以通过以下方式测试:

  • 在设备设置中切换系统语言为俄语、国家为拉脱维亚,确认启动MyHomeRUPage
  • 切换系统语言为拉脱维亚语,确认启动MyHomePage
  • 切换系统语言为俄语、国家为俄罗斯,确认启动MyHomeRUPage
  • 切换系统语言为英语,确认启动英语页面

内容的提问来源于stack exchange,提问作者Hz4Ever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:23:20