【问题标题】:Flutter: Where I can add Text()Flutter:我可以在哪里添加 Text()
【发布时间】:2020-06-21 04:23:07
【问题描述】:

我想点击屏幕,然后将背景颜色更改为随机颜色。它工作正常,但我想在屏幕中心添加文本,请帮助我。 也许有人有想法,谢谢! 我尝试将多个孩子添加到 AnimatedContainer。 尝试在 GestureDetector 中添加文本,但无法正常工作

TopScreen.dart

import 'package:flutter/material.dart';

class TopScreen extends StatefulWidget {
  final Widget child; //child widget

  TopScreen({this.child});

  @override
  State createState() => _TopScreenState();

  static _TopScreenState of (BuildContext context) {
    assert(context != null);
    final _TopScreenState result = context.findAncestorStateOfType();
    return result;
  }
}

class _TopScreenState extends State<TopScreen> {
  Color _color = Colors.white;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: AnimatedContainer(
          child: widget.child,
          color: _color,
          duration: Duration(milliseconds: 500),
        ),
    );
  }

  void setColor(Color color) {
    this._color = color;
  }
}

main.dart

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:solidsoftwaretest/TopScreen.dart';

void main() => runApp(MaterialApp(home: TopScreen(child: MainScreen())));

class MainScreen extends StatefulWidget {
  @override
  State createState() => _MainScreenState();
}

class _MainScreenState extends State<MainScreen> {

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
            onTap: () {
              TopScreen.of(context).setColor(Colors.primaries[Random().nextInt(Colors.primaries.length)]);
              TopScreen.of(context).setState(() {});
            },

    );
  } //build
}

UPD:如果我将子(文本)添加到 GestureDetector -gestureDetector 仅适用于文本。

class _MainScreenState extends State<MainScreen> {

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      child: Center(
        child: Text('Hey there!')
      ),
        onTap: () {
          TopScreen.of(context).setColor(Colors.primaries[Random().nextInt(Colors.primaries.length)]);
          TopScreen.of(context).setState(() {});
        }
    );
  } //build
}

【问题讨论】:

    标签: flutter dart flutter-layout flutter-animation


    【解决方案1】:

    您可以在Container 中添加Text 小部件并将其进一步包装在GestureDetector 中。为了使GestureDetector 作用于整个区域,给Container 一个透明颜色,如下所示:

    return GestureDetector(
      onTap: () {
        TopScreen.of(context).setColor(Colors.primaries[Random().nextInt(Colors.primaries.length)]);
          TopScreen.of(context).setState(() {});
      },
      child: Container(
        color: Colors.transparent,
        alignment: Alignment.center,
        child: Text('Hey there'),
        ),
      );
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      您应该可以在您的AnimatedContainer 中添加ColumnColumn 将包含多个 Widgets。 我更新了代码以显示完整的示例。

      ScaffoldColorCenterText60597839(
        child: Text('Bananas'),
      )
      

      class ScaffoldColorCenterText60597839 extends StatefulWidget {
        final Widget child;
        ScaffoldColorCenterText60597839({
          this.child
        });
      
        @override
        _ScaffoldColorCenterText60597839State createState() => _ScaffoldColorCenterText60597839State();
      }
      
      class _ScaffoldColorCenterText60597839State extends State<ScaffoldColorCenterText60597839> {
        Color _color = Colors.white;
      
        @override
        Widget build(BuildContext context) {
          return Scaffold(
            body: AnimatedContainer(
              child: Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    widget.child,
                    Text('A text widget')
                  ],
                )
              ),
              color: _color,
              duration: Duration(milliseconds: 500),
            ),
          );
        }
      }
      

      【讨论】:

      • 谢谢,但它会抛出异常“渲染库捕获的异常”,“在布局期间,RenderPointerListener 对象被赋予了无限大小。”
      • 我已更新代码以显示完整的工作示例。您发送给构造函数的孩子一定有问题。不是这段代码本身。
      • 同样的问题,也许我需要重新编写所有程序
      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 2019-12-05
      • 2011-08-26
      相关资源
      最近更新 更多