我想使用Flutter创建基本项目,所以这些天来,我在理解Flutter的工作原理和流程方面遇到了很多问题... 代码中有问题,请给出答案,并支持我来了解有关flutter的更多信息.... flutter很酷,我很喜欢。
提前谢谢
void _showAlertDialog() {
var alertDialog = AlertDialog(
title: Text("Hey,This is loser"),
);
showDialog(context: context,
builder: (BuildContext context1){
return alertDialog;
});
}
答案 0 :(得分:0)
您可能会发现showDialog
函数here的实现。
让我们从您没有在代码中创建BuildContext
实例的事实开始,您永远不会调用BuildContext()
构造函数。
实际上,您不需要创建一个。
如果您的问题是为什么builder
类型的WidgetBuilder
参数需要从概念上输入BuildContext
的实例,那么答案是此构建器可能会构建一些东西比仅带有“ hello”消息的警报要复杂得多,并且要构建复杂的对话框,您可能需要用于导航,查询,主题化等的构建上下文。
还要注意,您不需要传递此BuildContext
参数,只需将构建器“声明”或“描述”为一个函数,框架本身将创建并提供`BuildContex'的实际实例。 '。
一个简单的示例,其中使用builder
参数在警报的context
中使用主题化和导航:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Test alert theming"),
),
body: Center(
child: OutlineButton(
child: Text("Push Me"),
onPressed: () => showDialog(
context: context,
builder: (BuildContext context) {
return Dialog(
child: Column(
children: <Widget>[
Text(
"Themed alert content",
style: Theme.of(context).textTheme.title,
),
OutlineButton(
child: Text("Close"),
onPressed: () => Navigator.of(context).pop(),
),
],
));
},
barrierDismissible: true,
),
),
),
);
}
}
如您所见,我使用了title
文本主题,您可以将其更改为其他内容,例如subtitle
或body2
。要提取主题,您需要在Theme.of(context)
中有一个上下文。
为进行导航,还需要Navigator.of(context)
中的上下文。