小编Zef*_*ndo的帖子

Flutter:找不到包“build_runner”

我使用Hive Packages,我在我的项目中实现了模块化。首先,我network使用运行命令创建名称为包的包flutter create --template=package network,我引用了这个

这个包包括我的项目模型。之后我创建模型用户,然后运行命令构建模型flutter packages pub run build_runner build --delete-conflicting-outputs

import 'package:hive/hive.dart';

part 'user_model_hive.g.dart';

@HiveType()
class UserModelHive extends HiveObject {
  @HiveField(0) 
  DateTime id;
  @HiveField(1)
  String giverName;
  @HiveField(2)
  String pinCodeNumber;

  UserModelHive({this.id, this.giverName, this.pinCodeNumber});
}

Run Code Online (Sandbox Code Playgroud)

但我得到这样的错误

Could not find package "build_runner". Did you forget to add a dependency? pub finished with exit code 65

我确定已经包含build_runner在我的包中network

pubspec.yaml

name: network
description: A new Flutter package project.
version: 0.0.1 …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-hive

6
推荐指数
3
解决办法
6051
查看次数

Flutter:防止 FutureBuilder 总是刷新每个更改屏幕

我有 FutureBuilder 从 API 和代码中获取用户资料来获取用户,如下所示:

 Future<List<UserModel>> getUserByUsername({@required String username}) async {
    try {
      final response =
          await _client.get("$_baseUrl/getUserByUsername?username=$username");
      final Map<String, dynamic> responseJson = json.decode(response.body);
      if (responseJson["status"] == "ok") {
        List userList = responseJson['data'];
        final result = userList
            .map<UserModel>((json) => UserModel.fromJson(json))
            .toList();
        return result;
      } else {
        throw CustomError(responseJson['message']);
      }
    } catch (e) {
      return Future.error(e.toString());
    }
  }
Run Code Online (Sandbox Code Playgroud)

未来的建设者

如果您在上面的 GIF 中可以看到,My FutureBuilder 位于 BottomNavigationBar 内。每次我从 BottomNavigationBar 更改屏幕/页面并回到我的 FutureBuilder 总是刷新!

我如何才能将其修复为仅刷新一次?

主屏幕

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) { …
Run Code Online (Sandbox Code Playgroud)

dart flutter

6
推荐指数
2
解决办法
3852
查看次数

Flutter:Dio HTTP 处理错误异常 404

我的期望

它使用 Http.get

我在处理错误 Exception DIO包时遇到问题,我尝试在HTTP包中使用以下代码:

 Future<List<Mosque>> getMahasiswaById(String id) async{
       try {
         var apiRespon = await http.get('$baseURL/mahasiswa/get/id/$id');
        if(apiRespon.statusCode == 200){
            final apiResponJson = json.decode(apiRespon.body);
            return (apiResponJson['data'] as List).map((p)=>Mosque.fromJson(p)).toList();
        }else{
          print(apiRespon.statusCode.toString());
            throw Exception('Failed Load Data with status code ${apiRespon.statusCode}');
        }
       }on Exception catch (e) {
         print(e);
         return null;
       }
  }
Run Code Online (Sandbox Code Playgroud)

但是如果我用DIO进行更改,即使我已经在处理此异常,我的应用程序也会突然崩溃并出现错误异常:

 Future<List<Mosque>> getMahasiswaById(String id) async{
       try {
         var apiRespon = await dio.get('$baseURL/mahasiswa/get/id/$id');
        if(apiRespon.statusCode == 200){
            final apiResponJson = apiRespon.data;
            return (apiResponJson['data'] as List).map((p)=>Mosque.fromJson(p)).toList();
        }else{
          print(apiRespon.statusCode.toString());
            throw …
Run Code Online (Sandbox Code Playgroud)

dart flutter

5
推荐指数
1
解决办法
2万
查看次数

Flutter:NoSuchMethodError:方法“showSnackBar”被调用为空

我遇到了一些问题,_showSnackbar我看到以下错误:

Exception has occurred.
NoSuchMethodError (NoSuchMethodError: The method 'showSnackBar' 
was called on null.Receiver: null
Tried calling: showSnackBar(Instance of 'SnackBar'))
Run Code Online (Sandbox Code Playgroud)

但我敢肯定,我已经创建GlobalKey为ShowSnackbar:

final _scaffoldKey = GlobalKey<ScaffoldState>();
Run Code Online (Sandbox Code Playgroud)

这是我的功能shownackbar

void _showSnackBar(BuildContext context, String message, Color color) {
    final snackBar = SnackBar(
      duration: Duration(seconds: 1),
      backgroundColor: color,
      content: Text(message),
    );
    _scaffoldKey.currentState.showSnackBar(snackBar);
  }
Run Code Online (Sandbox Code Playgroud)

这就是我调用showsnackbar的方式

upload != 0 ? _showSnackBar(context,"Success Upload",Colors.green) : _showSnackBar(context,"Success Upload",Colors.green);
Run Code Online (Sandbox Code Playgroud)

这是我认为的完整源代码

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:mosque/api/api_mosque.dart';

class UploadImage extends StatefulWidget {
  @override
  _UploadImageState createState() => _UploadImageState(); …
Run Code Online (Sandbox Code Playgroud)

dart flutter

4
推荐指数
1
解决办法
3030
查看次数

Flutter:在深色模式下更改文本颜色 CupertinoDatePicker

我的应用程序中有 CupertinoDatePicker 以使用以下代码选择日期和时间:

formatColumn(
widget: Consumer<MainCalendarProvider>(
 builder: (_, mcProvider, __) => SizedBox(
 height: sizes.height(context) / 3.5,
child: CupertinoDatePicker(
initialDateTime: result['dateRevision'],
 minimumDate: result['dateRevision'],
use24hFormat: true,
onDateTimeChanged: (dateChange) {
mcProvider.setSelectedDateFromCupertinoDatePicker(  dateChange, );},
                                      ),
                                    ),
                                  ),
                                  title: 'Date Activity'),
Run Code Online (Sandbox Code Playgroud)

一切正常,直到我在我的应用程序中添加了功能暗模式。在暗模式文本颜色 CupertinoDatePicker 仍然为黑色,我想将其更改为白色。在 CupertinoDatePicker 中,只有 backgroundcolor 属性。我已经尝试更改为红色、蓝色、绿色等,但文本仍为黑色。

我怎样才能改变这个?

谢谢。

在此处输入图片说明

dart flutter cupertinopicker

4
推荐指数
2
解决办法
3320
查看次数

动态选项卡数量

我有像上面这样的设计,我的标签栏位于 BottomNavigationBar 内,我想将标签栏放在我的 BottomNavigationBar 菜单中。问题是,我不想有嵌套的脚手架,我不想使用,TabController因为我的选项卡是动态的,选项卡长度可以根据用户添加它而减少或增加。如果我TabController在内部使用并定义它initState,则选项卡无法增加/减少,因为在 initState 中仅定义一次值。

我怎样才能做到这一点 ?

我的期望与下面的示例类似,当我添加选项卡和 tabMenu 时,它会增加。但出现这个错误

The following assertion was thrown building TabBar(dirty, dependencies: [_InheritedTheme,
_LocalizationsScope-[GlobalKey#a56a4]], state: _TabBarState#fb337):
Controller's length property (2) does not match the number of tabs (3) present in TabBar's tabs
property.
The relevant error-causing widget was:
  TabBar
Run Code Online (Sandbox Code Playgroud)

虚拟示例


class TaskScreen extends StatefulWidget {
  @override
  _TaskScreenState createState() => _TaskScreenState();
}

class _TaskScreenState extends State<TaskScreen> with SingleTickerProviderStateMixin {
  TabController _tabController;

  final List<Tab> _tab = [
    Tab(text: …
Run Code Online (Sandbox Code Playgroud)

tabbar flutter flutter-layout

4
推荐指数
1
解决办法
3795
查看次数

Flutter Animation&lt;Color&gt; : Class 'Color' 没有实例方法 '-'

我使用Tween[Color]NotificationListener[ScrollNotification]和 Appbar制作简单的动画来改变 Appbar 的颜色。我想在这种情况下滚动屏幕时更改颜色 Appbar 和操作图标:

  • 如果用户滚动 == minScrollExtent => 将颜色更改为透明
  • 否则将颜色更改为原色。

逻辑

    if (notification.metrics.pixels == notification.metrics.minScrollExtent) {
      Future.delayed(Duration(seconds: 0), () => controllerAppbar.reverse());
    } else {
      Future.delayed(Duration(seconds: 0), () => controllerAppbar.forward());
    }
Run Code Online (Sandbox Code Playgroud)

当我滚动屏幕并达到两个条件时,我收到此错误,但我得到了我想要的结果。

错误


???????? Exception caught by widgets library ???????????????????????????????????
Class 'Color' has no instance method '-'.
Receiver: Instance of 'Color'
Tried calling: -(Instance of 'Color')
The relevant error-causing widget was
    AnimatedBuilder 
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我怎么修?

AppBarAnimation 小部件


class AppBarAnimationColor extends StatefulWidget {

  final Duration duration; …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-animation

3
推荐指数
1
解决办法
801
查看次数

Flutter Hive:制作多个 openBox

我正在使用 Hive 来制作简单的 CRUD;在Hive Doc about open box 中,我们可以这样声明:

var box = await Hive.openBox<E>('testBox');
Run Code Online (Sandbox Code Playgroud)

我的问题:是否可以制作多个 openBox?我想要这样的东西:

Future _openBox() async {
  var dir = await getApplicationDocumentsDirectory();
  Hive.init(dir.path);
  var box_session = await Hive.openBox("box_session");
  var box_comment = await Hive.openBox("box_comment");
  return await box_session,box_comment;
}
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-hive

2
推荐指数
1
解决办法
4496
查看次数

Flutter Table Calendar:显示从 API 到 Table Calendar 的事件

我想显示日历并包括事件,该事件已经存在于 API 中。我搜索适合我的情况的插件,我找到了Table Calendar Plugin。我阅读了示例以手动显示事件并找到它:

@override
  void initState() {
    super.initState();
    final _selectedDay = DateTime.now();

    _events = {
      _selectedDay.subtract(Duration(days: 30)): ['Event A0', 'Event B0', 'Event C0'],
      _selectedDay.subtract(Duration(days: 27)): ['Event A1'],
      _selectedDay.subtract(Duration(days: 20)): ['Event A2', 'Event B2', 'Event C2', 'Event D2'],
      _selectedDay.subtract(Duration(days: 16)): ['Event A3', 'Event B3'],
      _selectedDay.subtract(Duration(days: 10)): ['Event A4', 'Event B4', 'Event C4'],
      _selectedDay.subtract(Duration(days: 4)): ['Event A5', 'Event B5', 'Event C5'],
      _selectedDay.subtract(Duration(days: 2)): ['Event A6', 'Event B6'],
      _selectedDay: ['Event A7', 'Event B7', 'Event C7', 'Event D7'],
      _selectedDay.add(Duration(days: 1)): …
Run Code Online (Sandbox Code Playgroud)

dart flutter

2
推荐指数
1
解决办法
1万
查看次数

Flutter:取消处理中的计时器不工作

我已经使用计时器和以下代码创建了运行时钟:

源代码


class LiveClock extends StatefulWidget {
  @override
  _LiveClockState createState() => _LiveClockState();
}

class _LiveClockState extends State<LiveClock> {
  String _timeString;
  String _dateString;

  Timer _timerClock;

  String _formatTime(DateTime dateTime) => DateFormat.Hms().format(dateTime);
  String _formatDate(DateTime dateTime) =>
      DateFormat.yMMMMEEEEd(appConfig.indonesiaLocale).format(dateTime);

  @override
  void initState() {
    super.initState();
    _timeString = _formatTime(DateTime.now());
    _dateString = _formatDate(DateTime.now());
    _timerClock = Timer.periodic(Duration(seconds: 1), _getTime);
  }

  @override
  void dispose() {
    _timerClock.cancel();
    super.dispose();
  }

  void _getTime(Timer timer) {
    final DateTime now = DateTime.now();
    final String formattedTime = _formatTime(now);
    setState(() => _timeString = formattedTime);
  }

  @override
  Widget …
Run Code Online (Sandbox Code Playgroud)

dart flutter

2
推荐指数
1
解决办法
3256
查看次数