Listview 标题:文本(“SimpleDialog”), ), 正文:MyLayout()), ); } } 类MyLayout扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回填充( 填充:常数边集全部(8.0), 孩子:升起按钮( 子项:文本(“显示警报”), 已按下:(){ showAlertDialog(上下文); }, ), ); } } //用上述示例替换此函数 showAlertDialog(构建上下文){ //设置列表选项 Widget optionOne=SimpleDialogOption( 子项:常量文本(“马”), 已按下:(){ 印刷品(“马”); Navigator.of(context.pop(); }, ); Widget optionTwo=simpledialogooption( 子项:const Text('cow'), 已按下:(){ 印刷品(“奶牛”); Navigator.of(context.pop(); }, ); 小部件选项树=SimpleDialog选项( 子项:常量文本('camel'), 已按下:(){ 印刷品(“骆驼”); Navigator.of(context.pop(); }, ); 小部件选项四=SimpleDialogOption( 子项:const Text('sheep'), 已按下:(){ 印刷品(“羊”); Navigator.of(context.pop(); }, ); Widget optionView=SimpleDialogOption( 子项:const Text('goat'), 已按下:(){ 印刷品(“山羊”); Navigator.of(context.pop(); }, ); //设置SimpleDialog SimpleDialog=SimpleDialog( 标题:常量文本(“选择动物”), 儿童:[ optionOne, 选项二, 选择树, 选择四, optionFive, ], ); //显示对话框 显示对话框( 上下文:上下文, 生成器:(BuildContext上下文){ 返回对话框; }, ); }
将ListView包装在容器中并给它一个宽度:double.maxFinite,可以解决iOS/Android在对话框中使用ListView时遇到的问题:Listview 标题:文本(“SimpleDialog”), ), 正文:MyLayout()), ); } } 类MyLayout扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回填充( 填充:常数边集全部(8.0), 孩子:升起按钮( 子项:文本(“显示警报”), 已按下:(){ showAlertDialog(上下文); }, ), ); } } //用上述示例替换此函数 showAlertDialog(构建上下文){ //设置列表选项 Widget optionOne=SimpleDialogOption( 子项:常量文本(“马”), 已按下:(){ 印刷品(“马”); Navigator.of(context.pop(); }, ); Widget optionTwo=simpledialogooption( 子项:const Text('cow'), 已按下:(){ 印刷品(“奶牛”); Navigator.of(context.pop(); }, ); 小部件选项树=SimpleDialog选项( 子项:常量文本('camel'), 已按下:(){ 印刷品(“骆驼”); Navigator.of(context.pop(); }, ); 小部件选项四=SimpleDialogOption( 子项:const Text('sheep'), 已按下:(){ 印刷品(“羊”); Navigator.of(context.pop(); }, ); Widget optionView=SimpleDialogOption( 子项:const Text('goat'), 已按下:(){ 印刷品(“山羊”); Navigator.of(context.pop(); }, ); //设置SimpleDialog SimpleDialog=SimpleDialog( 标题:常量文本(“选择动物”), 儿童:[ optionOne, 选项二, 选择树, 选择四, optionFive, ], ); //显示对话框 显示对话框( 上下文:上下文, 生成器:(BuildContext上下文){ 返回对话框; }, ); },listview,flutter,Listview,Flutter,将ListView包装在容器中并给它一个宽度:double.maxFinite,可以解决iOS/Android在对话框中使用ListView时遇到的问题: showDialog( context: context, builder: (BuildContext context) { return AlertDialog( content: Container( width: double.maxFinite,
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Container(
width: double.maxFinite,
child: ListView(
children: <Widget>[]
),
),
);
}
);
showDialog(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
内容:容器(
宽度:double.maxFinite,
子:ListView(
儿童:[]
),
),
);
}
);
对于AlertDialog内的列中的ListView:
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Container(
width: double.maxFinite,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Expanded(
child: ListView(
shrinkWrap: true,
children: <Widget>[]
)
)
]
),
),
);
}
);
showDialog(
上下文:上下文,
生成器:(BuildContext上下文){
返回警报对话框(
内容:容器(
宽度:double.maxFinite,
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
扩大(
子:ListView(
收缩膜:对,
儿童:[]
)
)
]
),
),
);
}
);
showDialog(上下文:parentcontext,
生成器:(上下文){
返回SimpleDialog(
标题:文本(“创建帖子”),
儿童:[
简单幻觉(
onPressed:handleImageTaking,
child:Text('take a pic'),
),
简单幻觉(
按下:手动图像选择,
子项:文本(“选择图片”),
),
简单幻觉(
子项:文本('cancel'),
已按下:(){
Navigator.pop(上下文);
},
)
],
);
});
在ListView中将SingleChildScrollView
与物理:NeverScrollableScrollPhysics()
和收缩包装:true
一起使用
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: widget,
content: SingleChildScrollView( //MUST TO ADDED
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
...//any widgets,
ListView.builder(
shrinkWrap: true, //MUST TO ADDED
physics: NeverScrollableScrollPhysics(), //MUST TO ADDED
itemCount: model.length,
itemBuilder: (BuildContext c, int index) {
return ListTile();
})
],
),
),
);
},
);
只需在
内容中
我们需要使用高度和宽度固定的容器
。
并将列表视图
用作容器
的子级
scrollDialogFunction(){
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('List of Index'),
content: Container(
width: 350.0,
height: 250,// Change as per your requirement
child: ListView.builder(
itemCount: 150,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(index.toString()),
);
},
),
),
actions: [Padding(
padding: const EdgeInsets.all(8.0),
child: Text("ok",style: TextStyle(fontSize: 18),),
)],
);
});
}
将
width:double.maxFinite
添加到容器中
解决了我的问题
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text('Sample Dialog'),
content: Container(
width: double.maxFinite,
child: ListView(
children: <Widget>[
Text('Item 1'),
Text('Item 2'),
],
),
),
);
}
@覆盖
小部件构建(构建上下文){
返回警报对话框(
标题:文本(“示例对话框”),
内容:容器(
宽度:double.maxFinite,
子:ListView(
儿童:[
文本(“第1项”),
正文(“第2项”),
],
),
),
);
}
使用扩展运算符(…)
迭代列表,或者如果列表可以为空,则使用空感知扩展运算符(…?)
列出值=['1'、'2'、'3'];
等待显示对话框(
上下文:上下文,
生成器:(BuildContext上下文){
返回SimpleDialog(
标题:文本(“选择值”),
儿童:[
…values.map((值){
返回SimpleDialogOption(子项:文本(值));
}),
],
);
},
);
输出:
@Jus10否,使用FullscreenDialog代替标题只需要高度或宽度,而不是两者。我需要同时填充高度和宽度?为什么呢@拉比也需要这两个,谢谢你。除此之外,单击该选项时如何关闭对话框?@Emen:您可以使用
Navigator.of(context.pop())关闭对话框代码>@AntonDuzenko你说得对,我写的警报对话框有一个子参数,但它确实是内容。不管怎样,它对你有用吗?对于我来说,工作就像一个charmI在一个应用程序中使用ListView时遇到了这种方法的问题Column@AntonDuzenko我在一个专栏中也尝试过这个方法,我更新了示例并添加了“Container(width:double.maxFinite,wrapper”上面的专栏解决了这个问题。似乎没有这个选项的对话框只适用于新的Android版本,如9.0。@Jose Jet我发现它不再适用于ios应用程序。listview.builder不可滚动。
@override
dispose() { super.dispose();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeRight,
DeviceOrientation.landscapeLeft,
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
}
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
return ConstrainedBox(
constraints: BoxConstraints(maxHeight: height, maxWidth: width),
child: Column(
children: <Widget>[
Expanded(
child: GridView.count(
primary: false,
padding: const EdgeInsets.all(20.0),
crossAxisSpacing: 10.0,
crossAxisCount: 3,
children: _images
)
),
]
),
);
}
showDialog(
context: context,
builder: (BuildContext context) {
return new SimpleDialog(
children: <Widget>[
new Container(
height: 100.0,
width: 100.0,
child: new ListView(
children: <Widget>[
new Text("one"),
new Text("two"),
],
),
)
],
);
},
);
// set up the list options
Widget optionOne = SimpleDialogOption(
child: const Text('horse'),
onPressed: () {},
);
Widget optionTwo = SimpleDialogOption(
child: const Text('cow'),
onPressed: () {},
);
Widget optionThree = SimpleDialogOption(
child: const Text('camel'),
onPressed: () {},
);
Widget optionFour = SimpleDialogOption(
child: const Text('sheep'),
onPressed: () {},
);
Widget optionFive = SimpleDialogOption(
child: const Text('goat'),
onPressed: () {},
);
// set up the SimpleDialog
SimpleDialog dialog = SimpleDialog(
title: const Text('Choose an animal'),
children: <Widget>[
optionOne,
optionTwo,
optionThree,
optionFour,
optionFive,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return dialog;
},
);
Widget optionOne = SimpleDialogOption(
child: const Text('horse'),
onPressed: () {
Navigator.of(context).pop();
_doSomething();
},
);
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SimpleDialog',
home: Scaffold(
appBar: AppBar(
title: Text('SimpleDialog'),
),
body: MyLayout()),
);
}
}
class MyLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: RaisedButton(
child: Text('Show alert'),
onPressed: () {
showAlertDialog(context);
},
),
);
}
}
// replace this function with the examples above
showAlertDialog(BuildContext context) {
// set up the list options
Widget optionOne = SimpleDialogOption(
child: const Text('horse'),
onPressed: () {
print('horse');
Navigator.of(context).pop();
},
);
Widget optionTwo = SimpleDialogOption(
child: const Text('cow'),
onPressed: () {
print('cow');
Navigator.of(context).pop();
},
);
Widget optionThree = SimpleDialogOption(
child: const Text('camel'),
onPressed: () {
print('camel');
Navigator.of(context).pop();
},
);
Widget optionFour = SimpleDialogOption(
child: const Text('sheep'),
onPressed: () {
print('sheep');
Navigator.of(context).pop();
},
);
Widget optionFive = SimpleDialogOption(
child: const Text('goat'),
onPressed: () {
print('goat');
Navigator.of(context).pop();
},
);
// set up the SimpleDialog
SimpleDialog dialog = SimpleDialog(
title: const Text('Choose an animal'),
children: <Widget>[
optionOne,
optionTwo,
optionThree,
optionFour,
optionFive,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return dialog;
},
);
}
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Container(
width: double.maxFinite,
child: ListView(
children: <Widget>[]
),
),
);
}
);
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Container(
width: double.maxFinite,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Expanded(
child: ListView(
shrinkWrap: true,
children: <Widget>[]
)
)
]
),
),
);
}
);
showDialog(context: parentcontext,
builder: (context){
return SimpleDialog(
title: Text('create post'),
children: <Widget>[
SimpleDialogOption(
onPressed: handleImageTaking,
child: Text('take a pic'),
),
SimpleDialogOption(
onPressed: handleImageSelecting,
child: Text('select a pic'),
),
SimpleDialogOption(
child: Text('cancel'),
onPressed: (){
Navigator.pop(context);
},
)
],
);
});
showDialog(
context: context,
builder: (_) {
return AlertDialog(
title: widget,
content: SingleChildScrollView( //MUST TO ADDED
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
...//any widgets,
ListView.builder(
shrinkWrap: true, //MUST TO ADDED
physics: NeverScrollableScrollPhysics(), //MUST TO ADDED
itemCount: model.length,
itemBuilder: (BuildContext c, int index) {
return ListTile();
})
],
),
),
);
},
);
scrollDialogFunction(){
return showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text('List of Index'),
content: Container(
width: 350.0,
height: 250,// Change as per your requirement
child: ListView.builder(
itemCount: 150,
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text(index.toString()),
);
},
),
),
actions: [Padding(
padding: const EdgeInsets.all(8.0),
child: Text("ok",style: TextStyle(fontSize: 18),),
)],
);
});
}
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text('Sample Dialog'),
content: Container(
width: double.maxFinite,
child: ListView(
children: <Widget>[
Text('Item 1'),
Text('Item 2'),
],
),
),
);
}
List<String> values = ['one', 'two', 'three'];
await showDialog(
context: context,
builder: (BuildContext context) {
return SimpleDialog(
title: Text("Select Value"),
children: [
...values.map((value) {
return SimpleDialogOption(child: Text(value));
}),
],
);
},
);