【问题标题】:How to put button under an image? Flutter如何将按钮放在图像下方?扑
【发布时间】:2022-11-21 11:32:45
【问题描述】:

大家好,我是 Flutter 的新手,我需要有关我的应用程序的帮助,以便在我的应用程序主菜单中的图像下方放置一个按钮,

到目前为止,这是我基于https://docs.flutter.dev/development/ui/layout/tutorial构建的代码

import 'package:flutter/material.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_navigation/get_navigation.dart';
import 'Reminder/ui/home_reminder.dart';
import 'Reminder/ui/widgets/button.dart';

void main() {
  // debugPaintSizeEnabled = true;
  runApp(const HomePage());
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Medicine Reminder App'),
        ),
        body: Stack(
          children: [
            Image.asset(
              'images/MenuImg.jpg',
              width: 600,
              height: 200,
              fit: BoxFit.cover,
            ),
          ],
        ),
      ),
    );
  }
}

我想做的是放一个按钮导航到不同的页面。

这是我想放置按钮的小插图

【问题讨论】:

    标签: android flutter dart mobile flutter-layout


    【解决方案1】:

    您可以用 Column 包装图像小部件,以设置垂直排列的小部件,我这样做是为了让行显示带有 MainAxisAlignment.spaceBetween 的按钮以分隔它们

    试试这个:

        import 'package:flutter/material.dart';
    import 'package:get/get_core/src/get_main.dart';
    import 'package:get/get_navigation/get_navigation.dart';
    import 'Reminder/ui/home_reminder.dart';
    import 'Reminder/ui/widgets/button.dart';
    
    void main() {
      // debugPaintSizeEnabled = true;
      runApp(const HomePage());
    }
    
    class HomePage extends StatelessWidget {
      const HomePage({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          home: Scaffold(
            appBar: AppBar(
              title: const Text('Medicine Reminder App'),
            ),
            body: Column(
              children: [
                Stack(
                  children: [
                    Image.asset(
                      'images/MenuImg.jpg',
                      width: 600,
                      height: 200,
                      fit: BoxFit.cover,
                    ),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    ElevatedButton(
                      child: Text('btn 1'),
                      onPressed: () {},
                    ),
                    ElevatedButton(
                      child: Text('btn 2'),
                      onPressed: () {},
                    ),
                    ElevatedButton(
                      child: Text('btn 3'),
                      onPressed: () {},
                    ),
                  ],
                ),
              ],
            ),
          ),
        );
      }
    }
    

    【讨论】:

      【解决方案2】:

      您需要在 Scaffold 小部件的 body 参数中使用小部件 Column 才能在屏幕的列视图中添加多个小部件。

      您可以在 zaap.run link 找到一个完整的示例。

      您还可以在此处找到没有任何预览的代码:

      import 'package:flutter/material.dart';
      
      void main() {
        // debugPaintSizeEnabled = true;
        runApp(const HomePage());
      }
      
      class HomePage extends StatelessWidget {
        const HomePage({super.key});
      
        @override
        Widget build(BuildContext context) {
          return MaterialApp(
            debugShowCheckedModeBanner: false,
            home: Scaffold(
              appBar: AppBar(
                title: const Text('Medicine Reminder App'),
              ),
              body: Column(children: [
                Stack(
                  children: [
                    Image.network(
                      'https://i.imgur.com/9ZOaH1m.jpeg',
                      width: 600,
                      height: 200,
                      fit: BoxFit.cover,
                    ),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: [
                    TextButton(
                      style: ButtonStyle(
                          backgroundColor: MaterialStateProperty.all(Colors.black)),
                      onPressed: () {},
                      child: Text("Button1"),
                    ),
                    TextButton(
                      style: ButtonStyle(
                          backgroundColor: MaterialStateProperty.all(Colors.black)),
                      onPressed: () {},
                      child: Text("Button2"),
                    ),
                    TextButton(
                      style: ButtonStyle(
                          backgroundColor: MaterialStateProperty.all(Colors.black)),
                      onPressed: () {},
                      child: Text("Button3"),
                    ),
                  ],
                )
              ]),
            ),
          );
        }
      }
      

      【讨论】:

        【解决方案3】:

        只需将 Stack 更改为 Column 或 Listiw

        body: Column(
         children: [
          Image.asset(
            'images/MenuImg.jpg',
            width: 600,
            height: 200,
            fit: BoxFit.cover,
          ),
          /// your button is here:
          Row(
          children:[
          ElevetedButton(),// btn 1
          ElevetedButton(),// btn 2
          ... 
         ],
        ),
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多