我正在我的Flutter应用程序中实现身份验证流程.
登录尝试后,将使用以下代码打开 CheckAuth (检查用户是否已登录,然后打开主屏幕或相应地注册屏幕):
void _signIn() async {
await _auth
.signInWithEmailAndPassword(
email: _userEmail.trim(), password: _userPassword.trim())
.then((task) {
// go to home screen
if (task.getIdToken() != null) {
setState(() {
Navigator.pushReplacement(
context,
new MaterialPageRoute(
builder: (BuildContext context) => new CheckAuth()));
});
} else {
print("Authentication failed");
}
});
}
Run Code Online (Sandbox Code Playgroud)
问题:我可以成功登录该应用,但如果我在登录后点击后退按钮,则会返回到登录屏幕(我希望它从应用中退出).
问题:如何在Flutter中从一个屏幕移动到另一个屏幕而无法返回?
我是否需要以某种方式删除导航器历史记录?或者根本不使用导航仪?我尝试了Navigator.replace方法,但似乎没有用.
我想在我的Flutter应用程序中使用以下代码显示带有ListView.builder的SimpleDialog:
showDialog(
context: context,
builder: (BuildContext context) {
return new SimpleDialog(
children: <Widget>[
new FittedBox(
child: new ListView(
children: <Widget>[
new Text("one"),
new Text("two"),
],
),
)
],
);
},
);
Run Code Online (Sandbox Code Playgroud)
这给出了这个错误(抱歉,我无法将日志包装为代码,因为Stackoverflow抱怨代码太多了):
══╡通过渲染图书馆的例外情况╞═══════════════════════════════════════════════════════════════════════════════════════════════ =/flutter(4481):在performLayout()期间抛出以下断言:I/flutter(4481):RenderViewport不支持返回内部维度.I/flutter(4481):计算内在维度需要实例化视口的每个子节点,我/ flutter(4481):击败视口的懒惰点.I/flutter(4481):如果你只是想在主轴方向上收缩包装视口,可以考虑一个I/flutter(4481):RenderShrinkWrappingViewport渲染对象(ShrinkWrappingViewport小部件),它实现了I/flutter(4481) :没有实现内在维度API的效果.I/flutter(4481):...我/ flutter(4481):抛出了另一个异常:RenderBox没有布局:RenderPhysicalShape#83d92 relayoutBoundary = up2 NEEDS-PAINT I/flutter(4481):抛出另一个异常:' package:flutter/src/rendering/shifted_box.dart':断言失败:第310行pos 12:'child.hasSize':不是真的.I/flutter(4481):抛出了另一个异常:RenderBox没有布局:RenderPhysicalShape#83d92 relayoutBoundary = up2
我尝试使用具有特定高度和宽度的Container,它可以工作,但我希望ListView能够适应Dialog.
如何在SimpleDialog中包含ListView?
我已经在我的 Flutter 应用程序中实现了 Cloud Firestore 并遇到了这个问题:如果应用程序的第一次加载(安装后)没有网络连接,则不会显示任何数据。 我的问题是:即使没有互联网连接,如何才能在第一次加载(安装后)时显示来自 Firestore 的数据?我获取数据的代码是这样的:
class QuestionsListState extends State<QuestionsList> {
@override
Widget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
stream: _questionsCollectionReference
.where("category", isEqualTo: _chosenCategory).orderBy("order").snapshots,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return const Text('');
final int messageCount = snapshot.data.documents.length;
return new ListView.builder(
itemCount: messageCount,
itemBuilder: (_, int index) {
final DocumentSnapshot document = snapshot.data.documents[index];
return new ListTile(
title: new FlatButton(
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) => new AddAnswerDialog(),
fullscreenDialog: true,
)); …Run Code Online (Sandbox Code Playgroud) 目前,我需要设置检查用户是否登录,然后相应地采取行动(打开主页或登录屏幕).我只使用电子邮件身份验证.
如何在flutter中检查用户firebase身份验证状态?
这里已经提出了这个问题,但我没有以这种方式检查身份验证状态:
final auth = FirebaseAuth.instance;
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'MyApp',
home: (_checkLogin() == true ? new PostAuthScaffold() : new PreAuthScaffold())
);
}
}
bool _checkLogin() {
return !(auth.currentUser == null);
}
Run Code Online (Sandbox Code Playgroud) 我想通过将用户ID作为字段分配给文档来在Firestore中保存与用户相关的数据.
如何从Firebase Auth获取用户ID?
或者有更好的方法在Firestore中存储用户数据吗?
我无法以这种方式从Firebase Auth获取用户ID(Text(_userId)返回_userId == null错误):
String _userId;
...
@override
Widget build(BuildContext context) {
FirebaseAuth.instance.currentUser().then((user) {
_userId = user.uid;
});
return new Scaffold(
appBar: new AppBar(
title: new Text("App bar"),
),
body: new Text(_userId),
);
}
Run Code Online (Sandbox Code Playgroud) dart firebase firebase-authentication flutter google-cloud-firestore
我将 Firestore 用于我的 Flutter 应用程序。
当我在模拟器上禁用互联网连接时,控制台上会出现以下错误:
V/NativeCrypto( 6278): Read error: ssl=0xa4621708: I/O error during system call, Software caused connection abort
W/zzaeo ( 6278): [{0}] Failed to resolve name. status={1}
V/NativeCrypto( 6278): Write error: ssl=0xa4621708: I/O error during system call, Broken pipe
V/NativeCrypto( 6278): Write error: ssl=0xa4621708: I/O error during system call, Broken pipe
W/zzajf ( 6278): Failed closing connection
W/zzajf ( 6278): javax.net.ssl.SSLException: Write error: ssl=0xa4621708: I/O error during system call, Broken pipe
W/zzajf ( 6278): at com.google.android.gms.org.conscrypt.NativeCrypto.SSL_write(Native Method)
W/zzajf …Run Code Online (Sandbox Code Playgroud) 我正在使用文本字段小部件进行文本编辑:
new TextField(
controller: _controller,
maxLines: null,
),
Run Code Online (Sandbox Code Playgroud)
问题:当我开始一个新行时,直到我开始输入文本时,光标才会下降。
我的问题:如何使光标在创建后立即下移到新行?
如何在首次启动时显示应用程序指南/介绍?
我应该使用什么小部件以及如何检测首次启动?
这就是我想要实现的目标:
这就是我现在所拥有的:
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
body: ListView(
children: [
Image.asset(
'assets/images/videosbg.png',
fit: BoxFit.cover,
height: 300,
width: double.infinity,
),
...
],
),
);
}
Run Code Online (Sandbox Code Playgroud)
我不想删除状态栏或更改其颜色,因此 SystemChrome 不适合我。
如何将脚手架主体放置在状态栏后面而不是下面?我是否需要以某种方式删除状态栏的上部填充?
我目前正在努力实施电子邮件注册并登录我的应用程序.出于商业原因,我无法使用Google登录或其他替代方法.
如何在Flutter中使用电子邮件实施Firebase身份验证?有没有办法使用Firebase Auth插件?
如何根据可用空间裁剪文本?
有一个类似的问题在这里,但没有工作的答案。
目前,此代码
return new GridTile(
child: new Card(
elevation: 3.0,
child: new Container(
padding: new EdgeInsets.all(10.0),
child: new Column(
children: <Widget>[
Text(
document['title'],
style: new TextStyle(fontWeight: FontWeight.bold),
),
Text(
document['text'],
),
],
),
),
)
);
Run Code Online (Sandbox Code Playgroud)
给出了这个结果:
我尝试使用overflow: TextOverflow.ellipsis,但文本变成 1 行长。指定文本行长度是一个坏主意,因为在不同的屏幕尺寸上结果会有所不同。
如何使文本裁剪、适合或包裹到可用空间中?
我想在我的 Flutter 应用程序中实现一个搜索功能。文本数据存储在 Firestore 中。
现在我正在考虑一个不切实际的解决方案:下载整个集合(这是一个纯文本),然后以某种方式使用 Dart 代码搜索它。
有没有更好的方法在 Flutter/Firestore 中进行搜索?我可以使用 Cloud Functions 来做到这一点吗?如果没有更好的方法,如何在 Flutter 中使用 Dart 搜索内容?