问题描述
我是新来的,我的英语不好。请回答容易理解的内容... 我已经尝试过使用AspectRatio窗口小部件,但是它与Center窗口小部件结合使用,将按钮移动到了中心。除此之外,它还可以,但是按钮确实需要贴在一边。到目前为止,这是我的代码:
import 'package:Flutter/cupertino.dart';
import 'package:Flutter/material.dart';
import 'main.dart';
import 'contentData.dart';
import 'package:swipedetector/swipedetector.dart';
AppBrain contentData = AppBrain();
class SwipePage extends StatefulWidget {
SwipePage({Key key,this.title}) : super(key: key);
final String title;
@override
_SwipePage createState() => _SwipePage();
}
class _SwipePage extends State<SwipePage> {
@override
Widget build(BuildContext context) {
return SwipeDetector(
swipeConfiguration: SwipeConfiguration(
horizontalSwipeMaxHeightThreshold: 80.0,horizontalSwipeMindisplacement: 30.0,horizontalSwipeMinVeLocity: 150.0),onSwipeLeft: () {
Navigator.of(context).push(
to@R_459_4045@ionPage(),);
},child: Scaffold(
backgroundColor: Colors.white,body: SafeArea(
child: Padding(
padding: const EdgeInsets.only(top: 20,bottom: 20),child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Container(
decoration: Boxdecoration(
color: Colors.white,borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),topRight: Radius.circular(20),bottomLeft: Radius.circular(20),bottomright: Radius.circular(20)),BoxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),spreadRadius: 5,blurRadius: 7,offset: Offset(0,3),// changes position of shadow
),],),child: ClipRRect(
borderRadius: BorderRadius.circular(20),child: Image.asset(
AppBrain().getimageAdress(),Padding(
padding: const EdgeInsets.only(top: 20.0,child: Divider(
color: Colors.grey,height: 20,thickness: 2,indent: 120,endindent: 120,Padding(
padding: const EdgeInsets.only(bottom: 20),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,crossAxisAlignment: CrossAxisAlignment.end,children: <Widget>[
Container(
decoration: Boxdecoration(
color: buttonColor,borderRadius: BorderRadius.only(
topRight: Radius.circular(50),bottomright: Radius.circular(50),child: MaterialButton(
height: 60,onpressed: () {},textColor: red,child: Icon(
Icons.close,size: 45,Container(
width: 120,Container(
decoration: Boxdecoration(
color: buttonColor,borderRadius: BorderRadius.only(
topLeft: Radius.circular(50),bottomLeft: Radius.circular(50),onpressed: () {
Navigator.of(context).push(
to@R_459_4045@ionPage(),);
},textColor: green,child: Icon(
Icons.check,)
],);
}
}
这是现在的样子: https://imgur.com/a/2kgpJ6A 这是在所有纵横比和分辨率下的外观(图像应按比例缩小。): https://imgur.com/FBNlpDa
解决方法
看看您的代码,您至少遇到两个不同的问题。
- 设置正确的图像适合度-您可以在
BoxFit.contain
中使用Image.asset(fit: boxFit.contain,.... )
,以确保将其调整大小以包含在其父项中。 - 您有一个
Column
,并且希望第一个孩子采用所有可用宽度。因此,您应该将其嵌套在Expanded
小部件中。
即。结构上类似:
Column(
children: [
Expanded(
// your image goes here which will take as much height as possible.
child: Image.asset('asset',fit: BoxFit.contain),),Container(
// your button bar which takes up the rest of the height
child: MaterialButton( ... ),],);
我省略了很多,但我希望你能理解。
,我想我自己在Herbert的帮助下修复了它,谢谢:)。我将包含图像的容器包装在“扩展”小部件中,并将flex值设置为3。 这是我的新代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'main.dart';
import 'contentData.dart';
import 'package:swipedetector/swipedetector.dart';
AppBrain contentData = AppBrain();
class SwipePage extends StatefulWidget {
SwipePage({Key key,this.title}) : super(key: key);
final String title;
@override
_SwipePage createState() => _SwipePage();
}
class _SwipePage extends State<SwipePage> {
@override
Widget build(BuildContext context) {
return SwipeDetector(
swipeConfiguration: SwipeConfiguration(
horizontalSwipeMaxHeightThreshold: 80.0,horizontalSwipeMinDisplacement: 30.0,horizontalSwipeMinVelocity: 150.0),onSwipeLeft: () {
Navigator.of(context).push(
toInformationPage(),);
},child: Scaffold(
backgroundColor: Colors.white,body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Expanded(
flex: 4,child: Container(
decoration: BoxDecoration(
color: Colors.white,borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),topRight: Radius.circular(20),bottomLeft: Radius.circular(20),bottomRight: Radius.circular(20)),boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),spreadRadius: 5,blurRadius: 7,offset: Offset(0,3),// changes position of shadow
),child: ClipRRect(
borderRadius: BorderRadius.circular(20),child: Image.asset(
AppBrain().getImageAdress(),fit: BoxFit.contain,margin: EdgeInsets.fromLTRB(25,25,0),Padding(
padding: const EdgeInsets.only(
top: 20.0,child: Divider(
color: Colors.grey,height: 20,thickness: 2,indent: 120,endIndent: 120,Padding(
padding: const EdgeInsets.only(bottom: 25),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,crossAxisAlignment: CrossAxisAlignment.end,children: <Widget>[
Container(
decoration: BoxDecoration(
color: buttonColor,borderRadius: BorderRadius.only(
topRight: Radius.circular(50),bottomRight: Radius.circular(50),child: MaterialButton(
height: 60,onPressed: () {},textColor: red,child: Icon(
Icons.close,size: 45,Container(
width: 120,Container(
decoration: BoxDecoration(
color: buttonColor,borderRadius: BorderRadius.only(
topLeft: Radius.circular(50),bottomLeft: Radius.circular(50),onPressed: () {
Navigator.of(context).push(
toInformationPage(),);
},textColor: green,child: Icon(
Icons.check,)
],);
}
}
,
您也可以尝试使用FittedBox小部件。