我正在尝试为图像获得一些基本的平移和缩放功能。无状态版本可以显示图像(通过 Transform 旋转 180 度)并且 Scale 事件显示在日志中,但仅此而已。
是GestureDetector获取平移/捏/展开事件的正确小部件吗?我应该查看转换、动画,还是应该只修改Image小部件内的字段?
// Wraps an Image widget to provide pan and zoom functionality.
class InteractiveImage extends StatelessWidget {
InteractiveImage(this._image, {Key key}) : super(key: key);
final Image _image;
@override
Widget build(BuildContext context) {
return new Center(
child: new GestureDetector(
onScaleStart: (ScaleStartDetails details) => print(details),
onScaleUpdate: (ScaleUpdateDetails details) => print(details),
onScaleEnd: (ScaleEndDetails details) => print(details),
child: new Transform(
transform: new Matrix4.rotationZ(math.PI),
alignment: FractionalOffset.center,
child: _image,
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在通过HTTP获取JSON数据并将其显示在ListView中.因为它是HTTP,所以它都是异步的.
var index = new ListView.builder(
controller: _scrollController,
itemBuilder: (ctx, i) async {
_log.fine("loading post $i");
var p = await _posts[i];
return p == null ? new PostPreview(p) : null;
},
);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,因为IndexedWidgetBuilder必须是一个同步函数.如何使用Future为IndexedWidgetBuilder构建子级?似乎没有办法等待未来同步完成.
以前,我正在将数据加载到数组中,仅检查 IndexedWidgetBuilder函数以查看返回子窗口小部件之前是否存在列表元素.
var index = new ListView.builder(
controller: _scrollController,
itemBuilder: (ctx, i) {
_log.fine("loading post $i");
return _posts.length > i ? new PostPreview(_posts[i]) : null;
},
);
Run Code Online (Sandbox Code Playgroud)
这有效,但我想将视图与数据完全分开,并根据需要异步请求JSON.
在我有限的经验中,这似乎也可能是一个常见的用例.可以将一个异步版本的IndexWidgetBuilder添加到flutter吗?
我正在尝试创建一个包含可选单选按钮的弹出菜单,以更改视图类型(例如图库、卡片、滑动、网格、列表等)。
我遇到的问题是 PopupMenu 有自己的用于选择值的回调,Radio 和 RadioListTile 也是如此。
这是我的第一次尝试。这实际上有效,只是按钮永远变灰。给 RadioListTiles 一个非空的 noop 函数会导致按钮不再变灰(禁用),但弹出菜单不再起作用。
new PopupMenuButton<String>(
...
itemBuilder: (ctx) => <PopupMenuEntry<String>>[
new PopupMenuItem(
child: new RadioListTile(
title: new Text("Cards"),
value: 'cards',
groupValue: _view,
onChanged: null),
value: 'cards'),
new PopupMenuItem(
child: new RadioListTile(
title: new Text("Swipe"),
value: 'swipe',
groupValue: _view,
onChanged: null),
value: 'swipe'),
],
onSelected: (String viewType) {
_view = viewType;
}));
Run Code Online (Sandbox Code Playgroud)
第二次尝试是完全忽略 PopupMenu 并只使用 RadioListTile onChanged。这些按钮没有变灰/禁用,但也不起作用。
new PopupMenuButton<String>(
...
itemBuilder: (ctx) => <PopupMenuEntry<Null>>[ …Run Code Online (Sandbox Code Playgroud) 我的用例是在出现错误时显示小吃店,但由于未调用load:flutter ,所以无法捕获SocketException 。
更新(示例堆栈跟踪):
I/flutter (11702): ??? EXCEPTION CAUGHT BY SERVICES ???????????????????????????????????????????????????????????????????
I/flutter (11702): The following SocketException was thrown resolving a single-frame image stream:
I/flutter (11702): Connection failed (OS Error: Network is unreachable, errno = 101), address = (( snip )), port
I/flutter (11702): = 443
I/flutter (11702): When the exception was thrown, this was the stack:
I/flutter (11702): #0 IOClient.send (package:http/src/io_client.dart:30:23)
I/flutter (11702): <asynchronous suspension>
I/flutter (11702): #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:171:38)
I/flutter (11702): <asynchronous suspension>
I/flutter (11702): #2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的zoomable_images 插件中实现双击缩放,但GestureTapCallback不提供点击位置信息。
理想情况下,偏移量将由回调返回。是否有其他 API 用于此?
在 Android 上,我习惯了TextView 的 textIsSelectable 属性,但在 Text 文档中没有看到。
目前我正在使用 TextField(可编辑)并且没有保存对显示文本的任何更改。我的主要需求是允许复制粘贴。