可能只有我一个人,但 Flutter 中的异步编程似乎绝对是一场噩梦。javascript/typescript 中非常简单的东西似乎变得不必要地困难。例如,我正在尝试创建一个简单的函数来检查用户是否已通过身份验证:
Future<bool> isLoggedIn() async {
var user = await FirebaseAuth.instance.currentUser();
return user == null ? false : true;
}
Run Code Online (Sandbox Code Playgroud)
然后在这样的场景中使用这个函数:
Widget _buildChild() async {
var auth = await user.isLoggedIn();
if (auth) {
return new Navigation();
} else {
return new LoginUI();
}
}
Run Code Online (Sandbox Code Playgroud)
但是第二个函数也需要返回一个未来?
标记为“async”的函数必须具有可分配给“Future”的返回类型。
使用 then() 而不是 await 也不起作用。之前在同步上下文中使用异步编程时,我曾多次遇到过这个问题。也许只是它的外观和感觉与 Promises 非常相似,我完全错过了文档中的功能。
我正在使用 Dio 来处理 API 功能。
这是我的代码:
Future<List<ItemModel>> getItems() async {
try {
Response response = await dio.get("$_apiUrl$_itemEndPoint",
options: Options(headers: {
"Accept": 'application/json',
}));
List<ItemModel> _items = List<ItemModel>();
response.data['data']?.forEach((c) {
_items.add(ItemModel.fromMap(c));
});
return _items;
} catch (e) {
throw (e);
}
}
Run Code Online (Sandbox Code Playgroud)
如何根据发送和接收超时捕获错误?
我最终使用了静态函数,但我需要进行导航,它给了我一个错误,没有找到上下文的吸气剂,所以我寻找解决方案并找到了 GET 包,但当我尝试使用它时,它给了我另一个错误:
E/flutter ( 6078): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)]
Unhandled Exception: NoSuchMethodError: The method 'push' was called on null.
Run Code Online (Sandbox Code Playgroud)
我的代码:
E/flutter ( 6078): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)]
Unhandled Exception: NoSuchMethodError: The method 'push' was called on null.
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 flutter 上放置一个可拖动的滚动条Form,以便网络用户可以单击并拖动到屏幕底部。flutterScrollbar类适用于触摸屏设备,但不适用于鼠标!
我试过使用draggable_scrollbar,但它只接受ListView作为孩子。
这是我当前的代码结构:
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My form'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Scrollbar(
child: SingleChildScrollView(
child: Form(...),
),
),
),
);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Flutter 中的食品订购应用程序和 Express.js 中的 API 使用 MySql 作为数据库。我能够连接到数据库并接收 JSON 数据和 console.log() 它们,但我不知道如何将它们发送到应用程序。任何帮助将不胜感激。
这是代码。
const express = require('express');
const router = express.Router();
const mysql = require('mysql');
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '',
database: 'ala_ainy_db',
connectionLimit: 10,
});
router.get('/', (req, res, next) => {
pool.getConnection(function (err, conn) {
if (err) return;
conn.query('SELECT * FROM restaurants', function (err, rows) {
if (err) {
conn.release();
console.log('failed');
}
rows.forEach((row) => {
console.log(`ID: ${row.id}, Name: ${row.name}`);
});
conn.release();
})
});
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试以同步方式一个接一个地运行多个 gulp 任务
但我收到以下错误
类型错误:gulp.series 不是函数
代码
gulp.task('default',function () {
gulp.watch('resources/assets/js/components/*.js', function() {
gulp.series('scripts','compress');
});
})
Run Code Online (Sandbox Code Playgroud) 我正在将 gulp 从 3.9.0 版迁移到 gulp 4.0.0 版。
我在 gulp.src('') 上的 gulpfile.js 中遇到错误,错误消息是“错误:无效的 glob 参数:”
我在 gulpfile.js 中的 gulp.task() 看起来像这样 -
gulp.task('build-version', function(done) {
var dir = path.build + '/js',
filename = "build.js";
gulp.src('')
.pipe(ngConfig('ppm', {
createModule: false,
constants: {
newUIBuildVersion: buildVersion
}
}))
.pipe(rename(filename))
.pipe(gulp.dest(dir));
// lint build.js file
return gulp.src(dir + '/' + filename)
.pipe(jshint(config.jshint))
.pipe(jshint.reporter(stylish))
.pipe(jshint.reporter('fail'))
.on('error', function(err) {
log(err);
});});
Run Code Online (Sandbox Code Playgroud)
和 gulp 版本:4.0.0,节点版本:8.11.4
我的错误信息:在此处输入图片描述
请在终端中找到错误消息的图像。
有谁知道我该如何解决这个问题。
我想制作如下所示的良好阴影效果,
在互联网上找到的所有示例甚至都无法接近上述设计。
经过长时间的反复试验,我可以进行以下操作。还是做不出内心的阴影。如果有人能指导我如何破译这些设计,那就太好了。
用于制作上述按钮的代码,
Widget buildBackButton() {
double size = 47;
return Stack(
children: <Widget>[
Container(
width: size,
height: size,
decoration: BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: Colors.black26,
offset: Offset(20, 20),
blurRadius: 40,
),
BoxShadow(
color: Colors.white,
offset: Offset(-20, -20),
blurRadius: 25,
)
]),
child: Material(
color: Color(0xffe0eafb),
borderRadius: BorderRadius.circular(size),
elevation: 10,
child: Padding(
padding: const EdgeInsets.all(3.0),
child: ClipOval(
clipper: MClipper(),
),
),
),
),
Container(
width: 45.0,
height: 45.0,
padding: EdgeInsets.only(left: 2, top: 2),
child: new …Run Code Online (Sandbox Code Playgroud) 当我从 LoginScreen() 导航到 HomeScreen() 时,键盘会突然无缘无故地弹出,然后在导航进行时立即关闭。
调用屏幕pushReplacement的函数:
() async {
if (_formKey.currentState.validate()) {
final FirebaseAuth _auth = FirebaseAuth.instance;
try {
await _auth.signInWithEmailAndPassword(
email: email, password: password);
} catch (e) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Email or Password are incorrect'),
));
}
_user = await _auth.currentUser();
if (_user == null) {}
if (_user.isEmailVerified == true) {
Navigator.of(context)
.pushReplacementNamed(HomeScreen.routeName);
} else
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Validate your email pls!'),
));
}
},
Run Code Online (Sandbox Code Playgroud)
和主屏幕():
import 'package:final_login/screens/loginscreen.dart';
import 'package:final_login/services/auth.dart';
import 'package:flutter/material.dart';
class HomeScreen extends StatefulWidget {
static const routeName …Run Code Online (Sandbox Code Playgroud) 默认情况下,ExpansionTile的标头中有16个水平填充,因为它是ListTile并且具有
/// If null, `EdgeInsets.symmetric(horizontal: 16.0)` is used.
final EdgeInsetsGeometry contentPadding;
Run Code Online (Sandbox Code Playgroud)
如何删除它们?
flutter ×7
dart ×6
javascript ×3
gulp ×2
asynchronous ×1
dio ×1
express ×1
firebase ×1
gulp-watch ×1
navigation ×1
node.js ×1