英文:
Tutorial Coach Mark - TargetContent is overflowing the screen
问题
我注意到,在我的应用程序中使用教程教练标记进行导览时,我注意到,根据焦点中内容的大小,焦点和目标内容之间的距离会变大。这个问题导致了溢出,影响了使用。
请观看视频,并注意当内容较大时的空间差异。如果空间较小,描述(目标内容)就不会溢出:(我还展示了按钮在焦点上时的小空间,以查看空间差异)
the code:
showTour(){
initTargets();
tutorialCoachMark = TutorialCoachMark(
targets: targets,
hideSkip: true,
paddingFocus: 0
)..show(context: context, rootOverlay: true);
}
initTargets(){
targets = [
TargetFocus(
identify: "qr-code-key",
keyTarget: barCodeKey,
contents: [
TargetContent(
align: ContentAlign.bottom,
builder: (context, controller) {
return CoachMarkDescription(
text: "Ou utilize o leitor de código de barras. Basta clicar no ícone e apontar a câmera para o equipamento.",
margin: EdgeInsets.only(left: 70, right: 10),
onNext: (){
// setState(() {
// isTutorialFocusForm = true;
// });
controller.next();
},
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true) {
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
);
}),
]
),
TargetFocus(
identify: "form-key",
keyTarget: formKey,
shape: ShapeLightFocus.RRect,
contents: [
TargetContent(
builder: (context, controller) {
return Positioned(
top: 20,
child: CoachMarkDescription(
text: "Preencha todos os campos e insira o arquivo da sua nota fiscal.",
margin: EdgeInsets.only(left: 40, right: 40),
onNext: (){
controller.next();
},
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true){
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
),
);
}),
]
),
TargetFocus(
identify: "register-button-key",
keyTarget: registerButtonKey,
shape: ShapeLightFocus.RRect,
contents: [
TargetContent(
align: ContentAlign.top,
builder: (context, controller) {
return CoachMarkDescription(
text: "Clique em “cadastrar”, para prosseguir e seu equipamento será listado.",
margin: EdgeInsets.only(left: 40, right: 40),
isFinish: true,
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true){
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
);
}),
]
),
];
}
CoachMarkDescription类代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class CoachMarkDescription extends StatefulWidget {
final String text;
final String skip;
final String next;
final bool? isFinish;
final EdgeInsets margin;
final Function? onSkip;
final Function? onNext;
const CoachMarkDescription({
Key? key,
required this.text,
this.skip = "Pular",
this.next = "Próximo",
this.onSkip,
this.onNext,
required this.margin,
this.isFinish
}) : super(key: key);
@override
State<CoachMarkDescription> createState() => _CoachMarkDescriptionState();
}
class _CoachMarkDescriptionState extends State<CoachMarkDescription> {
bool isFinish = false;
@override
Widget build(BuildContext context) {
if(widget.isFinish == true){
isFinish = true;
}
return Container(
// width: 256,
padding: EdgeInsets.only(top: 20, left: 20, right: 20, bottom: 20),
margin: widget.margin,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10)
),
child: Column(
children: [
Text(
widget.text,
textAlign: isFinish ? TextAlign.center : TextAlign.left,
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
color: Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(height: 20),
!isFinish ?
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
onTap: (){
widget.onSkip!();
},
child: Text(
"PULAR",
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
color: Color.fromRGBO(51, 51, 51, 1)
),
),
),
GestureDetector(
onTap: (){
widget.onNext!();
},
child: Text(
"PRÓXIMO",
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
fontWeight: FontWeight.w600,
color: Theme.of(context).primaryColor
),
),
)
],
)
: GestureDetector(
onTap: (){
widget.onSkip!();
},
child: Text(
"FINALIZAR",
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
fontWeight: FontWeight.w600,
color: Theme.of(context).primaryColor
),
),
)
],
),
);
}
}
我尝试将paddingFocus
参数设置为负数,只接受小于-11的数字,但如果我将paddingFocus: -10
,描述会稍微好一些,但仍然会溢出。我阅读了TutorialCoachMark的文档,但没有找到可以缩小空间的参数。我还尝试在CoachmarkDescription中使用Positioned但没有起作用。
我想要减小焦点(form)和描述之间的空间,消除溢出,并显示完整的容器,就像其他目标焦点一样。
英文:
I am using tutorial coach mark for a tour in my app, but I notice that depending on the size of content in the focus, the distance between focus and the TargetContent is bigger. This problem is causing an overflow that interferes with the use.
See the video and notice the difference of space when de content is bigger. If the space were small, the description (TargetContent) would not overflow: (i also show the small space when the button is on focus to see the difference of the spaces)
the code:
showTour(){
initTargets();
tutorialCoachMark = TutorialCoachMark(
targets: targets,
hideSkip: true,
paddingFocus: 0
)..show(context: context, rootOverlay: true);
}
initTargets(){
targets = [
TargetFocus(
identify: "qr-code-key",
keyTarget: barCodeKey,
contents: [
TargetContent(
align: ContentAlign.bottom,
builder: (context, controller) {
return CoachMarkDescription(
text: "Ou utilize o leitor de código de barras. Basta clicar no ícone e apontar a câmera para o equipamento.",
margin: EdgeInsets.only(left: 70, right: 10),
onNext: (){
// setState(() {
// isTutorialFocusForm = true;
// });
controller.next();
},
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true) {
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
);
}),
]
),
TargetFocus(
identify: "form-key",
keyTarget: formKey,
shape: ShapeLightFocus.RRect,
contents: [
TargetContent(
builder: (context, controller) {
return Positioned(
top: 20,
child: CoachMarkDescription(
text: "Preencha todos os campos e insira o arquivo da sua nota fiscal.",
margin: EdgeInsets.only(left: 40, right: 40),
onNext: (){
controller.next();
},
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true){
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
),
);
}),
]
),
TargetFocus(
identify: "register-button-key",
keyTarget: registerButtonKey,
shape: ShapeLightFocus.RRect,
contents: [
TargetContent(
align: ContentAlign.top,
builder: (context, controller) {
return CoachMarkDescription(
text: "Clique em “cadastrar”, para prosseguir e seu equipamento será listado.",
margin: EdgeInsets.only(left: 40, right: 40),
isFinish: true,
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true){
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
);
}),
]
),
];
}
CoachMarlDescription class code:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class CoachMarkDescription extends StatefulWidget {
final String text;
final String skip;
final String next;
final bool? isFinish;
final EdgeInsets margin;
final Function? onSkip;
final Function? onNext;
const CoachMarkDescription({
Key? key,
required this.text,
this.skip = "Pular",
this.next = "Próximo",
this.onSkip,
this.onNext,
required this.margin,
this.isFinish
}) : super(key: key);
@override
State<CoachMarkDescription> createState() => _CoachMarkDescriptionState();
}
class _CoachMarkDescriptionState extends State<CoachMarkDescription> {
bool isFinish = false;
@override
Widget build(BuildContext context) {
if(widget.isFinish == true){
isFinish = true;
}
return Container(
// width: 256,
padding: EdgeInsets.only(top: 20, left: 20, right: 20, bottom: 20),
margin: widget.margin,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10)
),
child: Column(
children: [
Text(
widget.text,
textAlign: isFinish ? TextAlign.center : TextAlign.left,
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
color: Color.fromRGBO(51, 51, 51, 1)
),
),
SizedBox(height: 20),
!isFinish ?
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
onTap: (){
widget.onSkip!();
},
child: Text(
"PULAR",
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
color: Color.fromRGBO(51, 51, 51, 1)
),
),
),
GestureDetector(
onTap: (){
widget.onNext!();
},
child: Text(
"PRÓXIMO",
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
fontWeight: FontWeight.w600,
color: Theme.of(context).primaryColor
),
),
)
],
)
: GestureDetector(
onTap: (){
widget.onSkip!();
},
child: Text(
"FINALIZAR",
style: TextStyle(
fontSize: 14,
fontFamily: "OpenSans",
fontWeight: FontWeight.w600,
color: Theme.of(context).primaryColor
),
),
)
],
),
);
}
}
i tryed put a negative number in paddingfocus parameter, and only acepted numbers less than -11 but if i put paddingFocus: -10, the description got a little better but still with overflow. I read the documentation of TutorialCoachMark and I dont find some parameter that can shrink the space and I try wrap CoachmarkDescription in Position but nothing worked.
I want to decrease the space between focus (form) and description, removing the overflow and showing the full Container, just like the others Target Focus
答案1
得分: 0
我考虑调整父组件的大小、边距和填充,以使目标内容适合得当。此外,我更改了填充(TargetContent的参数),使其如下所示:
TargetFocus(
identify: "form-key",
keyTarget: formKey,
shape: ShapeLightFocus.RRect,
contents: [
TargetContent(
padding: EdgeInsets.zero,
builder: (context, controller) {
return CoachMarkDescription(
text: "Preencha todos os campos e insira o arquivo da sua nota fiscal.",
margin: EdgeInsets.only(left: 40, right: 40),
onNext: () {
controller.next();
},
onSkip: () {
controller.skip();
if (widget.isRevisitTour == true) {
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
);
},
),
],
),
英文:
I considered adjusting the size of the parent component, margins, and padding to allow the target content to fit properly. Moreover, I change the padding (parameter of TargetContent), so it looks like this:
TargetFocus(
identify: "form-key",
keyTarget: formKey,
shape: ShapeLightFocus.RRect,
contents: [
TargetContent(
padding: EdgeInsets.zero
builder: (context, controller) {
return CoachMarkDescription(
text: "Preencha todos os campos e insira o arquivo da sua nota fiscal.",
margin: EdgeInsets.only(left: 40, right: 40),
onNext: (){
controller.next();
},
onSkip: (){
controller.skip();
if(widget.isRevisitTour == true){
_setFlagToShowRegistrationEquipmentTour(false);
Navigator.of(context).pop();
}
},
);
}),
]
),
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论