我正在编写一个Flutter应用程序,我想使用/实现iOS上常见的"磨砂玻璃"效果.我该怎么做呢?
正如标题所说,在 Flutter 中使用 Stacks 时,如果“最后”渲染的孩子与所有其他孩子重叠,则只能与该孩子进行交互。在我的应用程序中,我有一个 ListWheelScrollView,它包含在一个堆栈中,然后使用位于 ScrollView 顶部的渐变进行“样式化”。
当给出一个例子时,这更有意义。
在几乎这种确切情况下存在一个现有问题:Flutter-GestureDetector not working with containers in stack
但是,它假定您正在使用手势检测器。
Stack(children: <Widget>[
Container(
height: 250,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
width: _style.fontSize * 1.5,
child: ListWheelScrollView.useDelegate(
controller: fixedExtentScrollController,
physics: FixedExtentScrollPhysics(),
itemExtent: _style.fontSize * 1.5,
childDelegate: ListWheelChildLoopingListDelegate(
children: hours
.map((hour) => hour < 10
? Text(
"0$hour",
style: _style,
)
: Text(
"$hour",
style: _style,
))
.toList())),
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
":",
style: _style,
),
SizedBox(
height: 25, …
Run Code Online (Sandbox Code Playgroud) 假设我有这个小部件:
Card(
child: InkWell(
onTap: () {},
child: Padding(
padding: const EdgeInsets.all(28.0),
child: RaisedButton(
child: Text('Test'),
onPressed: () {},
),
),
),
),
Run Code Online (Sandbox Code Playgroud)
我想禁止(防止示出)连锁反应上Card
/InkWell
只有当RaisedButton
被窃听,但以显示它时,Card
被分接(即,按钮之外)。有什么办法可以达到这个效果吗?
我认为普遍的问题可以是:如何防止在点击内部 InkWell 时对周围 InkWell 产生连锁反应?如果你的源代码看看,你可以看到,RaisedButton
有Material
和InkWell
小部件引起波动。
AbsorbPointer
和IgnorePointer
flutter有什么区别?
文件提及:
AbsorbPointer通过自身终止命中测试来防止其子树接收指针事件。
IgnorePointer,它还阻止其子级接收指针事件,但对于命中测试而言本身是不可见的。
我没有得到两者之间的真实生活差异。
我只是想ExpansionTile
在 Flutter 中使用,从我修改为这样的示例中:
我想隐藏箭头并用于Switch
扩展磁贴,这可能吗?或者我是否需要以编程方式呈现子项的自定义小部件?基本上,我只需要显示/隐藏孩子
这是我的代码:
import 'package:flutter/material.dart';
void main() {
runApp(ExpansionTileSample());
}
class ExpansionTileSample extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('ExpansionTile'),
),
body: ListView.builder(
itemBuilder: (BuildContext context, int index) =>
EntryItem(data[index]),
itemCount: data.length,
),
),
);
}
}
// One entry in the multilevel list displayed by this app.
class Entry {
Entry(this.title,[this.question='',this.children = const <Entry>[]]);
final String title;
final String question;
final List<Entry> children;
} …
Run Code Online (Sandbox Code Playgroud) 我有一个小部件,我想在底部“淡出”,因此我将其放入堆栈中,顶部有一个容器,并使用适当的渐变作为容器的背景。但是,容器似乎正在消耗所有触摸事件,因此我无法与它后面的 Widget 交互,这是不可取的,因为 Widget 仍然大部分可见。有什么办法可以改变这种行为吗?
我在手势检测器内使用 listView 时遇到问题。我试图根据 listView 的拖动方向执行一个函数。它不起作用,事件甚至没有被触发,因为显然拖动事件正在由列表视图处理。
我如何告诉 listView 不要这样做并忽略拖动事件,因为我只是希望我的项目位于彼此之下,实际上没有列表。
我是否只是切换到其他小部件并忘记列表,或者有解决方案吗?
这是我的代码:
return new GestureDetector(
child: Material(
elevation: 12.0,
borderRadius: widget.frontLayerBorderRadius,
child: Stack(
children: <Widget>[
new ListView(
children: <Widget>[
widget.enableAddingInactiveAreaToPanelWhenOpened?isTopPanelVisible?InactiveAreaWidget:new Container():new Container(),
widget.frontLayer,
],
),
_buildInactiveLayer(context,InactiveAreaWidget),
],
),
),
onVerticalDragEnd: (details) {
print(details);
if(details.velocity.pixelsPerSecond.dy>0.0){
showBackLayer();
}
},
);
Run Code Online (Sandbox Code Playgroud) import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: MaterialButton(
height: 100,
color: Colors.grey,
child: Text("DSG"),
onPressed: () {
print("Drawer sent gesture");
},
),
),
drawer: Container(
height: 300,
decoration: BoxDecoration(
color: Colors.yellow,
),
child: Center(
child: MaterialButton(
height: 100,
color: Colors.grey,
child: Text("DKG"),
onPressed: () {
print("Drawer kept gesture");
}, …
Run Code Online (Sandbox Code Playgroud) 我有一个具有两个平台视图的应用程序,其中一个是涂鸦视图,另一个是网络视图,下面是我的代码
\n\nWidget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(\n title: Text('test'),\n ),\n body: BlocProvider<CourseDocBloc>(\n create: (context) => CourseDocBloc(),\n child: Container(\n height: double.infinity,\n child: Stack(\n children: <Widget>[\n Listener(\n child: WebView(\n initialUrl: 'https://google.com',\n javascriptMode: JavascriptMode.unrestricted,\n onPageStarted: (url) {\n print('start load');\n },\n onPageFinished: (url) {\n print('load finished');\n },\n ),\n onPointerDown: (e) => {print('web down')},\n onPointerUp: (e) => {print('web up')},\n ),\n UiKitView(\n viewType: 'GLView',\n hitTestBehavior: PlatformViewHitTestBehavior.transparent, \n onPlatformViewCreated: (_) => created(),\n )\n ],\n ),\n ),\n ),\n );\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n当我设置UiKitView
hitTestBehavior: PlatformViewHitTestBehavior.transparent …