【发布时间】:2019-08-12 14:20:41
【问题描述】:
我在这里遇到了一个小问题:
当我将非全屏小部件推入导航器时。 之前的小部件根本不被绘制,导致背景为黑色,尽管意图是有一个简单的对话框。
如何防止这种情况发生?或者有什么简单的解决方法?
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'The Dialog Issue',
initialRoute: '/',
routes:{
'/': (context)=>MyHomePage(),
'/dialog': (context)=>Dialog(child: Text('y u do dis :( and how do i change it?'))
}
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
//This pushes the dialog onto the navigator.
void _navigateToDialog(BuildContext context) {
setState(() {
Navigator.pushNamed(context,'/dialog');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('The Dialog issue'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Why does this happen?',
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: ()=>_navigateToDialog(context),
tooltip: 'do the stuff',
child: Icon(Icons.add),
),
);
}
}
【问题讨论】:
-
你想在那个主屏幕上显示对话框吗?
-
问题是您有一个对话框作为路线的主要小部件。通常你不希望这样,你只想在主路由内显示对话框,它将覆盖它。查看此链接 -> coflutter.com/flutter/how-to-show-dialog-in-flutter 特别是
_showMaterialDialog方法