如何水平添加容器——flutter

How to add containers horizontally - flutter

我想知道使用什么可以添加容器并排添加,两个在一行上,但是第一个已经创建了,我目前有一个布局有问题,我必须使用什么才能让它像这样工作,它在屏幕截图中怎么样?

我想使用 Wrap 或 Grid.builder 但这可以吗?每一个提示对我来说都是非常有用的。

  class _ViewState extends State<View_3> {
  @override
 Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    backgroundColor: Colors.transparent,
    leading: IconButton(
      icon: const Icon(Icons.arrow_back_ios, color: Colors.black),
      onPressed: () => Navigator.of(context).pop(),
    ),
  ),
  body: _createPage(context),
);
}

  Widget _createPage(BuildContext context) {
return SafeArea(
  child: Align(
    child: SingleChildScrollView(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          SizedBox(height: 10),
           all(context)
        ],
      ),
    ),
  ),
);

 }
 // widget which ll contain photo from another screen
  int x = 60;
  List<Widget> a = [
Container(
  height: 150,
  margin: EdgeInsets.all(100.0),
  decoration: BoxDecoration(
    border: Border.all(color: Colors.orangeAccent, width: 3),
    color: Colors.white,
    borderRadius: BorderRadius.circular(20.0),
  ),
),
  ];
//for create new containers
void _d() {
setState(() {
  a.add( Container(
    height: 150,
    margin: EdgeInsets.all(50.0),
    decoration: BoxDecoration(
      border: Border.all(color: Colors.orangeAccent, width: 3),
      color: Colors.white,
      borderRadius: BorderRadius.circular(20.0),
    ),
  ),);
  });
   }

 Widget all(BuildContext context) {
 return Center(
    child: Wrap(
      spacing: 8.0,
      // line interval
      runSpacing: 8.0,
  children: <Widget>[

    Flexible(
      child: ListView.builder(
          scrollDirection: Axis.vertical,
          shrinkWrap: true,
          itemCount: a.length,
          itemBuilder: (context, index) {
            return a[index];
          }),
    ),
    FloatingActionButton(
      child: const Icon(Icons.add),
      onPressed: _d,

    ),
  ],
));
}

你可以按照这个思路:

在网格视图中,“获取”第一个元素:

if (index == 0) {...}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: GridView.builder(
          gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
              maxCrossAxisExtent: 200,
              childAspectRatio: 3 / 2,
              crossAxisSpacing: 20,
              mainAxisSpacing: 20),
          itemCount: 10,
          itemBuilder: (BuildContext ctx, index) {
            //The first item
            if (index == 0) {
              return Container(
                alignment: Alignment.center,
                child: Icon(Icons.add),
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.orange, width: 2),
                  color: Colors.white,
                  borderRadius: BorderRadius.circular(15),
                ),
              );
            }
            //All others items
            return Container(
              alignment: Alignment.center,
              child: Text("name"),
              decoration: BoxDecoration(
                border: Border.all(color: Colors.orange, width: 2),
                color: Colors.white,
                borderRadius: BorderRadius.circular(15),
              ),
            );
          },
        ),
      ),
    );
  }
}

结果:

我相信这对你有用。

 Widget _createPage(BuildContext context) {
    return SafeArea(
        child: Padding(
      padding: const EdgeInsets.all(12.0),
      child: GridView.builder(
          gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2,
            crossAxisSpacing: 12,
            mainAxisSpacing: 12,
          ),
          itemCount: _numberOfGird + 1,
          itemBuilder: (context, index) {
            if (index == _numberOfGird)

              /// wrapping with row, else full tile will be clickable
              return Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  GestureDetector(
                    onTap: () {
                      setState(() {
                        _numberOfGird += 1;
                      });
                    },
                    child: Container(
                        padding: EdgeInsets.all(25),
                        decoration: BoxDecoration(
                          shape: BoxShape.circle,
                          color: Colors.orange,
                        ),
                        child: Icon(
                          Icons.add,
                          color: Colors.white,
                        )),
                  ),
                ],
              );
            else
              return Container(
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(22),
                  border: Border.all(
                    color: Colors.orange,
                    width: 2,
                  ),
                ),
              );
          }),
    )

       
  }