Невозможно поместить виджеты в правильное положение в FLUTTER - PullRequest
0 голосов
/ 12 марта 2020

Я создал страницу входа с использованием CustomBorder сверху вниз, я не могу установить позицию внизу CustomBorder. Ниже приведен код, который я пробовал, и, пожалуйста, также обратитесь к соответствующим изображениям для получения дополнительной информации.

import 'dart:math';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
//import 'package:flutter/services.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:matchstix/styles/textStyle.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    //SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(primarySwatch: Colors.blue, brightness: Brightness.dark),
      debugShowCheckedModeBanner: false,
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          mainAxisSize: MainAxisSize.max,
          children: <Widget>[
          Stack(
            children: <Widget>[
            Column(
              mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                Container(
                  height: 180.0,
                  decoration: ShapeDecoration(
                    gradient: LinearGradient(
                        begin: Alignment.bottomLeft,
                        end: Alignment.topRight,
                        colors: [Colors.orangeAccent, Colors.deepOrange]),
                    // color: Colors.deepOrangeAccent,
                    shape: CustomShapeBorder(),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 50.0, top: 0.0),
                  child: Text(
                    "SET, MATCH AND CHALLENGE",
                    style: mainHeadingTextStyle,
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 30.0, right: 30),
                  child: Text(
                      "A simple, fun, and a creative way to "
                      "set the bespoke challenges with "
                      "either a friend or a group of "
                      "friends anywhere in the world",
                      textAlign: TextAlign.justify,
                      style: mainHeadingTextStyle2),
                ),
                Container(
                  width: 300.0,
                  height: 60.0,
                  margin: const EdgeInsets.only(bottom: 12),
                  child: RaisedButton(
                    textColor: Colors.white,
                    color: Colors.grey,
                    shape: RoundedRectangleBorder(
                      borderRadius: new BorderRadius.circular(18.0),
                      //side: BorderSide(color: Colors.red)
                    ),
                    child: Text("Sign Up",
                        textAlign: TextAlign.center, style: signUpTextStyle),
                  ),
                ),
                Container(
                  height: 60.0,
                  child: RaisedButton(
                    onPressed: () {},
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(18.0)),
                    padding: EdgeInsets.all(0.0),
                    child: Ink(
                      decoration: BoxDecoration(
                          gradient: LinearGradient(
                            colors: [
                              Colors.deepOrange,
                              Colors.orangeAccent,
                              Colors.yellow
                            ],
                            begin: Alignment.centerLeft,
                            end: Alignment.centerRight,
                          ),
                          borderRadius: BorderRadius.circular(18.0)),
                      child: Container(
                        constraints:
                            BoxConstraints(maxWidth: 300.0, minHeight: 70.0),
                        alignment: Alignment.center,
                        child: Text("Login",
                            textAlign: TextAlign.center, style: loginTextStyle),
                      ),
                    ),
                  ),
                ),
                Container(
                  height: 180.0,
                  child: Transform.rotate(
                    angle: pi,
                    child: Container(
                      decoration: ShapeDecoration(
                        gradient: LinearGradient(
                            begin: Alignment.bottomLeft,
                            end: Alignment.topRight,
                            colors: [
                              Colors.orangeAccent,
                              Colors.deepOrange,
                            ]),
                        shape: CustomShapeBorder(),
                      ),
                    ),
                  ),
                ),
              ],
            )
            ],
          ),
          ],
        ),
      ),
    );
  }
}

class CustomShapeBorder extends ShapeBorder {
  final double distanceFromWall = 12;
  final double controlPointDistanceFromWall = 5;

  @override
  // TODO: implement dimensions
  EdgeInsetsGeometry get dimensions => null;

  @override
  Path getInnerPath(Rect rect, {TextDirection textDirection}) {
    // TODO: implement getInnerPath
    return null;
  }

  @override
  Path getOuterPath(Rect rect, {TextDirection textDirection}) {
    // TODO: implement getOuterPath
    return getClip(Size(260.0, 180.0));
  }

  @override
  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {
    // TODO: implement paint
  }

  @override
  ShapeBorder scale(double t) {
    // TODO: implement scale
    return null;
  }

  Path getClip(Size size) {
    Path clippedPath = new Path();

    clippedPath.lineTo(0, size.height);
    clippedPath.quadraticBezierTo(
        30, size.height + 10, size.width * 0.20, size.height - 50);
    clippedPath.quadraticBezierTo(
        70, size.height - 120, size.width * 0.40, size.height * 0.35);
    clippedPath.quadraticBezierTo(
        180, (size.height - (size.height * 0.6)), size.width - 40, 32);
    clippedPath.quadraticBezierTo(250, 0, size.width, 0);
    clippedPath.lineTo(size.width, 0);
    clippedPath.close();
    return clippedPath;
  }
}

Изображение 1: Что я хочу, пожалуйста, обратитесь к этому изображению

What I Want, Please refer to this image

Изображение 2: Чтобы увидеть проблемную область, см. Это изображение

To see the problem area, Please refer to this image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...