How to implement wrap_content and match_parent in Android

You can do this as follows:

1, Width =Wrap_content Height=Wrap_content:

Wrap(
  children: <Widget>[your_child])
Copy the code

Width =Match_parent Height=Match_parent:

Container(
        height: double.infinity,
    width: double.infinity,child:your_child)
Copy the code

3, Width = Match_parent,Height = Wrap_conten:

Row(
  mainAxisSize: MainAxisSize.max,
  children: <Widget>[*your_child*],
);
Copy the code

4, Width = Wrap_content,Height = Match_parent:

Column(
  mainAxisSize: MainAxisSize.max,
  children: <Widget>[your_child],
);
Copy the code

How do I avoid FutureBuilder executing future methods too often

Incorrect usage:

@override
Widget build(BuildContext context) {
  return FutureBuilder(
    future: httpCall(),
    builder: (context, snapshot) {
     
    },
  );
}
Copy the code

Correct usage:

class _ExampleState extends State<Example> {
  Future<int> future;

  @override
  void initState() {
    future = Future.value(42);
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    returnFutureBuilder( future: future, builder: (context, snapshot) { }, ); }}Copy the code

Bottom navigation switch causes reconstruction problems

Bottom navigation is often written as follows:

Widget _currentBody;

@override
Widget build(BuildContext context) {
  returnScaffold( body: _currentBody, bottomNavigationBar: BottomNavigationBar( items: <BottomNavigationBarItem>[ ... ] , onTap: (index) { _bottomNavigationChange(index); },),); } _bottomNavigationChange(int index) { switch (index) {case 0:
      _currentBody = OnePage();
      break;
    case 1:
      _currentBody = TwoPage();
      break;
    case 2:
      _currentBody = ThreePage();
      break;
  }
  setState(() {});
}
Copy the code

This usage causes the page to be rebuilt with each switch.

To resolve this, use IndexedStack:

int _currIndex;

@override
Widget build(BuildContext context) {
  returnScaffold( body: IndexedStack( index: _currIndex, children: <Widget>[OnePage(), TwoPage(), ThreePage()], ), bottomNavigationBar: BottomNavigationBar( items: <BottomNavigationBarItem>[ ... ] , onTap: (index) { _bottomNavigationChange(index); },),); } _bottomNavigationChange(int index) {setState(() {
      _currIndex = index;
    });
}
Copy the code

TabBar switching causes build problems

In general, TabBarView is used as follows:

TabBarView(
  controller: this._tabController,
  children: <Widget>[
    _buildTabView1(),
    _buildTabView2(),
  ],
)
Copy the code

When you switch to TAB, the page will be rebuilt.

var _newsKey = PageStorageKey('news');
var _technologyKey = PageStorageKey('technology');

TabBarView(
  controller: this._tabController,
  children: <Widget>[
    _buildTabView1(_newsKey),
    _buildTabView2(_technologyKey),
  ],
)
Copy the code

The width and height of the Stack child does not work

Set the 100×100 red box in the Stack as follows:

Center(
  child: Container(
    height: 300,
    width: 300,
    color: Colors.blue,
    child: Stack(
      children: <Widget>[
        Positioned.fill(
          child: Container(
            height: 100,
            width: 100,
            color: Colors.red,
          ),
        )
      ],
    ),
  ),
)
Copy the code

The red box is filled with the parent component. The solution is to wrap the red box with Center, Align, or UnconstrainedBox as follows:

Positioned.fill( child: Align( child: Container( height: 100, width: 100, color: Color.red,),),) How to get the property of the StatefulWidget control in the State class Class Test extends StatefulWidget {Test({this.data}); final int data; @override State<StatefulWidget> createState() => _TestState(); } class _TestState extends State<Test>{ }Copy the code

Teststate = testState; testState = testState;

Define the same parameter in _TestState, which is cumbersome and not recommended. Use widget.data directly (recommended).

default value of optional parameter must be constant

The above exception is often encountered in class constructors, as shown in the following code:

class BarrageItem extends StatefulWidget {
  BarrageItem(
      { this.text,
      this.duration = Duration(seconds: 3)});
      
Copy the code

Exception message: The optional parameter must be constant. Modify it as follows:

const Duration _kDuration = Duration(seconds: 3);

class BarrageItem extends StatefulWidget {
  BarrageItem(
      {this.text,
      this.duration = _kDuration});
Copy the code

Dart constants usually start with k, _ means private, and can only be used within the current package. Don’t ask me why.

How do I remove the Debug icon in the upper right corner in debug mode

MaterialApp(
 debugShowCheckedModeBanner: false
)
Copy the code

How do I use hexadecimal color values

The following uses do not display colors:

Color(0xb74093)
Copy the code

The Color constructor is ARGB, so we need to add transparency.

Color(0xFFb74093)
Copy the code

FF stands for completely opaque.

How do I change the icon and name of my application

How do I set the initial value for TextField

class _FooState extends State<Foo> {
  TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = new TextEditingController(text: 'Initial value');
  }

  @override
  Widget build(BuildContext context) {
    returnTextField( controller: _controller, ); }}Copy the code

Scaffold.of() called with a context that does not contain a Scaffold

Scaffold.of() context is not contained in scaffold.of ().

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('the old meng'),
      ),
      body: Center(
        child: RaisedButton(
          color: Colors.pink,
          textColor: Colors.white,
          onPressed: _displaySnackBar(context),
          child: Text('show SnackBar'),),),); } } _displaySnackBar(BuildContext context) { final snackBar = SnackBar(content: Text('the old meng'));
  Scaffold.of(context).showSnackBar(snackBar);
}
Copy the code

Note that the context of a HomePage is not contained in that Scaffold. This Scaffold does not call the HomePage. The context is changed as follows:

_scaffoldKey.currentState.showSnackBar(snackbar); 
Copy the code

Or:

Scaffold(
    appBar: AppBar(
        title: Text('the old meng'),
    ),
    body: Builder(
        builder: (context) => 
            Center(
            child: RaisedButton(
            color: Colors.pink,
            textColor: Colors.white,
            onPressed: () => _displaySnackBar(context),
            child: Text('the old meng'(), ((), ((), ((), ((), (()Copy the code

Waiting for another flutter command to release the startup lock

This problem is often encountered when executing flutter commands.

Solution 1:

1. Run the following command on the terminal for Mac or Linux:

killall -9 dart
Copy the code

2, Window run the following command:

taskkill /F /IM dart.exe
Copy the code

Solution 2:

Delete the /bin/cache/lockfile file in the flutter SDK directory.

SetState cannot be called

It cannot be called in the StatelessWidget control and needs to be called in the StatefulWidget.

Sets the percentage of the current control size to the parent control size

1. Use the FractionallySizedBox control

Get the size of the parent control and multiply it by the percentage:

MediaQuery. Of (context). Size. Width * 0.5Copy the code

Row wraps TextField exception directly: BoxConstraints Forces an infinite width

Solutions:

Row(
	children: <Widget>[
		Flexible(
			child: new TextField(),
		),
  ],
),
Copy the code

TextField dynamically get focus and lose focus get focus:

FocusScope.of(context).requestFocus(_focusNode); _focusNode is the focusNode of TextField: _focusNode = focusNode (); TextField( focusNode: _focusNode, ... )Copy the code

Lose focus:

_focusNode.unfocus();
Copy the code

How to determine the current platform

import 'dart:io' show Platform;

if (Platform.isAndroid) {
  // Android-specific code
} else if (Platform.isIOS) {
  // iOS-specific code
}
Copy the code

Platform types include:

Platform.isAndroid Platform.isFuchsia Platform.isIOS Platform.isLinux Platform.isMacOS Platform.isWindows Android’s inability to access HTTP is not a problem with Flutter itself, but is often encountered in development. HTTP access is disabled by default on Android Pie and above and on IOS, mainly for security reasons.

Android solution:

In the. / android/app/SRC/main/AndroidManifest. Application tag in the XML configuration files inside set networkSecurityConfig properties:

<? xml version="1.0" encoding="utf-8"? > <manifest ... > <application android:networkSecurityConfig="@xml/network_security_config"> <! -... --> </application> </manifest>Copy the code

In. / android/app/SRC/main/res directory to create XML folder (existing need not create), create network_security_config in XML folder. The XML file, the content is as follows:

<? xml version="1.0" encoding="utf-8"? > <network-security-config> <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
Copy the code

IOS cannot access HTTP

Add the following to the./ios/Runner/ info.plist file:

<? xml version="1.0" encoding="UTF-8"? > <! DOCTYPE plist PUBLIC"- / / / / DTD PLIST Apple 1.0 / / EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	...
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
</dict>
</plist>
Copy the code

Article from old Meng programmer