Flutter中如何让showDatePicker和showTimePicker显示中文

在Flutter中使用showDatePicker和showTimePicker时,弹出的日期和时间选择器默认显示英文。请问如何让这两个选择器显示中文界面?需要添加哪些依赖或进行哪些配置才能实现本地化?

2 回复

MaterialApp中设置localizationsDelegatessupportedLocales

MaterialApp(
  localizationsDelegates: [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
  ],
  supportedLocales: [
    const Locale('zh', 'CN'),
  ],
)

并添加依赖:flutter_localizations,在pubspec.yaml中引入。

更多关于Flutter中如何让showDatePicker和showTimePicker显示中文的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中让日期和时间选择器显示中文,需要进行以下配置:

1. 添加依赖

dependencies:
  flutter_localizations:
    sdk: flutter
  intl: any

2. 配置MaterialApp

在main.dart中配置MaterialApp的本地化设置:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: [
        const Locale('zh', 'CN'), // 中文简体
      ],
      home: MyHomePage(),
    );
  }
}

3. 使用示例

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('日期时间选择器')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => _showDatePicker(context),
              child: Text('选择日期'),
            ),
            ElevatedButton(
              onPressed: () => _showTimePicker(context),
              child: Text('选择时间'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _showDatePicker(BuildContext context) async {
    final DateTime? picked = await showDatePicker(
      context: context,
      initialDate: DateTime.now(),
      firstDate: DateTime(2000),
      lastDate: DateTime(2100),
      locale: Locale('zh', 'CN'), // 设置中文
    );
  }

  Future<void> _showTimePicker(BuildContext context) async {
    final TimeOfDay? picked = await showTimePicker(
      context: context,
      initialTime: TimeOfDay.now(),
      builder: (BuildContext context, Widget? child) {
        return Localizations.override(
          context: context,
          locale: Locale('zh', 'CN'),
          child: child,
        );
      },
    );
  }
}

注意事项

  • 确保设备语言设置为中文,或明确指定locale参数
  • 对于时间选择器,需要使用Localizations.override来强制使用中文
  • 如果仍然显示英文,请检查依赖是否已正确安装并重新运行应用

这样配置后,日期和时间选择器就会显示中文界面了。

回到顶部