简体   繁体   English

Flutter:如何在 Flutter 中的其他小部件之间创建漂亮的曲线椭圆形容器/分隔线

[英]Flutter: How to create a beautiful Curve oval shape Container / Divider between other widgets in Flutter

How to create this beautiful curve shape divider in a flutter App.如何在 flutter 应用程序中创建这个漂亮的曲线形状分隔线。

在此处输入图像描述

Simply use this customDivider as your divider只需使用此 customDivider 作为您的分隔线

customDivider(String title) {
    return Row(
      children: [
        Expanded(
          child: Container(
            color: Colors.white,
            height: 10,
          ),
        ),
        Container(
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(13),
            color: Colors.white,
          ),
          child: Center(child: Text(title)),
        ),
        Expanded(
          child: Container(
            color: Colors.white,
            height: 10,
          ),
        ),
      ],
    );
  }

Here is an example这是一个例子

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.grey,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView.builder(
        itemCount: 5,
        shrinkWrap: true,
        itemBuilder: (context, index) => listItem(index),
      ),
    );
  }

  customDivider(String title) {
    return Row(
      children: [
        Expanded(
          child: Container(
            color: Colors.white,
            height: 10,
          ),
        ),
        Container(
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(13),
            color: Colors.white,
          ),
          child: Center(child: Text(title)),
        ),
        Expanded(
          child: Container(
            color: Colors.white,
            height: 10,
          ),
        ),
      ],
    );
  }

  listItem(int index) {
    return Column(
      children: [
        Container(
          height: 200,
          width: 200,
          margin: EdgeInsets.all(10),
          color: index.isEven ? Colors.orange : Colors.deepPurpleAccent,
        ),
        customDivider("your title"),
      ],
    );
  }
}

OUTPUT: OUTPUT:

输出图像

There can be many ways to do this in flutter. This is one of the simplest approach.在 flutter 中可以有很多方法来做到这一点。这是最简单的方法之一。

截屏


main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SafeArea(
        child: SO(),
      ),
    );
  }
}

class SO extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.pink.shade100,
      appBar: AppBar(),
      body: Center(
        child: CapsuleWidget(
          label: 'organizing data'.toUpperCase(),
          ribbonHeight: 8,
        ),
      ),
    );
  }
}

class CapsuleWidget extends StatelessWidget {
  final Color fillColor;
  final Color textColor;
  final String label;
  final double ribbonHeight;
  final double ribbonRadius;

  const CapsuleWidget({
    Key key,
    this.fillColor = Colors.white,
    this.textColor = Colors.black,
    @required this.label,
    @required this.ribbonHeight,
    this.ribbonRadius = 1000,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Expanded(
          child: Container(
            height: ribbonHeight,
            color: fillColor,
          ),
        ),
        Container(
          decoration: BoxDecoration(color: fillColor, borderRadius: BorderRadius.circular(ribbonRadius)),
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Text(
              label,
              style: TextStyle(color: textColor, fontWeight: FontWeight.w500),
            ),
          ),
        ),
        Expanded(
          child: Container(
            height: ribbonHeight,
            color: fillColor,
          ),
        ),
      ],
    );
  }
}

it use Stack class它使用堆栈 class

link url: https://api.flutter.dev/flutter/widgets/Stack-class.html链接 url: https://api.flutter.dev/flutter/widgets/Stack-class.html

pseudo code伪代码

Stack {
  Container(), // background
  Contanier(), // white Line
  Text() , // center Text
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM