Так что мне удалось выяснить это. SingleChildScrollView
должен находиться внутри вашего отступа, который является родительским виджетом для вашего тела. Ваш Card
должен быть ребенком SingleChildScrollView
.
Этот код должен работать для вас.
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Company name'),
leading: new IconButton(
icon: new Icon(Icons.arrow_back),
onPressed: () {
Navigator.pop(context, true);
}
)
),
body: Padding(
padding: EdgeInsets.all(10),
child: SingleChildScrollView(
child: Card(
child: Container(
decoration:
BoxDecoration(color: Colors.white),
child: Column(
children: <Widget>[
Container(
height: 120,
width: double.infinity,
decoration: BoxDecoration(color: Colors.white),
child: Row(
children: <Widget>[
Padding(
padding: EdgeInsets.fromLTRB(10, 0, 0, 0),
child: Container(
alignment: Alignment.centerLeft,
width: 100,
height: 100,
child: Image.network("https://via.placeholder.com/200"))),
Expanded(
child: Padding(
padding: EdgeInsets.fromLTRB(30, 20, 10, 0),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Text('Company name',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold)),
Text('Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum')
],
)),
)
],
)),
Padding(
padding: EdgeInsets.only(left: 20, top: 20, right: 20),
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum ',
style: TextStyle(color: Colors.blue)),
Padding(padding: EdgeInsets.only(top: 25)),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Icon(
Icons.thumb_up,
color: Colors.white,
),
Padding(
padding: EdgeInsets.only(right: 20)),
Text('Lorem ipsum lorem',
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold,
fontSize: 18))
],
)
]
),
),
),
]
)
)
)
)
)
)
);
}
}
PS Я изменил некоторые цвета, чтобы увидеть отображение интерфейса на экране.
вы можете передать флаг в представление, чтобы указать, что он должен отключить все элементы управления.
вот пример:
public ActionResult MyAction() {
ViewData["disablecontrols"] = false;
if (condition)
{
ViewData["disablecontrols"] = true;
}
return View();
}
В представлении (с использованием jQuery):
<script type="text/javascript">
$(document).ready(function() {
var disabled = <%=ViewData["disablecontrols"].ToString()%>;
if (disabled) {
$('input,select').attr('disabled',disabled);
}
})
</script>
Это действительно зависит от того, как визуализируются ваши элементы управления. На практике мы делаем нечто подобное, за исключением того, что устанавливаем элементы управления только для чтения. Это сделано для того, чтобы мы могли повторно использовать представление (только для чтения) и редактировать представления.
Я лично рекомендую сделать это, чтобы иметь флаг только для чтения, который устанавливается в представлении с использованием значения в ViewData .
Оттуда напишите несколько вспомогательных методов, чтобы различать отключенную и неотключенную разметку. Вы можете создать эту разметку самостоятельно или обернуть существующие методы HtmlHelper, которые предоставляет ASP.NET MVC.
// In your controller
ViewData["DisableControls"] = true;
<%-- In your view --%>
<% bool disabled = ViewData["DisableControls"] as bool; %>
...
<%= Html.TextBox("fieldname", value, disabled) %>
<%= Html.CheckBox("anotherone", value, disabled) %>
// In a helper class
public static string TextBox(this HtmlHelper Html, string fieldname, object value, bool disabled)
{
var attributes = new Dictionary<string, string>();
if (disabled)
attributes.Add("disabled", "disabled");
return Html.TextBox(fieldname, value, attributes);
}
Мы делаем это, используя Page_Load (), как и в WebForms, для отключения серверных элементов управления. Мы создали несколько настраиваемых серверных элементов управления для обработки наших полей формы. Это было в младенчестве ASP.NET MVC, и я бы не рекомендовал это делать, но это альтернатива.
Я не думаю, что вы можете сделать это с помощью контроллера, так как представление возвращается после того, как вся другая логика сделана. Однако вы, вероятно, могли бы что-то сделать с библиотеками AJAX, включенными в ASP.NET MVC.