【问题标题】:Flutter: Positioning images in flutterFlutter:在 Flutter 中定位图像
【发布时间】:2021-12-03 11:19:02
【问题描述】:

我刚开始学习 Flutter 的一些教程,但我有一件事要存档。我在代码中定位图像时遇到问题。这就是问题所在。

.

如果有人可以重新编码,因为我尝试了 2 天并且无法理解它是如何工作的。

我试图找到的解决方案是将徽标下的图像放置在右上角而不移动徽标和文本栏

我想要的草稿:

我的代码:

ma​​in.dart

import 'package:flutter/material.dart';
import 'package:kafe/screens/login_screen.dart';
 
 
 
void main() {
  runApp(const MyApp());
}
 
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
 
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Email and Password Login',
      theme: ThemeData(
        primarySwatch: Colors.brown,
      ),
      home: LoginScreen(),
    );
  }
}

login_screen.dart

import 'package:flutter/material.dart';
 
class LoginScreen extends StatefulWidget {
  const LoginScreen({ Key? key }) : super(key: key);
 
  @override
  _LoginScreenState createState() => _LoginScreenState();
}
 
class _LoginScreenState extends State<LoginScreen> {
 // form key
 final _formKey = GlobalKey<FormState>();
 
 // Editing Controller
final TextEditingController emailController = new TextEditingController();
final TextEditingController passwordController = new TextEditingController();
final TextEditingController locationController = new TextEditingController();
 
  @override
  Widget build(BuildContext context) {
 
    //Name field
    final emailField = TextFormField(
      autofocus: false,
      controller: emailController,
      keyboardType: TextInputType.emailAddress,
    //validator: {} {},
    onSaved: (value)
    {
        emailController.text = value!;
 
    },
    textInputAction: TextInputAction.next,
    decoration: InputDecoration(
      prefixIcon: Icon(Icons.account_circle_outlined),
      contentPadding: EdgeInsets.fromLTRB(20, 15, 20, 15),
      hintText: "Вашето име",
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(20),
      ),
    ),
    );
 
    //password field
    final passwordField = TextFormField(
      autofocus: false,
      controller: passwordController,
    //validator: {} {},
    onSaved: (value)
    {
        passwordController.text = value!;
 
    },
    textInputAction: TextInputAction.next,
    decoration: InputDecoration(
      prefixIcon: Icon(Icons.call_end_outlined),
      contentPadding: EdgeInsets.fromLTRB(20, 15, 20, 15),
      hintText: "Вашиот телефонски број",
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(20),
      ),
    ),
    );
 
    //Location field
    final locationField = TextFormField(
      autofocus: false,
      controller: locationController,
 
    //validator: {} {},
    onSaved: (value)
    {
        locationController.text = value!;
 
    },
    textInputAction: TextInputAction.done,
    decoration: InputDecoration(
      prefixIcon: Icon(Icons.add_location_alt_outlined),
      contentPadding: EdgeInsets.fromLTRB(20, 15, 20, 15),
      hintText: "Вашата локација",
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(20),
 
      ),
    )),
 
    // button
 
   loginButton = Material(
    elevation: 5,
    borderRadius: BorderRadius.circular(30),
    color: Colors.redAccent,
    child: MaterialButton(
      padding: EdgeInsets.fromLTRB(20, 15, 20, 15),
      minWidth: MediaQuery.of(context).size.width,
      onPressed: () {},
      child: Text(
        "Логирање", 
      textAlign: TextAlign.center, 
      style: TextStyle(fontSize: 20,
      color: Colors.white,
      fontWeight: FontWeight.bold,
       ),
      ),
    ),
  );        
 
    return Scaffold(
      backgroundColor: Colors.white,
      body: Center(
        child: SingleChildScrollView(
          child: Container(
            color: Colors.white,
            child: Padding(
              padding: const EdgeInsets.all(35.0),
              child: Form(
                key: _formKey,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget> [
 
                    SizedBox(
                      width: 130,
 
                      child: SizedBox(
                        child: Image.asset("assets/top.png",
                        fit: BoxFit.contain,
                        ),
                        ),
                    ),
 
 
 
                    SizedBox(
                      height: 250,
 
                      child: Image.asset(
                        "assets/logo.png",
 
                      fit: BoxFit.contain,
                      )
                    ),
 
 
 
 
 
                    emailField,
                    SizedBox(height: 30),
 
                    passwordField,
                    SizedBox(height: 30),
 
                    locationField,
                    SizedBox(height: 30),
                    loginButton,
                    SizedBox(height: 30),
                  ],
                ),
 
              ),
            ),
          ),
        ) ,
      ),
    );
  }
}


【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    在您的小部件树上,logo.png 放置在 top.png 图像之后,这是一个订单问题,请将 logo 作为第一个孩子放在 Column

         crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        SizedBox(
                          height: 250,
                          child: Image.asset(
                            "assets/logo.png",
                            fit: BoxFit.contain,
                          ),
                        ),
                        SizedBox(
                          width: 130,
                          child: Image.asset(
                            "assets/top.png",
                            fit: BoxFit.contain,
                          ),
                        ),
    

    但下一张图片描述了您喜欢放置图片的位置。为此,请使用 Align 小部件包装 SizedBox

    Align(
      alignment: Alignment.topLeft,
      child: SizedBox(
        width: 130,
    

    另外,在这种情况下,我更喜欢Stack

    【讨论】:

      【解决方案2】:

      您可以尝试定位或对齐并使用它。但您需要将它们按 stack

      包装
                Stack(
                  color: Colors.white,
                  child:  Form(
                      key: _formKey,
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: <Widget> [
       
                          Positioned(
                            left:0,top:0
                            child: SizedBox(
                            width: 130,
       
                            child: SizedBox(
                              child: Image.asset("assets/top.png",
                              fit: BoxFit.contain,
                              ),
                              ),
                                  ),
                                    ),
                    Align(
                     alignment: Alingment.center,
                     child: Column(
                      children: [
                          SizedBox(
                            height: 250,
       
                            child: Image.asset(
                              "assets/logo.png",
       
                            fit: BoxFit.contain,
                            )
                          ),
       
       
       
       
       
                          emailField,
                          SizedBox(height: 30),
       
                          passwordField,
                          SizedBox(height: 30),
       
                          locationField,
                          SizedBox(height: 30),
                          loginButton,
                          SizedBox(height: 30),
                        ]
                     )
                       ),
       
       
       
                          
                        ],
                      ),
       
                    ),
                  ),
                ),
      

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 2021-08-25
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 2020-06-16
        • 2023-01-22
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多