Flutter Widget - MaterialApp

Flutter Widgets

Flutter 2.0.0 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 60bd88df91 (10 weeks ago) • 2021-03-03 09:13:17 -0800
Engine • revision 40441def69
Tools • Dart 2.12.0

1.材料设计根控件 MaterialApp

一、概览图

在这里插入图片描述

二、MaterialApp 是什么?

MaterialApp 是我们app开发中常用的符合MaterialApp Design设计理念的入口Widget,是一个Material风格的根控件。

三、详细

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_widget_study/page/home_page.dart';
import 'package:flutter_widget_study/page/not_find_page.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // 应用程序描述
      title: 'MaterialApp Widget study',

      // 根据区域显示不同的应用描述
      onGenerateTitle: (context) {
        var local = Localizations.localeOf(context);
        if (local.languageCode == 'zh') {
          return '材料(Android)设计风格根控件学习';
        }
        return 'MaterialApp Widget study';
      },

      // 主题
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      darkTheme: ThemeData(
        primarySwatch: Colors.green
      ),

      // 指定主题
      themeMode: ThemeMode.dark,

      //App 默认显示的页面,改参数不能为空
      home: HomePage(),

      //初始路由
      initialRoute: '/',

      // 设置找不到路由时的错误页面
      onUnknownRoute: (RouteSettings routeSettings) =>
          MaterialPageRoute(builder: (context) => NotFindPage()),

      // 国际化配置
      localizationsDelegates: [
        //为Material Components库提供了本地化的字符串和其他值
        GlobalMaterialLocalizations.delegate,
        //定义widget默认的文本方向,从左到右或从右到左
        GlobalWidgetsLocalizations.delegate,
        //为Cupertino(ios风格)库提供了本地化的字符串和其他值
        GlobalCupertinoLocalizations.delegate
      ],

      //指定当前App支持的语言
      supportedLocales: [
        const Locale('zh', 'CH'),
        const Locale('en', 'US'),
      ],

      //通过用户手机支持的语言和当前App支持的语言返回一个语言选项
      localeListResolutionCallback:
          (List<Locale> locales, Iterable<Locale> supportedLocales) {
        if (locales.contains('zh')) {
          return Locale('zh');
        }
        return Locale('en');
      },

      // 打开网格调试
      // debugShowMaterialGrid: true,

      // 打开性能检测
      // showPerformanceOverlay: true,

      // 右上角DEBUG
      // debugShowCheckedModeBanner: true,
    );
  }
}

四、其他

路由、国际化采用其他方式实现,见后续文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flutter MaterialAPP的汉化可以通过修改应用程序的主题来实现。以下是一种常见的汉化方法: 1. 在pubspec.yaml文件中添加flutter_localizations依赖: ``` dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter ``` 2. 在main.dart文件中导入相关库: ```dart import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; ``` 3. 在MaterialApp中设置本地化支持: ```dart class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( localizationsDelegates: [ AppLocalizations.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: [ const Locale('en', ''), // 英文 const Locale('zh', ''), // 中文 ], title: 'My App', home: MyHomePage(), ); } } ``` 4. 创建一个AppLocalizations类,用于提供本地化字符串: ```dart class AppLocalizations { static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate(); static AppLocalizations of(BuildContext context) { return Localizations.of<AppLocalizations>(context, AppLocalizations); } String get hello { return Intl.message( 'Hello', name: 'hello', desc: 'Greeting', ); } } class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> { const _AppLocalizationsDelegate(); @override bool isSupported(Locale locale) { return ['en', 'zh'].contains(locale.languageCode); } @override Future<AppLocalizations> load(Locale locale) { return SynchronousFuture<AppLocalizations>(AppLocalizations()); } @override bool shouldReload(_AppLocalizationsDelegate old) => false; } ``` 5. 在需要使用本地化字符串的地方,使用AppLocalizations.of(context).hello来获取对应的字符串: ```dart Text(AppLocalizations.of(context).hello), ``` 这样就可以实现Flutter MaterialAPP的汉化了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dingwen_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值