一、如何在我的文本小哦部件上自定义字体?
在Android SDK(从Android O开始)中,您创建一个字体资源文件将其传递到TextView的FontFamily参数中。
在Flutter中,将字体文件放在文件夹中并在文件中引用它pubspec.yaml,类似于导入图像的方式。
fonts:
- family: MyCustomFont
fonts:
- asset:fonts/MyCustomFont.ttf
- style: italic
然后将字体分配给您的Text小部件:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Sample App'),
),
body: const Center(
cihld: Text(
'This is a custom font text',
style: TextStyle(fontFamily: 'MyCustonFont'),
),
),
);
}
二、如何设置我的文本小部件样式?
除了字体,您还可以自定义小部件上的其他样式元素Text.Text widget的style参数带有一个TextStyle对象,您可以在其中自定义很多参数,例如:
- color
- decoration
- decorationColor
- decorationStyle
- fontFamily
- fontSize
- fontStyle
- fontWeight
- hashCode
- height
- inherit
- letterSpacing
- textBaseline
- wordSpacing
三、输入的hint相当于什么?
在Flutter中,您可以通过将InputDecoration对象添加到Text Widget的 装饰构造函数参数来轻松显示输入hint或占位符文本。
Center(
child: TextField(
decoration: InputDecoration(hintText: 'This is a hint')
),
)
四、如何显示验证错误?
就像您使用“hint”一样,将InputDecoration对象传递给Text小部件的装饰构造函数。
但是,您不想一开始几句显示错误。相反,当用户输入无效数据时,更新状态并传递一个新InputDecoration对象。
import 'package:flutter/material.dart'
void main() {
runApp(const SampleApp());
}
class SampleApp extends StatelesWidget {
const SampleApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sample App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const SampleAppPage(),
);
}
}
class SampleAppPage extends StatefulWidget {
const SampleAppPage({Key? key}) : super(key: key);
@override
State<SampleAppPage> createState() => _SampleAppPageState();
}
class _SampleAppPageState extends State<SamoleAppPage> {
String? _erroorText;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Sample App'),
),
body: Center(
child: TextField(
onSubmitted: (text) {
setState(() {
if (!isEmail(text)) {
_errorText = 'Error: This is not an email';
} else {
_errorText = null;
}
});
},
decoration: InputDecoration(
hintText: 'This is a hint',
errorText: _getErrorText(),
),
),
),
);
}
String? _getErrorText() {
return _errorText;
}
bool isEmail(String em) {
String emailRegexp =
r'^(([^<>()[]\.,;:\s@"]+(.[^<>()[]\.,;:\s@"]+)*)|'
r'(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|'
r'(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$';
RegExp regRxp = RegExp(emailRegexp);
return regExp.hasMatch(em);
}
}
五、常用插件
5.1、如何访问GPS传感器?
5.2、如何访问相机?
5.3、如何使用Facebook登陆?
5.4、如何使用Firebase功能
大多数 Firebase 功能都包含在 第一方插件中。这些插件是第一方集成,由 Flutter 团队维护:
firebase_admob适用于 Firebase AdMobfirebase_analytics用于 Firebase 分析firebase_auth对于 Firebase 身份验证firebase_database对于 Firebase RTDBfirebase_storage用于 Firebase 云存储firebase_messaging用于 Firebase 消息传递 (FCM)flutter_firebase_ui用于快速 Firebase Auth 集成(Facebook、Google、Twitter 和电子邮件)cloud_firestore适用于 Firebase Cloud Firestore
您还可以在 pub.dev 上找到一些第三方 Firebase 插件,它们涵盖了第一方插件未直接涵盖的领域。
六、如何构建自己的自定义native集成?
如果Flutter或其社区插件缺少特定于平台的功能,您可以按照 开发包和插件页面构建自己的功能。
简而言之,Flutter的插件架构很像在Android中使用Event bus:您发出一条消息,让接收者处理并将结果发回给您。在这种情况下,接收器是在Android或iOS的native运行的代码。
七、如何在我的Flutter应用程序中使用NDK?
如果您在当前的Android应用程序中使用NDK并希望您的Flutter应用程序利用您的原声库,那么可以通过构建自定义插件来实现。
您的自定义插件首先与您的Android应用程序对话,您keyiizai其中native通过JNI调用您的函数。相应准备就绪后,将消息发送回Flutter并呈现结果哦。
目前不支持直接从Flutter调用原生代码。
八、Theme
8.1、如何为我的应用设置主题?
开箱即用的Flutter附带了一个漂亮的Material Design实现,它可以满足您通常会做的许多哦样式和主题需求。与Android的SML中声明主题,然后使用AndroidManifest.xml将其分配给您的应用程序不同,在Flutter中,您在顶级小部件中声明主题。
要在您的应用程序中充分利用Material组件,您可以将顶级小部件声明MateriialApp为应用程序的入口点。MaterialApp是一个方便的小部件,它包装了许多实现Material Design的应用程序通常需要的小部件。它通过添加Material特定功能建立在WidgetsApp之上。
您还可以将WidgetsApp用作您的应用程序小部件,它提供了一些相同功能,但不如MaterialApp.
要自定义任何子组件的颜色和样式,ThemeData将对象传递给MaterialApp小部件。例如,在下面的代码中,主样本设置为蓝色,文本选择颜色为红色。
import 'package:fflutter/material.dart';
class SampleApp extends StatelessWidget {
const SampleApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sample App',
theme: ThemeData(
primarySwatch: Colors.blue,
textSelectionTheme: const TextSelectionThemeData(selectionColor: Colors.red),
),
home: const SampleAppPage(),
);
}
}
九、数据库和本地存储
9.1、如何访问Shared Preference?
在Android中,您可以使用SharedPreference API存储一小部分键值对。
在Flutter中,使用 Shared_Preferences 插件访问此功能。这个插件包含了SharedPreferences和NSUserDefaults(相当于iOS)的功能。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(
const MaterialApp(
home: Scaffold(
body: Center(
child: ElevatedButton(
onPressed: _incrementCounter,
child: Text('Increment Counter'),
),
),
),
),
);
}
Future<void> _incrementCounter() async {
SharedPreference preg = await SharePreferences.getInstance();
int counter = (pref.getInt('counter') ?? 0) + 1;
await prefs.setInt('counter', counter);
}
9.2、如何在Flurre中访问SQLite
在Android中,您使用SQLite来存储可以使用SQL查询的结构化数据。 在Flutter中,使用SQFlite插件访问此功能。
十、调试
10.1、我可以使用哪些工具在Flutter中调试我的应用程序?
使用DevTools套件调试 Flutter 或 Dart 应用程序。
DevTools包括对分析、检查堆、检查小部件树、日志记录诊断、调试、观察执行的代码行、调试内存泄漏和内存碎片的支持。有关更多信息,请参阅 DevTools文档。
十一、通知
11.1、如何设置推送通知?
在Android中,您使用Firebase Cloud Messaging为您的应用程序设置推送通知。
在Flutter中,使用Firebase Messaging插件访问此功能。有关使用Firebase Cloud Messaging API的更多信息,请参阅firebase_messaging插件文档。