我正在Windows上尝试Flutter开发。我有一个带有InputField的简单测试应用程序。我希望第一个键盘输入为大写字母,但目前看不到一种实现该功能的方法(例如,按下Shift键启动键盘)。有任何想法吗?
代码(稍微简化一下)是:
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
theme: new ThemeData.dark(),
home: new MainScreen()
));
}
class MainScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
leading: new IconButton(
icon: new Icon(Icons.menu),
tooltip: 'Navigation menu',
onPressed: null,
),
title: new Text('Test'),
),
body: new NewTest(),
);
}
}
/// Widget
class NewTest extends StatefulWidget {
@override
_NewTestInputState createState() => new _NewTestInputState();
}
/// State
class _NewTestInputState extends State<NewTest> {
InputValue _currentInput;
void _handleInputChange(InputValue …Run Code Online (Sandbox Code Playgroud) 我正在使用Dart在Flutter中开发一个应用程序,我发现布局非常简单.但是,我遇到了一个问题,我认为这与小部件之间的默认填充有关.
我在一个列中有两个飘动的ButtonRows,它们之间有很大的间隙,我想消除它们.我想这是由填充引起的,并尝试了各种方法,迄今为止没有成功.代码摘录如下:
@override
Widget build(BuildContext context) {
return new Scaffold(
...
body: new Column(
...
children: <Widget>[
...
new Container(
margin: new EdgeInsets.all(0.0),
child: new Padding(
padding: new EdgeInsets.all(0.0),
child: new ButtonBar(
...
children: <Widget>[
new MaterialButton(
...
),
new MaterialButton(
...
),
),
),
),
),
new Container(
margin: new EdgeInsets.all(0.0),
child: new Padding(
padding: new EdgeInsets.all(0.0),
child: new ButtonBar(
...
children: <Widget>[
new MaterialButton(
...
),
new MaterialButton(
...
),
],
),
),
),
],
),
);
}
Run Code Online (Sandbox Code Playgroud) 我想暂停执行 Dart 脚本(在网页中),直到用户按下某个键。以下代码有效,但我想知道是否有更好的方法:
import 'dart:html';
import 'dart:async';
StreamSubscription sub;
Future main() async {
KeyboardEvent k = await getkey();
print(k.keyCode.toString());
}
Future<KeyboardEvent> getkey() async {
Completer<KeyboardEvent> c = new Completer<KeyboardEvent>();
sub = document.onKeyDown.listen((KeyboardEvent e){
sub.cancel();
c.complete(e);
});
return c.future;
}
Run Code Online (Sandbox Code Playgroud)
更新:下面的 Gunter 解决方案是理想的。上面的代码缩短为:
import 'dart:html';
import 'dart:async';
StreamSubscription sub;
Future main() async {
KeyboardEvent k = await getkey();
print(k.keyCode.toString());
}
Future<KeyboardEvent> getkey() async {
return document.onKeyDown.first;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想过滤按键,我想我又回到了以前的风格:
import 'dart:html';
import 'dart:async';
StreamSubscription sub;
Future main() async {
KeyboardEvent k …Run Code Online (Sandbox Code Playgroud) 我正在使用“可放行的物品”列表,并希望在一个方向上滑动即可删除该物品,而在另一个方向上滑动即可启动该物品的编辑。但是,Flutter坚持必须在onDismissed回调中从树中删除Dismissible项。我试过重新插入该项目,但这不起作用。有任何想法吗?下面是创建列表项的代码摘录:
return new Dismissible(
key: new ObjectKey(item),
direction: DismissDirection.horizontal,
onDismissed: (DismissDirection direction) {
setState(() {
item.deleteTsk();
});
if (direction == DismissDirection.endToStart){
//user swiped left to delete item
_scaffoldKey.currentState.showSnackBar(new SnackBar(
content: new Text('You deleted: ${item.title}'),
action: new SnackBarAction(
label: 'UNDO',
onPressed: () { handleUndo(item); }
)
));
}
if (direction == DismissDirection.startToEnd){
//user swiped right to edit so undo the delete required by flutter
Async.scheduleMicrotask((){handleUndo(item);});
Navigator.of(context).pushNamed('/tskedit');
}
},
...
Run Code Online (Sandbox Code Playgroud) 我在Flutter中有一个页面,其中包含几个小部件,包括一个TextField(我们称其为View1)。当用户单击TextField时,我将重建仅显示TextField和键盘的页面(我们将其称为View2)。当用户完成TextField的操作后,我将重新构建页面,再次像以前一样显示所有小部件(尽管将其称为View1,但仍将其称为View3)。除了一件事,这工作正常。我得到一个临时的黄色/黑色指示器(在调试模式下),该指示器指示没有足够的空间来显示View3中的所有小部件。该指示器仅持续了很短的时间,我最终发现它似乎是因为Flutter试图在键盘尚未完成动画移动时显示所有小部件。
要求在回调完成时请求View3的构建是很巧妙的,当键盘完成动画处理后,该回调将执行,但是我看不到这样做的任何方法。也许我缺少什么?
我可以考虑解决此问题的另一种方法是在构建View3之前插入一个延迟,以留出时间让键盘消失,但这似乎有点不客气。还有其他想法吗?
编辑
我添加了一个延迟,如下所示。似乎还是有点hacky。
Timer(Duration(milliseconds: 500),(){setState((){});});
Run Code Online (Sandbox Code Playgroud) 我想动画列表中两个项目之间的间隙.我想过使用AminatedContainer,其高度最初为零,但我不熟悉如何使其工作.我的代码目前是:
new AnimatedContainer(
duration: const Duration(milliseconds: 200),
height: App.itemSelected==id ? 50.0 : 0.0,
curve: Curves.fastOutSlowIn,
),
Run Code Online (Sandbox Code Playgroud)
这确实改变了容器的高度,但没有像我希望的那样以动画方式改变.感谢任何帮助!