flutter 注意事项

import 'package:flutter/material.dart';
import 'package:flutter_application_tabbar/home/homeVC.dart';
import 'package:flutter_application_tabbar/login/login.dart';
import 'package:flutter_application_tabbar/model/Login.dart';
import 'package:flutter_application_tabbar/tool/SPUtil.dart';
import 'package:flutter_application_tabbar/tool/base_method.dart';
import 'package:flutter_application_tabbar/tool/base_response.dart';
import 'package:flutter_application_tabbar/tool/net.dart';
import 'package:flutter_application_tabbar/tool/network_manager.dart';
import 'package:shared_preferences/shared_preferences.dart';

class login extends StatelessWidget {
  String phone = "";
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(appBar: AppBar(title: Text('登录')), body: subLogin()),
    );
  }
}

class subLogin extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Padding(
        padding: EdgeInsets.all(16.0),
        child: Column(
          //mainAxisAlignment: MainAxisAlignment.center,
          children: [
            SizedBox(height: 100),
            TextField(
              keyboardType: TextInputType.number,
              maxLength: 11,
              onChanged: (value) {
                print(value);
              },
              onEditingComplete: () {
                print(123);
              },
              decoration: InputDecoration(
                labelText: '请输入账号',
                //hintText: '在这里输入文本1',
                border: OutlineInputBorder(),
              ),
            ),
            SizedBox(height: 16), // 添加间距
            TextField(
              maxLength: 6,
              keyboardType: TextInputType.number,
              decoration: InputDecoration(
                labelText: '请输入密码',
                //hintText: '在这里输入文本2',
                border: OutlineInputBorder(),
              ),
            ),
            SizedBox(height: 30), // 添加间距
            TextButton(
                onPressed: () {
                  onClick(context);
                },
                child: Text("登录"))
          ],
        ),
      ),
    );
  }

  onClick(BuildContext context) {
    this.request(context);
  }

  void request(BuildContext context) async {
    Navigator.push(context, MaterialPageRoute(builder: (context) {
      return home();
    }));
  }
}

这里有两点注意事项

1 context 传参

onPressed: () {
                  onClick(context);
                },
//写成下面这样语法不会报错,但是初始化构建的时候会执行一次
onPressed:  onClick(context);
    /*在Flutter中,context是一个BuildContext对象,它提供了访问当前widget树的信息。当你调用一个函数并传递context作为参数时,这个函数会在widget被构建时执行。如果你希望在某个事件触发时才调用这个函数,你需要将这个函数绑定到一个事件处理器上,而不是直接调用它。 */         

2 导航跳转

body 需要包装一下,不然导航跳转会报下面的错误

//Flutter Error: Navigator operation requested with a context that does not include a Navigator
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容