Comment faire pour obtenir l'extension d'un widget à la fois verticale (hauteur) et horizontale (largeur) en direction de
Le code ci-dessous définit un tableau dans lequel j'aurais besoin d'atteindre pour le graphique à être élargi à la fois verticale (hauteur) et horizontale (largeur) de direction. La méthode suggérée (par exemple https://docs.flutter.io/flutter/widgets/Row-class.html) est d'utiliser Expanded
dans Row
ou Column
.
Le graphique widget je suis en train de développer étend CustomPaint
, sans enfants, tout est peint à l'aide d'un CustomPainter
sur la toile, dans la CustomPainter.paint(canvas, size)
.
Ce code
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text(
'vvvvvvvv:',
),
new RaisedButton(
color: Colors.green,
onPressed: _chartStateChanger,
),
new Text(
'vvvvvvvv:',
),
new Expanded( //Expanded in Column, no expansion vertically
child: new Row(
children: [
new Text('>>>'),
new Expanded(//Expanded in Row, expands horizontally
child: new Chart( //extends CustomPaint
//size: chartLogicalSize,
painter: new ChartPainter( //extends CustomPainter
chartData: _chartData,
chartOptions: _chartOptions,
),
),
),
new Text('<<<'),
],
), //row
),
new Text('^^^^^^:'),
new RaisedButton(
color: Colors.green,
onPressed: _chartStateChanger,
),
],
),
),
);
résultat ressemble à ceci: (code de ChartPainter n'est pas indiqué pour des raisons de concision)
À l'intérieur de la ChartPainter.paint(canvas, size)
il y a un print()
l'impression de la taille.
print(" ### Taille: paint(): adopté taille = ${taille}");
Le résultat de la peinture->print ci-dessus est:
I/flutter ( 4187): ### Taille: paint(): adopté taille = Taille(340.0, 0.0)
L'impression ainsi que le montre l'image, que la largeur de l'expansion sur le niveau de la ligne a été transmis à la CustomPainter.print(canvas, size)
(largeur = 340.0), mais la hauteur de l'expansion sur la colonne n'a pas adopté la coutume peintre d'impression (hauteur = 0.0). Bien que le résultat montre que la ligne ne se étendue de la hauteur, si ce n'était pas passée à l'intérieur de la ligne à la CustomPainter
- 0 hauteur a été reçu.
De quoi ai-je besoin de changer pour atteindre la hauteur de l'expansion?
Grâce
- Eh bien, après descendant plus profondément dans l'excellent Flottement de la documentation de l'algorithme de mise en page en docs.flutter.io/flutter/widgets/Row-class.html , je vois que je besoin d'ajouter crossAxisAlignment: CrossAxisAlignment.tronçon de la ligne, comme ceci :
new Row( crossAxisAlignment: CrossAxisAlignment.stretch, <- added line children: [
- Envisager de répondre à votre propre question, si vous êtes satisfait de votre solution.
Vous devez vous connecter pour publier un commentaire.
Ici est une réduction de cas de test pour le problème vous de voir. La solution est de donner à votre
Row
uncrossAxisAlignment
deCrossAxisAlignment.stretch
. Sinon, il va essayer de déterminer la valeur intrinsèque de la hauteur de votreCustomPaint
qui est égale à zéro, car il n'a pas à avoir un enfant.crossAxisAlignment: CrossAxisAlignment.stretch
. Également ajouté quelques commentaires. Si tout cela est Ok avec vous s'il vous plaît examen, et je vais accepter, sinon faites le moi savoir merci.Il ya une meilleure façon que de nidification
Row
,Expended
etColumn
widget. Vous pouvez utiliser leContainer
widget avecConstraints
àBoxConstraints.expend()
.Voici le code composant logiciel enfichable de mon widget.
Pour ceux qui ont lutté pour obtenir le gradient de concert avec le comportement Matériel: