#flutter #flutter-layout
#flutter #flutter-layout
Вопрос:
Сначала я хочу центрировать один виджет, а затем добавить другой виджет справа от центрального виджета. В настоящее время API-интерфейсы flutter для этого недоступны. В Android это можно легко сделать в относительной компоновке или компоновке ограничений.
Я попытался с помощью какого-то взлома с помощью MediaQuery,
Stack(
children: [
Center(child: Text(17)),
Positioned(
bottom: 0,
left: (screenWidth / 2) (screenWidth / 3),
child: Column(
children: []
)
)
Как попробовать это простым или правильным способом.
Ответ №1:
Для этого вы можете использовать Align
виджет.
Пример кода
import 'package:flutter/material.dart';
class SandBox extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: 300,
height: 300,
color: Colors.blue,
child: Align(
alignment: Alignment.centerRight, //aligns the child widget to the right center
child: Text('17'),
),
),
),
);
}
}
Комментарии:
1. пожалуйста, отметьте ответ как принятый, если он вам помог 😊
Ответ №2:
Может быть, это поможет вам достичь того, чего вы хотите:
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
height: 30,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(
child: Text('17'),
),
Align(
alignment: Alignment.bottomRight,
child: Container(
width: 10,
height: 10,
decoration: BoxDecoration(
color: Colors.black,
shape: BoxShape.circle,
),
),
),
],
),
);
}
}
Или вы можете настроить его с помощью некоторых вычислений с использованием MediaQuery
и Stack
.
Для достижения этой цели вы можете использовать пакет badges.
Ответ №3:
Наконец, я нашел использованный https://pub.dev/packages/align_positioned
AlignPositioned.relative(
Text(day.englishDate.toString(),
textScaleFactor: 3, style: dayTextStyle),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
....
],
),
moveByChildWidth: 1.1,
minChildWidthRatio: 1,
moveByChildHeight: 0.3)
Ответ №4:
Пожалуйста, используйте Align
вместе с Row
.
вот простой код для достижения этой цели.
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Stack(
children:[
Align(
child : Row(
mainAxisAlignment: MainAxisAlignment.center,
children:[
Padding(child: Text('Left'),padding: EdgeInsets.all(5)),
Text('Center widget'),
Padding(child: Text('Right'),padding: EdgeInsets.all(5))
]) ,
alignment: Alignment.center),
]
),
),
);
}
}