flutter - 如何要求子小部件父级仅是 Flutter 中的特定小部件?
问题描述
是否可以强制某些小部件仅是某个特定小部件的子级,例如,我有 ChildWidget() 并且我希望此小部件仅是 Stack 的子级,否则如果此小部件的直接父级不是 Stack 则抛出编译时错误,例如未初始化/传递小部件的必需参数时?
期望的最终结果示例:
import 'package:flutter/material.dart';
class WidgetName extends StatelessWidget {
const WidgetName({ Key? key }) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
height: 50,
width: 50,
child: Placeholder()
),
ChildWidget(), //Everything is okay, child's direct parent is Stack
Container(
height: 50,
width: 50,
child: ChildWidget(), // Compilation-time error (red underline), because direct ansector is Container, instead of Stack.
),
],
);
}
}
提前致谢!
解决方案
这是所请求功能的实现。但是,如果有人知道如何重现编译时错误,则仅实现运行时错误,请分享您的解决方案,将不胜感激。
虽然visitAncestorElements
方法相对昂贵 O(N),但我们返回 false 作为返回值,这意味着我们只检查第一个元素,时间复杂度降低到 O(1)。
context.visitAncestorElements((element) {
assert(element.widget.runtimeType.toString().toLowerCase() != directAnsector.toLowerCase(),"Ansector Error");
return false;
});
推荐阅读
- hadoop - 蜂巢中的 SSL 警告
- mongodb - MongoDB 3.6 中的日期范围查询
- javascript - 我想从 HTML 表中创建一个 JSON 对象。我希望最终产品用于统计来自多个用户的输入
- python - tfidf w2v 给出 NaN 值
- node.js - 针对特定操作系统执行 node.js API
- apache-spark - 在 Spark 2.3 中给出 Maven 依赖错误
- user-interface - Flutter如何在滚动到某个点后仍然存在的列表视图中添加按钮..
- sql-server - 是否可以在 Azure VM 上安装 SSMS 并连接到 Azure SQL 数据库
- android - 用于 Android 的 Cordova 中的 XMLHttpRequest
- java - Android 创建自定义操作栏 3 项